Ne http durum kodu oturumu zaman aşımına uğradı istemci anlatmak için kullanılan olması gerekiyordu?

8 Cevap php

Bir web sayfası, bu (kullanıcı kimliği doğrulanmış olup olmadığını üzerindeki bilgi içeren) oturumu zaten, yalnızca kimliği doğrulanmış tarafından görülebilir bu ajax yanıtları zaman aşımına varsa, sunucuya AJAX istekleri göndermek için YUI bağlantı yöneticisi / veri kaynağı kullanır kullanıcıların oturum zaten o istemci sadece giriş sayfasına onu yönlendirir ya da oturum uzatmak istiyorsa ona sorar ya, zaman aşımına uğradı ki müşteri söylüyorum, bir http durum kodu döndürmesi gerekir.

Benim sorum bu durumda, oturum zaman aşımına uğradı istemci anlatmak için en uygun ne http durum kodu, yani?

List of HTTP status codes from wiki

8 Cevap

Ben önerebilirsiniz iyi bir WWW-Authenticate başlığı ile bir HTTP 401 durum kodudur.

403 istekleri ile sorun RFC 2616 "Yetki yardımcı olmaz ve isteği tekrar edilmemelidir." Devletler olduğunu (Yani kimlik doğrulaması ya da değil, sen hiç, bu kaynağa erişmek için gitmiyor önemli değil).

401 istekleri ile sorun onlar "bir WWW-Authenticate başlık alanını VERİLMELİDİR" devletler olduğunu. someone has noted, bir WWW-Authenticate başlığında özel bir değeri kullanmak için spec ihlal görünmüyor gibi.

I RFC 2617 neden böyle özel bir WWW-Authenticate başlığının ile birlikte bir HTTP 401 durum tamam olmaz herhangi bir neden göremiyorum:

WWW-Authenticate: MyAuthScheme realm="http://example.com"

Bu tavsiye gibi oAuth spec (aslında onlar benim aklıma RFC garip bir yorumu var gerçi), sadece bu yapmak gibi görünüyor:

WWW-Authenticate: OAuth realm="http://server.example.com/"

(Gerektiği ya GEREKSIZ durum, herhangi bir ZORUNLULUK ile çakışmaması etmemelisiniz görünmüyor) Bu, özellikle RFC tarafından yaptırıma gibi görünmüyor, ama ben aslında onun tarafından yasak olduğunu göremiyorum.

Ben zaman aşımları ve CSRF gibi şeyler geçersiz yani bu net varlık oldu belirteçleri için daha özel bir HTTP durum kodu onların olsaydı.

Ben uygun kod 403/Forbidden olacak inanıyorum. Doğrudan oturumları ile ilgili herhangi yoktur.

Ben bir HTTP 401 öneriyoruz.

403 temelde, diyor "Sen giremezsin, uzağa gitmek ve geri gelme" Kimliğinizi getirmek değildi çünkü izin veya değilseniz "Biz bilmiyoruz, bir 401 diyor. Git Oysa onu almak ve tekrar deneyin. "

Karşılaştırmak Wikipedia's definitions:

HTTP 403 - talebi yasal bir isteği oldu, ama sunucu buna yanıt reddediyor.

HTTP 401 - Similar to 403 Forbidden, but specifically for use when authentication is possible but has failed or not yet been provided.

Hakikat bir oturum zaman aşımı için herhangi bir standart HTTP durum kodu, orada olduğunu. Oturumlar uygulama katmanı değil, HTTP taşıma katmanı uygulanır.

Orada Microsoft, oturum zaman aşımı için kullanıyorum bir özel durum kodu: 599, ya da sadece 5xx aralığında kendi durum kodu makyaj.

Durum Kodları Wiki:

599 Network connect timeout error (Unknown) This status code is not specified in any RFCs, but is used by Microsoft Corp. HTTP proxies to signal a network connect timeout behind the proxy to a client in front of the proxy.

Ben bir oturum zaman aşımı için özel bir durum kodu 599 kullanın ve daha sonra AJAX cevaben bunun için kontrol edin.

Ne 419 hakkında - bu standart değildir, ancak description on Wikipedia uygun görünüyor:

419 Authentication Timeout

Not a part of the HTTP standard, 419 Authentication Timeout denotes that previously valid authentication has expired. It is used as an alternative to 401 Unauthorized in order to differentiate from otherwise authenticated clients being denied access to specific server resources.

Bir Vikipedi bağlantı başına Http Status Codes Bobo tarafından yukarıda sağlanan:

440 Login Timeout (Microsoft)

    A Microsoft extension. Indicates that your session has expired.

. Kod 408 "İstek zaman aşımı", mükemmel görünüyor - RFC 2616 demek açıklıyor

The client did not produce a request within the time that the server was prepared to wait.

yani tam bir "time-out", gereksinim gibi!

Non-Ajax istekleri için, ben bir 302 yönlendirme kullanın.

Ajax istekleri için, benim durum için known errors. That way I can take advantage of the data object. I find the data object easier to work with than parsing jqXHR for info. And then I don't need to worry about what HTTP status code to try to re-purpose için 200 kullanın.

jQuery Örnek:

$.ajax({
    //send data to server
})
.done(function(data, textStatus, jqXHR) {
    if (data.success) {
        //then process return data
    }
    else {
        //get error type or message from data object
        //could use custom error codes
    }
})
.fail(function(jqXHR, textStatus, errorThrown) {
    //handle unknown errors
});