當服務器收到某項請求時,例如,用戶通過浏覽器訪問你的網頁,服務器會向這個浏覽器返回一個代碼以響應請求。一個代碼就稱為:HTTP狀態碼。
當服務器收到某項請求時,例如,用戶通過浏覽器訪問你的網頁,服務器會向這個浏覽器返回一個代碼以響應請求。一個代碼就稱為:HTTP狀態碼。
同樣道理,當搜索引擎的Robot(機器人)或Crawler(爬行器)抓取你的網頁時,服務器也會返回HTTP狀態碼相應請求。
此HTTP狀態碼提供關於請求狀態的信息,告訴訪問的浏覽器、搜索引擎機器人:Baiduspider、Googlebot等關於你的網站和請求的網頁的信息。
HTTP狀態碼(HTTP Status Code)是用以表示網頁服務器HTTP響應狀態的3位數字代碼。它由 RFC 2616 規范定義的,並得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等規范擴展。
HTTP狀態碼的作用是:Web服務器用來告訴客戶端,發生了什麼事。
狀態碼位於HTTP Response 的第一行中,會返回一個”三位數字的狀態碼“和一個“狀態消息”。 ”三位數字的狀態碼“便於程序進行處理, “狀態消息”更便於人理解。
如下圖, 當客戶端請求一個不存在的URL的時候, Web服務器會返回 “HTTP/1.1 404 Not Found” 告訴用戶/浏覽器客戶端。 服務器無法找到所請求的URL。
HTTP狀態碼分類
HTTP狀態碼被分為五大類, 目前我們使用的HTTP協議版本是1.1, 支持以下的狀態碼。隨著協議的發展,HTTP規范中會定義更多的狀態碼。
小技巧: 假如你看到一個狀態碼518, 你並不知道具體518是什麼意思。 這時候你只要知道518是屬於(5XX,服務器錯誤就可以了)。
常見的狀態碼
一般人只需要了解以下常見的狀態碼就夠了, 如果你想了解更多, 請繼續往下看。
200 OK 服務器成功處理了請求(這個是我們見到最多的)
301/302 Moved Permanently(重定向)請求的URL已移走。Response中應該包含一個Location URL, 說明資源現在所處的位置
304 Not Modified(未修改)客戶的緩存資源是最新的, 要客戶端使用緩存
404 Not Found 未找到資源
501 Internal Server Error服務器遇到一個錯誤,使其無法對請求提供服務
HTTP狀態碼大全
1XX 信息性狀態碼
表示臨時響應並需要請求者繼續執行操作的狀態代碼。這些狀態碼是HTTP 1.1引入的。 對於這些狀態碼的價值還存在爭論 (我個人從來沒見過這些狀態碼, 也沒有理解這些狀態碼。)
HTTP狀態碼 100 Continue(繼續) 請求者應當繼續提出請求。 服務器返回此代碼表示已收到請求的第一部分,正在等待其余部分。
HTTP狀態碼 101 Switching Protocols(切換協議) 請求者已要求服務器切換協議,服務器已確認並准備切換。
2XX 成功狀態碼
表示成功處理了請求的狀態代碼。客戶端發起請求時, 這些請求通常都是成功的。服務器有一組用來表示成功的狀態碼,分別對應於不同類型的請求。
HTTP狀態碼 200 OK(成功) 服務器已成功處理了請求。 通常,這表示服務器提供了請求的網頁。(這個是我們見到最多的)
HTTP狀態碼 201 Created(已創建) 請求成功並且服務器創建了新的資源。
HTTP狀態碼 202 Accepted(已接受) 服務器已接受請求,但尚未處理。
HTTP狀態碼 203 Non-Authoritative Information(非權威信息) 服務器已成功處理了請求,但返回的信息可能來自另一
3XX 重定向狀態碼
表示要完成請求,需要進一步操作。 通常,這些狀態代碼用來重定向。重定向狀態碼用來告訴浏覽器客戶端,它們訪問的資源已被移動, Web服務器發送一個重定向狀態碼和一個可選的Location Header, 告訴客戶端新的資源地址在哪。
浏覽器客戶端會自動用Location中提供的地址,重新發送新的Request。 這個過程對用戶來說是透明的。
301和302 非常相似,一個是永久轉移,一個是臨時轉移。(SEO中,搜索引擎如果碰到301,比如網頁A用301重定向到網頁B,搜索引擎可以肯定網頁A永久性改變地址,就會把網頁B當做唯一有效目標)
302,303,307 是一樣。這是因為302是HTTP 1.0定義的,HTTP1.1中使用303,307,同時又保留了302。(但在現實中,我們還是用302,我是沒見過303和307)所以這一節,我們只需要掌握302, 304 就可以了。
HTTP狀態碼 300 Multiple Choices(多項選擇) 針對請求,服務器可執行多種操作。服務器可根據請求者 (user agent) 選擇一項操作,或提供操作列表供請求者選擇。
HTTP狀態碼 301 Moved Permanently(永久移除) 請求的網頁已永久移動到新位置。Response中應該包含一個Location URL, 說明資源現在所處的位置。服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。
HTTP狀態碼 302 Found(已找到/臨時移動) 與狀態碼301類似。但這裡的移除是臨時的。 客戶端會使用Location中給出的URL,重新發送新的HTTP request。服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。
HTTP狀態碼 303 See Other(查看其他位置) 類似302。請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。
HTTP狀態碼 304 Not Modified(未修改) 自從上次請求後,請求的網頁未修改過。服務器返回此響應時,不會返回網頁內容。客戶的緩存資源是最新的, 要客戶端使用緩存。
HTTP狀態碼 305 Use Proxy(使用代理) 請求者只能使用代理訪問請求的網頁。如果服務器返回此響應,還表示請求者應使用代理。代理的地址在Response 的Location中。
HTTP狀態碼 306 未使用 這個狀態碼當前沒使用。
HTTP狀態碼 307 Temporary Redirect(臨時重定向) 類似302。服務器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。
4XX客戶端錯誤狀態碼
這些狀態代碼表示請求可能出錯,妨礙了服務器的處理。有時客戶端會發送一些服務器無法處理的東西,比如格式錯誤的Request, 或者最常見的是, 請求一個不存在的URL。
HTTP狀態碼 400 Bad Request(錯誤請求) 服務器不理解請求的語法。告訴客戶端,它發送了一個錯誤的請求。
HTTP狀態碼 401 Unauthorized(未授權) 請求要求身份驗證。對於需要登錄的網頁,服務器可能返回此響應。需要客戶端對自己認證
HTTP狀態碼 402 Payment Required(要求付款) 這個狀態還沒被使用,保留給將來用
HTTP狀態碼 403 Forbidden(禁止) 服務器拒絕請求。
HTTP狀態碼 404 Not Found(未找到) 服務器找不到請求的網頁。
HTTP狀態碼 405 Method Not Allowed(方法禁用) 禁用請求中指定的方法。
HTTP狀態碼 406 Not Acceptable(不接受) 無法使用請求的內容特性響應請求的網頁。
HTTP狀態碼 407 Proxy Authentication Required(需要代理授權) 此狀態代碼與 401(未授權)類似,但指定請求者應當授權使用代理。
HTTP狀態碼 408 Request Timeout(請求超時) 服務器等候請求時發生超時。
HTTP狀態碼 409 Conflict(沖突) 服務器在完成請求時發生沖突。 服務器必須在響應中包含有關沖突的信息。
HTTP狀態碼 410 Gone(已刪除) 與狀態碼404類似,如果請求的資源已永久刪除,服務器就會返回此響應。
HTTP狀態碼 411 Length Required(需要有效長度) 服務器不接受不含有效內容長度標頭字段的請求。
HTTP狀態碼 412 Precondition Failed(未滿足前提條件) 服務器未滿足請求者在請求中設置的其中一個前提條件。
HTTP狀態碼 413 Request Entity Too Large(請求實體過大) 服務器無法處理請求,因為請求實體過大,超出服務器的處理能力。
HTTP狀態碼 414 Request URI Too Long(請求的 URI 過長) 請求的 URI(通常為網址)過長,服務器無法處理。
HTTP狀態碼 415 Unsupported Media Type(不支持的媒體類型) 請求的格式不受請求頁面的支持。
HTTP狀態碼 416 Requested Range Not Satisfiable(請求范圍不符合要求) 如果頁面無法提供請求的范圍,則服務器會返回此狀態代碼。
HTTP狀態碼 417 Expectation Failed(未滿足期望值) 服務器未滿足”期望”請求標頭字段的要求。
5XX服務器錯誤狀態碼
這些狀態代碼表示服務器在嘗試處理請求時發生內部錯誤。這些錯誤可能是服務器本身的錯誤,而不是請求出錯。
HTTP狀態碼 500 Internal Server Error(服務器內部錯誤) 服務器遇到錯誤,無法完成請求。
HTTP狀態碼 501 Not Implemented(尚未實施) 服務器不具備完成請求的功能。 例如,服務器無法識別請求方法時可能會返回此代碼。
HTTP狀態碼 502 Bad Gateway(錯誤網關) 服務器作為網關或代理,從上游服務器收到無效響應。
HTTP狀態碼 503 Service Unavailable(服務不可用) 服務器目前無法使用(由於超載或停機維護)。 通常,這只是暫時狀態。
HTTP狀態碼 504 Gateway Timeout(網關超時) 與狀態嗎408類似,但是響應來自網關或代理,此網關或代理在等待另一台服務器的響應時出現了超時。
HTTP狀態碼 505 HTTP Version Not Supported(HTTP 版本不受支持) 服務器不支持請求中所用的 HTTP 協議版本。有些服務器不支持HTTP早期的HTTP協議版本,也不支持太高的協議版本。