HTTP返回碼中200,302,304,404,500得意思


狀態碼的職責是當客戶端向服務器端發送請求時,描述返回請求結果。借助狀態碼,用戶可以知道服務器端是正常處理了請求,還是出現了什么錯誤。

  • 2開頭的,響應成功,客戶端請求服務器正常響應處理了。
  • 3開頭的,響應成功,重定向了,服務器資源移動了。
  • 4開頭的,響應失敗,客戶端原因,比如請求格式不正確,或者請求的內容服務器拒絕響應。
  • 5開頭的,響應失敗,服務器原因,比如服務器處理能力不足,或者內部出現bug錯誤。

RFC2616定義的狀態碼,由3位數字和原因短信組成。

數字中的第一位指定了響應類別,后兩位無分類。響應類別有以下5種:

類型觸發動作說明1XXInformational信息性狀態碼,表示接受的請求正在處理2XXSuccess成功狀態碼,表示請求正常處理完畢3XXRedirection重定向狀態碼,表示需要客戶端需要進行附加操作4XXClient Error客戶端錯誤狀態碼,表示服務器無法處理請求5XXServer Error服務器錯誤狀態碼,表示服務器處理請求出錯

RFC2616記錄的HTTP狀態碼有37種,再加上「WebDAV」(RFC4918、5842)和「Additional HTTP Status Codes」(RFC6585),數量就達到60多種。

然並卵,這么多種HTTP狀態碼,其實常用的大概只有14種,本文就講講這14種狀態碼。

2XX Success

2xx 響應結果表示從客戶端發來的請求在服務器端被正常處理了。

200 OK

請求被成功處理,服務器會根據不同的請求方法返回結果:

GET:請求的對應資源會作為響應返回。HEAD:請求的對應資源的響應頭(entity-header)會作為響應返回,不包括響應體(message-body)。POST:返回處理對應請求的結果。

204 No Content

該狀態碼表示服務器接收到的請求已經處理完畢,但是服務器不需要返回響應體.

比如,客戶端是瀏覽器的話,發出的請求返回204響應,那么瀏覽器顯示的頁面不會發生更新。

206 Partial Content

該狀態碼表示客戶端進行了范圍請求,而服務器成功執行了這部分的GET請求。

客戶端發起的請求,必須在請求頭中包含Range字段。服務端響應報文中,必須包含由Content-Range指定范圍的實體內容(entity-bodies )

3XX Redirection

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

301 Movied Permanently

永久性重定向。該狀態碼表示請求的資源已經被分配了新的URI,並且以后使用資源現在所指的URI。並且根據請求的方法有不同的處理方式:

HEAD:必須在響應頭部Location字段中指明新的永久性的URI。GET:除了有Location字段以外,還需要在響應體中附上永久性URI的超鏈接文本。POST:客戶端在發送POST請求,受到301響應之后,不應該自動跳轉URI,應當讓用戶確認跳轉。

比如,如果一個URI已經在瀏覽器中被收藏為書簽,這時應該按照Location首部字段提示的URI重新保存。

例如建立一個收藏的書簽:

http://wan.bigertech.com

當訪問這個書簽的時候,請求會被重定向到

http://wan.meizu.com

並且對應的書簽會被改變,指向http://wan.meizu.com

不信?Try yourself.

302 Found

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

和301 Moved Permanently 狀態碼相似,但302狀態碼代表的資源不是被永久移動,只是臨時性質的。

如果,用戶把一個URI收藏為書簽,302響應是不會像301那樣去更新書簽。

303 See Other

該狀態碼表示由於請求對應的資源存在另一個URI,應使用GET方法定向獲取請求的資源。303與302不同之處在於,302是不會改變請求的方法,如果請求方法是POST的話,重定向的請求也應該是POST。而對於303,使用POST請求的話,重定向的請求應該是GET請求。

但是有一點是需要注意的,許多HTTP/1.1版以前的瀏覽器不能正確理解303狀態碼,很多現存的瀏覽器講302響應視為303響應,並且使用GET方式訪問Location中規定的的URI,而無視原先請求的方法。

304 Not Modified

該狀態碼表示客戶端發送附帶條件請求時,服務器端允許請求訪問資源,但未滿足條件的情況。304狀態碼返回時,不包含任何響應的主題部分。附帶條件的請求指的是采用GET方法的請求頭中包含:If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部。

307 Temporary Redirect

臨時重定向。該狀態碼與302和303的有着類似的含義,不同之處在於,307狀態碼並不會指定客戶端要用什么樣的請求方法請求重定向地址。(302指定使用原有請求方法,303指定使用GET方法)

4XX Client Error

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

400 Bad Request

表示該請求報文中存在語法錯誤,導致服務器無法理解該請求。客戶端需要修改請求的內容后再次發送請求。

401 Unauthorized

該狀態碼表示發送的請求需要有通過HTTP認證(Basic認證,Digest認證)的認證信息。返回含有401的響應,必須在頭部包含WWW-Authenticate以指明服務器需要哪種方式的認證。

當客戶端再次請求該資源的時候,需要在請求頭中的Authorization包含認證信息。

更多關於認證授權的信息關注RFC2617

403 Forbidden

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

未獲得文件系統的訪問權限,訪問權限出現某些問題,從未授權的發送源IP地址試圖訪問等情況都可能發生403響應。

404 Not Found

該狀態碼表明服務器上無法找到指定的資源。通常被用於服務器不想透露拒絕請求的原因,或者沒有其他的響應可提供。

5XX Server Error

5XX 的響應結果表明服務器本身發生錯誤,或者沒有足夠的能力來處理請求。

500 Internal Server Error

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

503 Service Unavailable

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM