1. 程式人生 > >HTTP常見的狀態碼和工作機制

HTTP常見的狀態碼和工作機制

1  什麼是HTTP狀態碼?

       HTTP狀態碼的職責是當客戶端向伺服器傳送請求時,描述返回的請求結果。藉助狀態碼,使用者可以知道伺服器是正常處理了請求,還是出現了錯誤。

2  狀態碼的類別

類別原因短語
1XXInformational(資訊性狀態碼)接收的請求正在處理
2XXSuccess(成功狀態碼)請求正當處理完畢
3XXRedirection(重定向狀態碼)需要進行附加操作以完成請求
4XXClient Error(客戶端錯誤狀態碼)伺服器無法處理請求
5XXServer Error(伺服器錯誤狀態碼)伺服器處理請求出錯

3  常用的HTTP狀態碼

HTTP狀態碼種類繁多,實際上經常使用的大概只有14中,下面一一介紹這14個具有代表性的狀態碼。

3.1  2XX成功

2XX的響應結果表明請求被正常處理了。

3.1.1   200 OK

表示從客戶端發來的請求在伺服器端被正常處理了。

        在響應報文內,隨狀態碼一起返回的資訊會因方法的不同而發生改變。比如,使用GET方法時,對應請求資源的實體會作為響應返回;而使用HEAD方法時,對應請求資源的實體主體不隨報文首部作為響應返回(即在響應中只返回首部,不會返回實體的主體部分)。

3.1.2   204 No  Content

       該狀態碼代表伺服器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。另外,也不允許返回任何實體的主體。比如,當從瀏覽器發出請求處理後,返回204響應,那麼瀏覽器顯示的頁面不發生更新。

       一般在只需要從客戶端往伺服器傳送資訊,而對客戶端不需要傳送新資訊內容的情況下使用。

3.1.3   206 Partial Content

       該狀態碼錶示客戶端進行了範圍請求,而伺服器成功執行了這部分的GET請求。響應報文中包含有Content-Range指定範圍的實體內容。

3.2   3XX重定向

        3XX響應結果表明瀏覽器需要執行某些特殊的處理以正確處理請求。

3.2.1   301 Moved Permannently

       永久重定向。該狀態碼錶示請求的資源已被分配了新的URI,以後應使用資源現在所指的URI。也就是說,如果已經把資源對應的URI儲存為書籤了,此時應該按Location首部欄位提示的URI重新儲存。

       像下方給出的請求URI, 當指定資源路徑的最後忘記新增斜槓"/",就會產生301狀態碼。

http://example.com/sample
3.2.2  302 Found

        臨時重定向。該狀態碼錶示請求的資源已被分配了新的URI,希望使用者(本次)能使用新的URI訪問。

        和 301 Moved Permannently狀態碼類似,但302狀態碼代表的資源不是被永久移動,只是臨時性質的。換句話說,已移動的資源對應的URI將來還有可能發生改變。比如使用者把URI儲存成書籤,但不會像301狀態碼出現時那樣去更新書籤,而是仍舊保留返回302狀態碼的頁面對應的URI。

3.2.3  303 See Other

        該狀態碼錶示由於請求對應存在著另一個URI,應使用GET重定向獲取請求的資源。

       303狀態碼和302Found狀態碼有著相同的功能,但303狀態碼明確表示客戶端應當採用GET方法獲取資源,這點與302狀態碼有區別。

3.2.4   304 Not Modified

         該狀態碼錶示客戶端傳送附帶條件的請求時,伺服器端允許請求訪問資源,但因發生請求未滿足條件的情況後,直接返回304 Not Modified(伺服器端資源未改變,可直接使用客戶端未過期的快取)。304狀態碼返回,不包含任何響應的主體部分。304雖然被劃分在3XX類別中,但是和重定向沒有關係。

3.2.5  307 Temporary Redirect

         臨時重定向。該狀態碼與302 Found有著相同的含義。儘管302標準禁止POST變換成GET,但實際使用時大家並不遵守。

         307會遵照瀏覽器標準,不會從POST變成GET,但是,對於處理響應時的行為,每種瀏覽器有可能出現不同的情況。

3.3   4XX客戶端錯誤

        4XX的響應結果表明客戶端是發生錯誤的原因所在。

3.3.1   400 Bad Request

       該狀態碼錶示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容後再次傳送請求。另外,瀏覽器會像200 OK一樣對待該狀態碼。

3.3.2   401 Unauthorized

       該狀態碼錶示傳送的請求需要有通過HTTP認證(BASIC認證、DIGEST認證)的認證資訊。另外若之前已進行過1次請求,則表示使用者認證失敗。

       返回含有401的響應必須包含一個適用於被請求資源的WWW-Authenticate首部用以質詢使用者資訊。當瀏覽器初次接收到401響應,會彈出認證用的對話視窗。
3.3.3    403 Forbidden

        該狀態碼錶明對請求資源的訪問被伺服器拒絕了。伺服器端沒有必要給出拒絕的詳細理由,但如果想作說明的話,可以在實體的主體部分對原因進行描述,這樣就能讓使用者看到了。

       未獲得檔案系統的訪問授權,訪問許可權出現某些問題(從未授權的傳送源IP地址試圖訪問)等列舉的情況都可能是發生403的原因。

3.3.4   404 Not Found

        該狀態碼錶明伺服器上無法找到請求的資源。除此之外,也可以在伺服器端拒絕請求且不想說明理由時使用。

3.4    5XX伺服器錯誤

       5XX的響應結果表明伺服器本身發生錯誤。

3.4.1   500 Internal Server Error

        該狀態碼錶明伺服器端在執行請求時發生了錯誤。也有可能是Web應用存在的bug或某些臨時的故障。

3.4.2   503 Service Unavailable

        該狀態碼錶明伺服器暫時處於負超載或者正在進行停機維護,現在無法處理請求。如果事先得知解除以上狀況需要的時間,最好寫入Retry-After首部欄位再返回給客戶端。