什么是狀態碼?
狀態碼的作用是:服務器告訴客戶端,發生了什么事。
在http協議中狀態碼出現在http response 的第一行。它會返回一個三位數的狀態碼和狀態信息。狀態碼為了便於程序進行處理,而狀態信息是為了讓用戶能清楚的明白意思。
狀態碼分類
HTTP狀態碼被分為五大類, 目前我們使用的HTTP協議版本是1.1, 支持以下的狀態碼。隨着協議的發展,HTTP規范中會定義更多的狀態碼。
小技巧: 假如你看到一個狀態碼503, 你並不知道具體503是什么意思。 這時候你只要知道503是屬於(5XX,服務器錯誤就可以了)
通常一些常見的狀態碼是這樣分的:
1 xx : 表示信息提示
2xx : 表示成功
3xx :重定向
4xx :客戶端出現錯誤
5xx :服務器出現錯誤
以下是一些常見狀態碼具體的意義:
200 ok 服務器成功處理了請求。
301和302 moved permanently (重定向)請求資源的URL已經被移走,在response中會攜帶一個location URL,告訴你現在這個資源所在的路徑。
304 Not modified(未修改)指的是客戶端所用的資源是嶄新的,要求客戶端使用緩存。
404 Not find沒有找到請求的資源。
500 Internal server error 服務器遇到一個錯誤,使其無法處理請求。
更多的狀態碼如下:
1XX 信息性狀態碼
100 continue 繼續 收到請求的起始部分,客戶端應該繼續請求。
101 switching protocols :協議切換 。服務器根據客戶端的指示將協議切換成header所列出的協議。
2xx 成功性狀態碼
200 ok 服務器成功處理了請求。
201 created 那些需要服務來創建對象的請求來說,資源已經創建完畢。
202 Accepted 請求已接受,但服務器還沒處理。
203 Non--Authoritive information (非權威信息) 請求已經處理成功,但header中的信息不是來源於原服務器,而是來自資源的副本。
204 NO content (沒有內容)Response中包含一些Header和一個狀態行, 但不包括實體的主題內容(沒有response body)
205 reset content (重置內容)一個主要用於瀏覽器的代碼。意思是瀏覽器應該重置當前頁面上所有的HTML表單。
206 part content(部分內容)部分請求成功
3xx 重定向性狀態碼
重定向狀態碼用來告訴瀏覽器客戶端,它們訪問的資源已被移動, Web服務器發送一個重定向狀態碼和一個可選的Location Header, 告訴客戶端新的資源地址在哪。
瀏覽器客戶端會自動用Location中提供的地址,重新發送新的Request。 這個過程對用戶來說是透明的。
301和302 非常相似, 一個是永久轉移,一個是臨時轉移。
302,303,307 是一樣。 這是因為302是HTTP 1.0定義的, HTTP1.1中使用303,307.
300 | Multiple Choices(多項選擇) | 客戶端請求了實際指向多個資源的URL。這個代碼是和一個選項列表一起返回的,然后用戶就可以選擇他希望的選項了 | |
301 | Moved Permanently(永久移除) | 請求的URL已移走。Response中應該包含一個Location URL, 說明資源現在所處的位置 | 狀態碼301 |
302 | Found(已找到) | 與狀態碼301類似。但這里的移除是臨時的。 客戶端會使用Location中給出的URL,重新發送新的HTTP request | HTTP協議詳解-302 |
303 | See Other(參見其他) | 類似302 | |
304 | Not Modified(未修改) | 客戶的緩存資源是最新的, 要客戶端使用緩存 | HTTP協議之緩存-304 |
305 | Use Proxy(使用代理) | 必須通過代理訪問資源, 代理的地址在Response 的Location中 | |
306 | 未使用 | 這個狀態碼當前沒使用 | |
307 | Temporary Redirect(臨時重定向 | 類似302 |
有時客戶端會發送一些服務器無法處理的東西,比如格式錯誤的Request, 或者最常見的是, 請求一個不存在的URL。
狀態碼 | 狀態消息 | 含義 | 實例 |
400 | Bad Request(壞請求) | 告訴客戶端,它發送了一個錯誤的請求。 | 狀態碼400 |
401 | Unauthorized(未授權) | 需要客戶端對自己認證 | HTTP協議之基本認證-401 |
402 | Payment Required(要求付款) | 這個狀態還沒被使用, 保留給將來用 | |
403 | Forbidden(禁止) | 請求被服務器拒絕了 | 狀態碼403 |
404 | Not Found(未找到) | 未找到資源 | HTTP協議詳解-404 |
405 | Method Not Allowed(不允許使用的方法) | 不支持該Request的方法。 | 狀態碼405 |
406 | Not Acceptable(無法接受) | ||
407 | Proxy Authentication Required(要求進行代理認證) | 與狀態碼401類似, 用於需要進行認證的代理服務器 | HTTP協議之代理-407 |
408 | Request Timeout(請求超時) | 如果客戶端完成請求時花費的時間太長, 服務器可以回送這個狀態碼並關閉連接 | |
409 | Conflict(沖突) | 發出的請求在資源上造成了一些沖突 | |
410 | Gone(消失了) | 服務器曾經有這個資源,現在沒有了, 與狀態碼404類似 | |
411 | Length Required(要求長度指示) | 服務器要求在Request中包含Content-Length。 | 狀態碼411 |
412 | Precondition Failed(先決條件失敗) | ||
413 | Request Entity Too Large(請求實體太大) | 客戶端發送的實體主體部分比服務器能夠或者希望處理的要大 | 狀態碼413 |
414 | Request URI Too Long(請求URI太長) | 客戶端發送的請求所攜帶的URL超過了服務器能夠或者希望處理的長度 | 狀態碼414 |
415 | Unsupported Media Type(不支持的媒體類型) | 服務器無法理解或不支持客戶端所發送的實體的內容類型 | |
416 | Requested Range Not Satisfiable(所請求的范圍未得到滿足) | ||
417 | Expectation Failed(無法滿足期望) |
有時候客戶端發送了一條有效Request, Web服務器自身卻出錯了。 可能是Web服務器運行出錯了, 或者網站都掛了。 5XX就是用來描述服務器錯誤的。
狀態碼 | 狀態消息 | 含義 | 實例 |
500 | Internal Server Error(內部服務器錯誤) | 服務器遇到一個錯誤,使其無法為請求提供服務 | 狀態碼500 |
501 | Not Implemented(未實現) | 客戶端發起的請求超出服務器的能力范圍(比如,使用了服務器不支持的請求方法)時,使用此狀態碼。 | 狀態碼501 |
502 | Bad Gateway(網關故障) | 代理使用的服務器遇到了上游的無效響應 | 狀態碼502 |
503 | Service Unavailable(未提供此服務) | 服務器目前無法為請求提供服務,但過一段時間就可以恢復服務 | |
504 | Gateway Timeout(網關超時) | 與狀態嗎408類似, 但是響應來自網關或代理,此網關或代理在等待另一台服務器的響應時出現了超時 | |
505 | HTTP Version Not Supported(不支持的HTTP版本) | 服務器收到的請求使用了它不支持的HTTP協議版本。 有些服務器不支持HTTP早期的HTTP協議版本,也不支持太高的協議版本 | 狀態碼505 |