1.100-199信息響應
100 Continue: 服務器通知瀏覽器之前一切正常,請客戶端繼續請求,如果請求結束,可忽略;
101 Switching Protocal: 針對請求頭的Upgrade返回的信息。表明服務器正在切換到指定的協議。
Upgrade是HTTP1.1提出的升級機制,可以升級到其他協議。
如果使用,客戶端需要設置如下:
Connection: Upgrade
Upgrade: protocol-name[/protocol-version]
服務器如果不同意直接忽略;如果同意,響應如下:
HTTP/1.1 101 Switching Protocols
Connection: upgrade
Upgrade: protocol-name[/protocol-version]
例如:1)升級WebSocket
客戶端請求如下:
GET ws://example.com/ HTTP/1.1 Connection: Upgrade Upgrade: websocket Origin: http://example.com Sec-WebSocket-Version: 13 Sec-WebSocket-Key: d4egt7snxxxxxx2WcaMQlA== Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
服務器如果同意,響應如下:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: gczJQPmQ4Ixxxxxx6pZO8U7UbZs=
2)升級到http2
客戶端請求如下:
GET / HTTP/1.1 Host: example.com Connection: Upgrade, HTTP2-Settings Upgrade: h2c // h2c是http2的名稱 HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload>
服務端如果同意,響應如下:
HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: h2c
103 Early Hints: 此狀態代碼主要用於與Link
鏈接頭一起使用,以允許用戶代理在服務器仍在准備響應時開始預加載資源
2.200-299成功響應
200 OK: 請求成功
201 Created: 常用於POST,PUT 請求,表明請求已經成功,並新建了一個資源。並在響應體中返回路徑。
202 Accepted: 請求已經接收到,但沒有響應,稍后也不會返回一個異步請求結果。 該狀態碼適用於等待其他進程處理或者批處理的場景。
203 No-Authoritative Information: 表明響應返回的元信息(meta-infomation)和最初的服務器不同,而是從本地或者第三方獲取的。
主要用於其他資源的鏡像和備份。除了前面的情況,首選還是200。
204 No Content: 請求沒有數據返回,但是頭信息有用。用戶代理(瀏覽器)會更新緩存的頭信息。
205 Reset Content: 告訴用戶代理(瀏覽器)重置發送該請求的文檔。
206 Partical Content: 當客戶端使用Range請求頭時,返回該狀態碼。
// 通過curl發起http請求-->響應行為:HTTP/1.1 206 Partial Content curl -v --header "Range:bytes=0-3" http://www.baidu.com
名次解釋: 用戶代理: 代替用戶運行的軟件,如web瀏覽器,或者郵件閱讀器。
3.300-399重定向消息
300 Multiple Choice: 返回多個響應,需要瀏覽器或者用戶選擇;
301 Moved Permanently: 請求資源的URL被永久的改變,新的URL會在響應的Location中給出。
瀏覽器到新的URL重新請求資源,因為有些客戶端會把請求方式method改成GET。所以該狀態碼建議GET和HEAD方法中使用。
搜索引擎會更新地址到資源的鏈接(SEO中‘link-judge’被發送到新的URL)。
302 Found: 請求資源的URL被暫時修改到Location提供的URL。未來可能還會有新的修改。
瀏覽器會根據新的URL重新請求資源。有些客戶端會把方法method改為GET,建議在GET和HEAD方法中使用。
搜索引擎不會更改URL到資源的。
// 應用 負載均衡
303 See Other: 服務通過返回的響應數據指導客戶端通過GET方法去另一個URL獲取資源。
通常用於POST或者PUT的請求返回結果,重定向到信息提示頁面或者進度展示頁面。
重定向頁面的方法是GET方法。
304 Not Modified: 資源未變更。服務器根據請求頭判斷,需要資源未修改,只返回響應頭;否則將資源一起返回。
發生場景:1)請求方法安全(如GET,HEAD請求)
2)條件請求並且使用了If-None-Match或者If-Modified-Since 的請求頭
如果想使用200狀態碼達到相同304效果,需要強制緩存,需要額外的請求頭:Cache-Control, Expires, Vary
307 Temporary Redirect: 臨時重定向。基本和302相同。
唯一的區別是這個狀態碼嚴格禁止瀏覽器到新URL請求資源時修改原來的請求方式和請求體。
就是說原來使用POST,這次還是要使用POST。
如果想要用PUT方法去修改一個服務器上沒有的資源,可以用303狀態碼
如果想要把一個POST方法改為GET,請使用303。
308 Permanent Redirect: 永久重定向。基本和301相同。但是嚴格禁止修改請求方式和請求體。
4. 400-499 客戶端錯誤響應
400 Bad Request: 請求語法有問題,服務器無法識別。
沒有host請求頭字段,或者設置了超過一個的host請求頭字段。
401 UnAuthorized: 客戶端未授權該請求。缺乏有效的身份認證憑證,一般可能是未登陸。登陸后一般都解決問題。
403 Forbidden: 服務器拒絕響應。權限不足。
404 Not Found: URL無效或者URL有效但是沒有資源。
405 Method Not Allowed: 請求方式Method不允許。但是GET和HEAD屬於強制方式,不能返回這個狀態碼。
406 Not Acceptable: 資源類型不符合服務器要求。
407 Proxy Authorization Required: 需要代理授權。
408 Request Timeout:服務器將不再使用的連接關閉。響應頭會有Connection: close。
426 Upgrade Required: 告訴客戶端需要升級通信協議。
5. 500-599 服務器錯誤響應
500 Internal Server Error: 服務器內部錯誤,未捕獲。
502 Bad Gateway: 服務器作為網關使用時,收到上游服務器返回的無效響應。
503 Service Unavailable: 無法服務。一般發生在因維護而停機或者服務過載。
一般還會伴隨着返回一個響應頭Retry-After: 說明恢復服務的估計時間。
504 Gateway Timeout: 網關超時。服務器作為網關或者代理,不能及時從上游服務器獲取響應返回給客戶端。
505 Http Version Not Supported: 發出的請求http版本服務器不支持。如果請求通過http2發送,服務器不支持http2.0,就會返回該狀態碼。