HTTP 常見狀態碼解析

概述

  • 1xx:指示信息--表示請求已接收,繼續處理html

  • 2xx:成功--表示請求已被成功接收、理解、接受web

  • 3xx:重定向--要完成請求必須進行更進一步的操做瀏覽器

  • 4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現緩存

  • 5xx:服務器端錯誤--服務器未能實現合法的請求服務器

常見HTTP狀態碼

  • 200 OK 表示請求成功 一切正常併發

  • 301 Moved Permanently 重定向,客戶請求的文檔在其餘地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URLpost

  • 302 Found 臨時重定向,相似於301,但新的URL應該被視爲臨時性的替代,而不是永久性的。搜索引擎

  • 304 Not Modified 客戶端有緩衝的文檔併發出了一個條件性的請求。服務器告訴客戶,原來緩衝的文檔還能夠繼續使用。spa

  • 307 Temporary Redirect 臨時重定向,與302相似,只是強制要求使用POST方法。.net

  • 400 Bad Request 請求出現語法錯誤。

  • 401 Unauthorized 客戶試圖未經受權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據此顯示用戶名字/密碼對話框,而後在填 寫合適的Authorization頭後再次發出請求。

  • 403 Forbidden 資源不可用。服務器理解客戶的請求,但拒絕處理它。一般因爲服務器上文件或目錄的權限設置致使

  • 404 Not Found 沒法找到指定位置的資源。

  • 405 Method Not Allowed 請求方法(GET、POST、HEAD、Delete、PUT、TRACE等)對指定的資源不適用。

  • 500 Internal Server Error 服務器遇到了意料不到的狀況,不能完成客戶的請求。

  • 501 Not Implemented 服務器不支持實現請求所須要的功能。

  • 502 Bad Gateway 服務器做爲網關或者代理時,爲了完成請求訪問下一個服務器,但該服務器返回了非法的應答。

3xx 狀態碼詳解

301 狀態碼(Moved Permanently) 301狀態碼在HTTP1.0和HTTP1.1規範中均表明永久重定向,對於post請求的重定向,仍是須要用戶確認以後才能重定向,而且應該以post方法發出重定向請求。 關於post請求重定向用戶確認的問題,實際上瀏覽器都沒有實現;並且post請求的重定向應該發起post請求,這裏瀏覽器也並不必定遵照,因此說HTTP規範的實現並未嚴格按照HTTP規範的語義。

302 狀態碼(Moved Temporatily) 在http 1.0規範中,302表示臨時重定向。出現該狀態代碼時,瀏覽器可以自動訪問新的URL。 規範:原請求是get,能夠自動重定向;原請求是post,則不能自動進行重定向。 實現:瀏覽器和服務器的實現並無嚴格遵照HTTP中302的規範,瀏覽器即使原請求是post也會自動重定向,致使規範和實現出現了二義性,由此衍生了一些問題,譬如302劫持,所以在HTTP 1.1中將302的規範細化成了303和307,但願以此來消除二義性。

補充:302劫持——A站經過重定向到B站的資源xxoo,A站實際上什麼都沒作可是有一個比較友好的域名,web資源xxoo存在B站並由B站提供,可是B站的域名不那麼友好,所以對搜索引擎而言,可能會保存A站的地址對應xxoo資源而不是B站,這就意味着B站出了資源版權、帶寬、服務器的錢,可是用戶經過搜索引擎搜索xxoo資源的時候出來的是A站,A站什麼都沒作卻被索搜引擎廣而告之用戶,B站作了一切卻不被用戶知道,價值被A站竊取了。

303 狀態碼(See Other) 繼承了HTTP 1.0中302的實現:不管原請求是get仍是post,均可以自動進行重定向 303響應應該禁止被緩存。重定向的相應可能被緩存。

307 狀態碼 繼承了HTTP 1.0中302的規範:原請求是GET 或 HEAD,則瀏覽器能夠自動重定向;原請求是 POST,則不能自動進行重定向。

30二、30三、307 狀態碼辨析 在HTTP 1.1中,302是再也不推薦使用的,只是爲了兼容而做保留。爲了細化HTTP1.0中302的語義,HTTP1.1引入了 303 和 307,主要用在對非 GET、HEAD 方法的響應上,而對於 GET 和 HEAD 的請求,能夠自動重定向。

在 GET、HEAD 這些冪等的請求方式上,30二、30三、307 沒啥區別,而對於 POST 就不一樣了,大部分瀏覽器的302 會將 POST 請求轉爲 GET,而 303 規範強制將 POST 轉爲 GET 請求,請求地址爲 header 頭中的 Location,307 則不同,規範要求瀏覽器繼續向 Location 的地址 POST 內容。

:memo: 303 和 307 的存在,歸根結底是因爲 POST 方法的非冪等屬性引發的。

參考

HTTP狀態碼 HTTP狀態碼 HTTP狀態碼詳解 http重定向301/302/303/307

img

相關文章
相關標籤/搜索