HTTP報文
HTTP 報文是 HTTP 應用程序之間傳遞的格式化數據塊,分為請求報文和響應報文兩類,兩者的基本結構相同。
HTTP 報文由起始行、首部、主體(可選)三個部分組成。其中,起始行和首部均以一個行終止序列(即空行,可寫作CRLF,包括一個回車符、一個換行符)作為結束符。主體是可選的數據塊,可以包含文本、二進制數據或者為空。
起始行
所有 HTTP 報文都已起始行作為開始,請求報文和響應報文的起始行的語法有所不同。
請求報文起始行:
又稱為請求行,告訴服務器要做什麽。
語法:
<method><request-URL><version> 如:GET www.google.com HTTP/1.0
方法(method):常用的有
① GET:從服務器上獲取資源
② POST:向服務器發送需要處理(更新)的數據
③ PUT:將請求主體存儲於(寫入)服務器上的指定路徑(請求的 URL)
④ DELETE:請求服務器刪除資源,但無法保證被執行,因為服務器可以在不通知客戶端的情況下撤銷請求
⑤ HEAD:從服務器獲取資源首部,必須確保與 GET 請求返回的首部完全相同
⑥ OPTIONS:確定服務器可以執行的方法;使客戶端不同實際訪問資源就能判斷訪問資源的最優方法。
⑦ TRACE:對可能經過代理服務器的報文進行跟蹤
其中 GET 和 HEAD 方法被認為是安全的,因為這兩種請求不會在服務器上產生什麽結果。
響應報文起始行:
又稱為響應行,告訴客戶端發生了什麽。
語法:
<version><status><reason-phrase> 如:HTTP/1.0 200 OK
狀態碼(status-code):數字狀態碼,便於程序進行差錯處理;每個狀態碼第一位數字都用於描述狀態的一般類型。其中
100-199:表示信息提示,100-101 已被定義
100 Continue 表示服務器收到了請求的初始部分,請客戶端繼續。一般當客戶端需要發送一個大實體或判斷服務器能否處理實體時,可以在首部添加 Expect: 100 Continue。如果客戶端不需要發送實體,就不應該發送該首部字段。
200-299:表示成功,200-206 已被定義
200 OK 請求成功,主題包含所請求的資源。
300-399:表示資源被移走,300-305、307 已被定義
301 Moved Permanently 永久重定向;
302 Found 臨時重定向(HTTP/1.0);
303 See Other 臨時重定向(HTTP/1.1);
304 Not Modified 所請求資源未被修改,使用緩存資源;
307 Temporary Rederect 與 301 類似(HTTP/1.1);
400-499:表示客戶端請求出錯,400-415 已被定義
401 Unauthorized 客戶端在獲取資源的訪問權之前,對自己進行認證;
403 Forbidden 請求被服務器拒絕,通常在服務器不想說明拒絕原因時使用;
404 Not Found 請求的資源不存在;
405 Method Not Allowed 請求中帶有所請求 URL 不支持的方法;
406 Not Acceptable 服務器不存在客戶端可接受的與請求 URL 匹配的資源;
500-599:表示服務器出錯,500-505 已被定義
500 Internal Server Error 服務器發生錯誤;
501 Not Implemented 請求超出服務器的能力範圍(如使用服務器不支持的請求方法);
503 Service Unavalable 服務器暫時無法為請求提供服務,但將來可以;
504 Gateway Timeout 響應超時,來自網關或代理;
505 HTTP Version Not Supproted 請求使用了服務器無法或不願支持的協議版本;
原因短語(reason-phrase):以文本形式描述操作狀態;便於人們理解,因此只對人類有意義(一般程序只檢查狀態碼)
首部
為報文添加一些附件信息;本質上是一些名/值對列表。首部分為:
通用首部:
緩存首部:Cache-Control、Pragma
請求首部:
Accept首部:Accept、Accept-Charset、Accept-Encoding、Accept-Language、TR
條件首部:Expect、If-Match、If-Modified-Since、If-Unmodified-Since、If-Match、If-None-Match
安全首部:Authorization、Cookie、Cookie2
代理首部:Max-forward、Proxy-Authorization、Proxy-Connection
響應首部:
信息性首部:Age、public...
安全首部:Proxy-Authenticate、Set-Cookie、Set-Cookie2
實體首部:
信息性首部:Allow、Location
內容首部:Content-Type、Content-length、Content-Language
緩存首部:ETag、Expires、Last-Modified
擴展首部。
主體
HTTP 要傳輸的內容,可以為圖片、視頻、HTML 文檔、軟件應用程序等。
參考:HTTP 權威指南
HTTP報文