狀態碼告知從伺服器端放回的請求結果

若蘭__明月發表於2018-01-03

###前提 狀態碼的職責是當客戶端向伺服器端傳送請求的時候,描述返回的請求結果。藉助狀態碼,使用者而已知道伺服器端是正常處理了請求還是出現了故障。

狀態碼告知從伺服器端放回的請求結果
####表1.1:狀態碼的類別 | | | 類別 | 原因短語 | | :---: | :-----: | :-----: | | 1XX | Informational(資訊性狀態碼) | 接收的請求正在處理 | | 2XX | Success(成功狀態碼) | 請求正常處理完畢 | | 3XX | Redirection(重定向狀態碼) | 需要進行附加操作以完成請求 | | 4XX | Client Error(客戶端錯誤狀態碼) |伺服器無法處理請求 | | 5XX | Server Error(伺服器錯誤狀態碼) | 伺服器處理請求出錯 |

只要遵守狀態碼類別的定義,及時改變RFC2616中定義的狀態碼,或伺服器端自行建立狀態碼都沒問題

###2XX 成功 2XX的響應結果表示請求被正常處理了 ####200 OK 表明從客戶端發來的請求在伺服器端被正確處理了 在響應報文內,隨狀態碼一起返回的資訊會因為方法的不通而發生改變。比如使用GET方法時候,對應請求資源的實體會作為響應返回;而是用HEAD方法時候,對應請求資源的實體主體不隨著報文首部作為響應返回(即在響應中只返回首部,不會返回實體的主體部分)

狀態碼告知從伺服器端放回的請求結果
####204 Not Content
狀態碼告知從伺服器端放回的請求結果
該狀態碼程式碼伺服器接收的請求已經成功處理,但在返回的響應報文中不含實體的主體部分。另外,也不允許返回任何實體的主體。比如當從遊覽器發出請求處理後,返回204響應,那麼遊覽器顯示的介面不發生更新。 一般在只需要從客戶端往伺服器傳送訊息,而對客戶端不需要傳送新資訊內容的情況下使用 #####206 Partial Content
狀態碼告知從伺服器端放回的請求結果
該狀態碼錶示客戶端進行了範圍請求,而伺服器成功執行了這部分的GET請求,響應報文中包含由Content-Range指定範圍的實體內容 ###3XXX 重定向 3XX響應結果表明遊覽器需要執行某些特殊的處理以正確處理請求。

301 Moved Permanently

狀態碼告知從伺服器端放回的請求結果
永久重定向。該狀態碼錶示請求的資源已經被分配了新的URI,以後應使用資源現在所指的URI。也就是說,如果已經把資源對應的URI儲存為數顯了,這時候應該按照Location首部欄位提示的URI重新儲存。

向下方給出的請求URI,當指定資源路徑的最後忘記新增斜槓"/",就會產生301裝填嗎

http://example.com/sample
複製程式碼

302 Found

狀態碼告知從伺服器端放回的請求結果
臨時重定向。該狀態碼錶示請求的資源已經分配了新的URI,希望使用者(本次)能使用新的URI訪問。 和301 Moved Permanently狀態碼相似,但是302狀態碼錶示的資源不是被永久性移動,只是臨時性性質的。換句話說,已經移動的資源對應的URI將來還有可能發生改變。比如,使用者把URI儲存為書籤,但不會像301狀態碼出現時那樣去更新書籤,而是仍舊保留返回302狀態碼的頁面對應的URI。

303 See Other

狀態碼告知從伺服器端放回的請求結果
該狀態碼錶示由於請求對應的資源存在著另一個URI,應使用GET方法定向獲取請求的資源。 303狀態碼和302 Found狀態碼有著相同的功能,但是303狀態碼明確的表示客戶端應當採用GET方法獲取資源,這點於302狀態碼有區別 比如,當使用POST方法訪問CGI程式,其執行後的處理結果是希望客戶端能以GET方法重定向到另一個URI上去,返回303狀態碼,雖然302Found狀態碼也可以實現相同的功能,但是這裡使用303狀態碼是最理想的

當301、302、303響應狀態碼返回時,幾乎所有的遊覽器都會把POST請求改成GET,並刪除請求報文內的主體,之後請求會自動再次傳送 301、302標準是禁止講POST方法改變為GET方法的,但實際使用時候大家都會這麼做

####304 Not Modified

狀態碼告知從伺服器端放回的請求結果
該狀態碼錶示客戶端傳送附帶條件的請求時候(附帶條件的請求是指採用GET方法的請求報文中包含If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)伺服器端允許請求訪問資源,但是因為發生請求為滿足條件的情況後,直接返回304 Not Modified(伺服器端資源未改變,可直接使用客戶端未過期的快取)。304狀態碼返回時,不包含任何響應的主體部分。304雖然被劃分在3XX類別中,但是和重定向沒有關係。 ####307 Temporary Redirect 臨時重定向。該狀態碼與302Found有著相同的含義。儘管302標準禁止POST變換成GET,但是實際使用大家並不遵守。 307會遵守遊覽器標準,不會從POST變成GET,但是,對於處理響應時候的行為,每種遊覽器都有可能給出現不同的情況 ###4XX客戶端錯誤 4XX的響應結果表明客戶端是發生錯誤的原因所在 ####400 Bad Request
狀態碼告知從伺服器端放回的請求結果
該狀態碼錶示請求報文中存在語法錯誤。當錯誤發生時候,需修改請求的內容後再次傳送請求。另外,遊覽器會像200 OK 一樣對待該狀態碼 ####402 Unauthorized
狀態碼告知從伺服器端放回的請求結果
該狀態碼錶示傳送的請求需要通過HTTP認證(BASIC認證、DIGEST認證)的認證資訊。另外若之前已經進行過1次請求,則表示使用者認證失敗。 返回含有401的響應必須包含一個適用於被請求資源的WWW-Authenticate首部用以質詢(challenge)使用者資訊。當遊覽器初次接收到401響應,會彈出認證用的對話視窗 ####403 Forbidden
狀態碼告知從伺服器端放回的請求結果
該狀態碼錶明對請求資源的訪問被伺服器拒絕了。伺服器端沒有必要給出拒絕的詳細資訊,但如果想做說明的話,可以在實體的主體部分對原因進行描述,這樣就能讓使用者看到了。 未獲得檔案系統的訪問授權,訪問許可權出現某些問題(從未授權的傳送源IP地址試圖訪問)等列舉的請情況都可能是發生403的原因。 ####404 Not Found
狀態碼告知從伺服器端放回的請求結果
該狀態碼錶明伺服器上無法找到請求的資源。初次之外,也可以在伺服器端拒絕請求並且不想說明理由時候使用 ###5XX 伺服器端錯誤 5XX的響應結果表明伺服器本身發生錯誤 ####500 Internal Server Error
狀態碼告知從伺服器端放回的請求結果
該狀態碼錶明伺服器在執行請求時候發生了錯誤,也有可能是Web應用存在的bug或者某些臨時的故障 ####503 Service Unabailable
狀態碼告知從伺服器端放回的請求結果
該狀態碼錶明伺服器暫時處於超負荷或者正在進行停機維護,現在無法處理請求。如果事先得知接觸以上狀況需要的時間,最好寫入Retry-After首部資源在返回給客戶端

狀態碼和狀況的不一致 不少返回的狀態碼響應都是錯誤的,但是使用者可能察覺不到這點。比如Web應用程式內部發生錯誤,狀態碼亦然返回200 OK,這種情況也經常遇到

相關文章