HTTP超文本傳輸協議
HTTP 是基於客戶端/服務端(C/S)的架構模型,通過一個可靠的鏈接來交換信息,是一個無狀態的請求/響應協議。
一個HTTP "客戶端"是一個應用程序(Web瀏覽器或其他任何客戶端),通過連接到服務器達到向服務器發送一個或多個HTTP的請求的目的。
一個HTTP "服務器"同樣也是一個應用程序(通常是一個Web服務,如Apache Web服務器或IIS服務器等),通過接收客戶端的請求並向客戶端發送HTTP響應數據。
HTTP 使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。
HTTP 請求到服務器的請求消息包括以下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成。
HTTP1.0 定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP請求方式
GET
請求指定的頁面信息,並返回實體主體。
HEAD
類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
POST
向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
PUT
從客戶端向服務器傳送的數據取代指定的文檔的內容。
DELETE
請求服務器刪除指定的頁面。
CONNECT
HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。
OPTIONS
允許客戶端查看服務器的性能。
TRAC
E 回顯服務器收到的請求,主要用於測試或診斷。
HTTP返回狀態碼
1xx
處理信息,服務器收到請求,需要請求者繼續執行操作;
2xx
請求成功,操作被成功接收並處理;
3xx
重定向,需要進一步的操作以完成請求;
4xx
客戶端錯誤,請求包含語法錯誤或無法完成請求;
5xx
服務器錯誤,服務器在處理請求的過程中發生了錯誤;
HTTP返回狀態碼註解
1xx - 信息提示
這些狀態代碼表示臨時的響應。客戶端在收到常規響應之前,應準備接收一個或多個 1xx 響應。
100
- Continue 繼續;
初始的請求已經接受,客戶應當繼續發送請求的其餘部分。(HTTP 1.1新)
101
- Switching Protocols 切換協議;
服務器將遵從客戶的請求轉換到另外一種協議(HTTP 1.1新)
2xx - 成功
這類狀態代碼表明服務器成功地接受了客戶端請求。
200
- OK 正常;
對GET和POST請求的應答文檔跟在後面。
201
- Created 已創建;
服務器已經創建了文檔,Location頭給出了它的URL。
202
- Accepted 接受;
已經接受請求,但處理尚未完成。
203
- Non-Authoritative Information 非權威的信息;
文檔已經正常地返回,但一些應答頭可能不正確,因爲使用的是文檔的拷貝,非權威性信息(HTTP 1.1新)。
204
- No Content 沒有內容;
瀏覽器應該繼續顯示原來的文檔。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新,這個狀態代碼是很有用的。
205
- Reset Content 重置內容;
但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容(HTTP 1.1新)。
206
- Partial Content 部分內容;
客戶發送了一個帶有Range頭的GET請求,服務器完成了它(HTTP 1.1新)。
207
- 多狀態
緊跟消息體後面的是xml消息並且包含了多個單獨的響應狀態碼,響應的數量取決於子請求的個數。
208
- 已經報告
一個DAV的綁定成員被前一個請求枚舉,並且沒有被再一次包括。
226
- IM Used
服務器已經滿足了請求所要的資源,並且響應是一個或者多個實例操作應用於當前實例的結果
3xx - 重定向
客戶端瀏覽器必須採取更多操作來實現請求。
例如,瀏覽器可能不得不請求服務器上的不同的頁面,或通過代理服務器重複該請求。
300
- Multiple Choices 多重選擇;
客戶請求的文檔可以在多個位置找到,這些位置已經在返回的文檔內列出。如果服務器要提出優先選擇,則應該在Location應答頭指明。
301
- Moved Permanently 永久移動;
客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
302
- Found 發現;
但新的URL應該被視爲臨時性的替代,而不是永久性的。注意,在HTTP1.0中對應的狀態信息是“Moved Temporatily”。出現該狀態代碼時,瀏覽器能夠自動訪問新的URL,因此它是一個很有用的狀態代碼。注意這個狀態代碼有時候可以和301替換使用。例如,如果瀏覽器錯誤地請求 http://host/~user (缺少了後面的斜槓),有的服務器返回301,有的則返回302。嚴格地說,我們只能假定只有當原來的請求是GET時瀏覽器纔會自動重定向。請參見 307。
303
- See Other 查看其它;
類似於301/302,不同之處在於,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提取(HTTP類似於301/302,不同之處在於,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提取(HTTP 1.1新)。
304
- Not Modified 未修改;
客戶端有緩衝的文檔併發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩衝的文檔還可以繼續使用。
305
- Use Proxy 使用代理;
客戶請求的文檔應該通過Location頭所指明的代理服務器提取(HTTP 1.1新)。
306
- 切換代理;
不再使用。原意是隨後的請求應該使用指定的代理。
307
- Temporary Redirect 臨時跳轉;
許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是POST,即使它實際上只能在POST請求的應答是303時才能重定向。由於這個原因,HTTP許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是POST,即使它實際上只能在POST請求的應答是303時才能重定向。由於這個原因,HTTP 1.1新增了307,以便更加清除地區分幾個狀態代碼:當出現303應答時,瀏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則瀏覽器只能跟隨對GET請求的重定向。(HTTP 1.1新)
308
- 永久轉移
這個請求和以後的請求都應該被另一個URI地址重新發送。307、308和302、301有相同的表現,但是不允許HTTP方法改變。例如,請求表單到一個永久轉移的資源將會繼續順利地執行。
4xx - 客戶端錯誤
發生錯誤,客戶端似乎有問題。
例如,客戶端請求不存在的頁面,客戶端未提供有效的身份驗證信息。
400
- Bad Request 錯誤請求;
請求出現語法錯誤。
401
- Unauthorized 未授權;
訪問被拒絕,客戶試圖未經授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據此顯示用戶名字/密碼對話框,然後在填寫合適的Authorization頭後再次發出請求。IIS 定義了許多不同的 401 錯誤,它們指明更爲具體的錯誤原因。這些具體的錯誤代碼在瀏覽器中顯示,但不在 IIS 日誌中顯示:
401.1
- 登錄失敗。
401.2
- 服務器配置導致登錄失敗。
401.3
- 由於 ACL 對資源的限制而未獲得授權。
401.4
- 篩選器授權失敗。
401.5
- ISAPI/CGI 應用程序授權失敗。
401.7
– 訪問被 Web 服務器上的 URL 授權策略拒絕。這個錯誤代碼爲 IIS 6.0 所專用。
402
- 需要付款
爲以後保留使用。原意是該狀態碼可被用於一些數字貨幣或者是微支付,但是目前還沒有普及,所以這些代碼不經常被使用。YouYube使用這個狀態如果某個IP地址發出了過多的請求,並要求用戶輸入驗證碼。
403
- Forbidden 禁止訪問;
資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由於服務器上文件或目錄的權限設置導致。禁止訪問:IIS資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由於服務器上文件或目錄的權限設置導致。禁止訪問:IIS 定義了許多不同的 403 錯誤,它們指明更爲具體的錯誤原因:
403.1
- 執行訪問被禁止。
403.2
- 讀訪問被禁止。
403.3
- 寫訪問被禁止。
403.4
- 要求 SSL。
403.5
- 要求 SSL 128。
403.6
- IP 地址被拒絕。
403.7
- 要求客戶端證書。
403.8
- 站點訪問被拒絕。
403.9
- 用戶數過多。
403.10
- 配置無效。
403.11
- 密碼更改。
403.12
- 拒絕訪問映射表。
403.13
- 客戶端證書被吊銷。
403.14
- 拒絕目錄列表。
403.15
- 超出客戶端訪問許可。
403.16
- 客戶端證書不受信任或無效。
403.17
- 客戶端證書已過期或尚未生效。
403.18
- 在當前的應用程序池中不能執行所請求的 URL。
這個錯誤代碼爲 IIS 6.0 所專用。
403.19
- 不能爲這個應用程序池中的客戶端執行 CGI。
這個錯誤代碼爲 IIS 6.0 所專用。
403.20
- Passport 登錄失敗。
這個錯誤代碼爲 IIS 6.0 所專用。
404
- Not Found 找不到;
無法找到指定位置的資源。這也是一個常用的應答。
404.0
-(無) – 沒有找到文件或目錄。
404.1
- 無法在所請求的端口上訪問 Web 站點。
404.2
- Web 服務擴展鎖定策略阻止本請求。
404.3
- MIME 映射策略阻止本請求。
405
- Method Not Allowed 方法不允許;
請求方法(GET、POST、HEAD、Delete、PUT、TRACE等)對指定的資源不適用,用來訪問本頁面的 HTTP 謂詞不被允許(方法不被允許)(HTTP 1.1新)
406
- Not Acceptable 不可接受;
指定的資源已經找到,但它的MIME類型和客戶在Accpet頭中所指定的不兼容,客戶端瀏覽器不接受所請求頁面的 MIME 類型(HTTP 1.1新)。
407
- Proxy Authentication Required 需要代理認證;
要求進行代理身份驗證,類似於401,表示客戶必須先經過代理服務器的授權。(HTTP 1.1新)
408
- Request Timeout 請求超時;
在服務器許可的等待時間內,客戶一直沒有發出任何請求。客戶可以在以後重複同一請求。(HTTP在服務器許可的等待時間內,客戶一直沒有發出任何請求。客戶可以在以後重複同一請求。(HTTP 1.1新)
409
- Conflict 衝突;
通常和PUT請求有關。由於請求和資源的當前狀態相沖突,因此請求不能成功。(HTTP 1.1新)
410
- Gone 遺失的;
所請求的文檔已經不再可用,而且服務器不知道應該重定向到哪一個地址。它和404的不同在於,返回407表示文檔永久地離開了指定的位置,而404表示由於未知的原因文檔不可用。(HTTP所請求的文檔已經不再可用,而且服務器不知道應該重定向到哪一個地址。它和404的不同在於,返回407表示文檔永久地離開了指定的位置,而404表示由於未知的原因文檔不可用。(HTTP 1.1新)
411
- Length Required 長度要求;
服務器不能處理請求,除非客戶發送一個Content-Length頭。(HTTP服務器不能處理請求,除非客戶發送一個Content-Length頭。(HTTP 1.1新)
412
- Precondition Failed 前置條件失敗;
請求頭中指定的一些前提條件失敗(HTTP請求頭中指定的一些前提條件失敗(HTTP 1.1新)。
413
- Request Entity Too Large 響應實體太大;
目標文檔的大小超過服務器當前願意處理的大小。如果服務器認爲自己能夠稍後再處理該請求,則應該提供一個Retry-After頭(HTTP 1.1新)。
414
- Request URI Too Long 請求URI太長;
被提供的URI對服務器的處理來說太長。經常出現在太多被編碼的數據被作爲查詢字符串的GET請求的結果,因此需要被轉換爲POST請求。(HTTP 1.1新)。
415
- 不支持的媒體類型。
請求實體的媒體類型不被服務器或者資源支持。例如,客戶端上傳一個image/svg+xml的圖片,但是服務器需要圖片使用不同的格式
416
- Requested Range Not Satisfiable 請求範圍不能滿足;
服務器不能滿足客戶在請求中指定的Range頭。(HTTP 1.1新)
417
- 執行失敗。
服務器期望請求頭字段的要求。
418
- 我是一個茶壺;
這個代碼是在1998年作爲傳統的IETF April Fools‘ jokes被定義的在RFC2324,超文本咖啡罐控制協議,但是並沒有被實際的HTTP服務器實現。RFC指定了這個代碼應該是由茶罐返回給速溶咖啡。
419
- 認證超時;
並不是HTTP標註的一部分,419認證超時表示以前的有效證明已經失效了。同時也被用於401未認證的替代選擇爲了從其它被拒絕訪問的已認證客戶端中指定服務器的資源。
420
- 方法失效;
不是HTTP的標準,但是被Spring定義在HTTP狀態類中當方法失時使用。這個狀態碼已經不推薦在Spring中使用。
421
- 誤導請求;
請求被直接定向到不能產生響應的服務器上(例如因爲一個連接的複用)。
422
- 不可處理的實體(WebDAV)
請求符合要求但是不能接受錯誤由於語法錯誤。
423
- 鎖定的
資源訪問被鎖定。
424
- 失敗的依賴
請求由於上一個請求的失敗而失敗。
426
- 需要升級
客戶端應該切換不同的協議例如TLS/1.0在指定的升級的頭字段裏。
428
- 需要前置條件
原始服務器需要有條件的請求。當客戶端GET一個資源的狀態的時候,同時又PUT回給服務器,與此同時第三方修改狀態到服務器上的時候,爲了避免丟失更新的問題發生將會導致衝突。
429
- 過多請求
用戶已經發送了太多的請求在指定的時間裏。用於限制速率。
431
- 請求頭部字段太大
服務器由於一個單獨的請求頭部字段或者是全部的字段太大而不願意處理請求。
440
- 登陸超時(微軟)
一個微軟的擴展,意味着你的會話已經超時。
444
- 無響應
被使用在Nginx的日誌中表明服務器沒有返回信息給客戶端並且關閉了連接(在威懾惡意軟件的時候比較有用)。
449
- 重試(微軟)
一個微軟的擴展。請求應該在執行適當的動作之後被重試。
450
- 被Windows家長控制阻塞(微軟)
一個微軟的擴展。這個錯誤是當Windows家長控制打開並且阻塞指定網頁的訪問的時候被指定。
451
- 由於法律原因而無效(因特網草稿)
被定義在因特網草稿“一個新的HTTP狀態碼用於法律限制的資源”。被用於當資源的訪問由於法律原因被禁止的時候。例如檢查制度或者是政府強制要求禁止訪問。一個例子是1953年dystopian的小說Fahrenheit 451就是一個非法的資源。
451
- 重定向(微軟)
被用在Exchange ActiveSync中如果一個更有效的服務器能夠被使用或者是服務器不能訪問用戶的郵箱。
客戶端會假定重新執行HTTP自動發現協議去尋找更適合的服務器。
494
- 請求頭太大(Nginx)
Nginx內置代碼和431類似,但是是被更早地引入在版本0.9.4(在2011年1月21日)。
495
- 證書錯誤(Nginx)
Nginx內置的代碼,當使用SSL客戶端證書的時候錯誤會出現爲了在日誌錯誤中區分它和4XX和一個錯誤頁面的重定向。。
496
- 沒有證書(Nginx)
Nginx內置的代碼,當客戶端不能提供證書在日誌中分辨4XX和一個錯誤頁面的重定向。
497
- HTTP到HTTPS(Nginx)
Nginx內置的代碼,被用於原始的HTTP的請求發送給HTTPS端口去分辨4XX在日誌中和一個錯誤頁面的重定向。
498
- 令牌超時或失效(Esri)
由ArcGIS for Server返回。這個代碼意味着令牌的超時或者是失效。
499
- 客戶端關閉請求(Nginx)
被用在Nginx日誌去表明一個連接已經被客戶端關閉當服務器仍然正在處理它的請求,是的服務器無法返貨狀態碼。
499
- 需要令牌(Esri)
由ArcGIS for Server返回。意味着需要一個令牌(如果沒有令牌被提交)。
5xx - 服務器錯誤
服務器由於遇到錯誤而不能完成該請求。
500
- Internal Server Error 服務器內部錯誤;
服務器遇到了意料不到的情況,不能完成客戶的請求。
500.12
- 應用程序正忙於在 Web 服務器上重新啓動。
500.13
- Web 服務器太忙。
500.15
- 不允許直接請求 Global.asa。
500.16
– UNC 授權憑據不正確。
這個錯誤代碼爲 IIS 6.0 所專用。
500.18
– URL 授權存儲不能打開。
這個錯誤代碼爲 IIS 6.0 所專用。
500.100
- 內部 ASP 錯誤。
501
- Not Implemented 沒有實現;
服務器不支持實現請求所需要的功能,頁眉值指定了未實現的配置。例如,客戶發出了一個服務器不支持的PUT請求。服務器不支持實現請求所需要的功能,頁眉值指定了未實現的配置。例如,客戶發出了一個服務器不支持的PUT請求。
502
- Bad Gateway 錯誤的網關;
服務器作爲網關或者代理時,爲了完成請求訪問下一個服務器,但該服務器返回了非法的應答。 亦說Web 服務器用作網關或代理服務器時收到了無效響應。
502.1
- CGI 應用程序超時。
502.2
- CGI 應用程序出錯。
503
- Service Unavailable 服務不可用;
服務器由於維護或者負載過重未能應答。
例如,Servlet可能在數據庫連接池已滿的情況下返回503。服務器返回503時可以提供一個服務器由於維護或者負載過重未能應答。例如,Servlet可能在數據庫連接池已滿的情況下返回503。服務器返回503時可以提供一個 Retry-After頭。這個錯誤代碼爲 IIS 6.0 所專用。
504
- Gateway Timeout 網關超時;
由作爲代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答。(HTTP由作爲代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答。(HTTP 1.1新) 。
505
- HTTP Version Not Supported http版本不支持;
服務器不支持請求中所指明的HTTP版本。(HTTP 1.1新)。
506
- 變量也是導航
對於請求是透明的內容導航導致循環參照。
507
- 存儲不足
服務器不能存儲需要的內容去完成請求。
508
- 發現環路
服務器發現了一個無限的循環檔處理請求的時候。
509
- 頻帶寬度超出限制(Apache的擴展)
這個狀態碼沒有在任何RFCS中指定。使用方法是未知的。
511
- 需要網絡授權
客戶端需要授權去火的網絡的訪問權限。一般用於代理交互中被用來進行網絡的訪問控制。
520
- 未知錯誤
這個狀態碼也沒有被指定在任何RFC中,並且只會被一些服務器返回,例如微軟的Azure和CloudFlare服務器:”520錯誤本質上是一個捕獲全部的響應當原始服務器返回一些未知的或者一些不能被忍受或者被解釋的(協議違反或者空響應)”。
598
- 網絡讀取超時異常(未知)
這個狀態碼也沒有在任何RFC中指定,但是被用在微軟的HTTP代理中去標註一個網絡讀取超時在一個客戶端之前的代理的後面。
599
- 網絡連接超時異常(未知)
這個狀態碼也沒有在任何RFC中指定,但是被用在微軟的HTTP代理中去標註一個網絡連接超時在一個客戶端之前的代理的後面。