你要知道的HTTP--HTTP報文

用於HTTP協議交互的信息被稱爲HTTP報文。請求端的報文叫作請求報文,響應端的報文叫作響應報文。HTTP報文是由多行(用CR + LF做換行符)數據構成的字符串文本。html

[CR + LF]: CR(Carriage return),回車符, 16進制0x0d。LF(Line Feed),換行符0x0a.算法

請求報文及響應報文結構


HTTP報文首部


  1. 請求行:請求方法 + 請求URI + HTTP版本
  2. 狀態行: HTTP版本 + 狀態碼(200) + 緣由短語(OK)
  3. 首部字段: 分爲 請求首部字段、響應首部字段、通用首部字段,實體首部字段,還有其餘沒被記錄在RFC的Cookie等。
    • 通用首部字段
      • Cache-Control: 控制緩存的行爲
      • Connection: 決定當前的事務完成後,是否會關閉網絡鏈接。
        • 若是該值是「keep-alive」,網絡鏈接就是持久的,不會關閉,使得對同一個服務器的請求能夠繼續在該鏈接上完成。HTTP/1.1默認爲持久鏈接
        • 若是該值爲"close",代表客戶端或服務器想要關閉該網絡鏈接,這是HTTP/1.0請求的默認值
      • Date: 建立報文的日期時間
      • Pragma: 它用來向後兼容只支持 HTTP/1.0 協議的緩存服務器,那時候 HTTP/1.1 協議中的 Cache-Control 尚未出來。設置值爲「no-cache」時,與 Cache-Control: no-cache 效果一致。強制要求緩存服務器在返回緩存的版本以前將請求提交到源頭服務器進行驗證。建議只在須要兼容 HTTP/1.0 客戶端的場合下應用 Pragma 首部。
      • Transfer-Encoding: 傳輸報文主體時所採用的編碼方式
      • Via: 代理如武器信息
      • Warning: 報文當前狀態可能存在的問題。在響應中能夠出現多個 Warning 首部。
    • 請求首部字段
      • Accept: 用戶代理可處理的媒體類型。例如:text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8, 其中;q= (q因子權重)
      • Accept-Charset: 優先的字符集
      • Accept-Encoding: 優先的編碼
      • Accept-Language: 優先的語言(天然語言)
      • Authorization: Web認證信息
      • Expect: 期待服務器的特定行爲,例如:100-continue。目前沒有已知的瀏覽器使用這個消息頭
      • From: 用戶的電子郵件地址。好比用戶過量的不合法的請求等。站點聯繫人會聯繫到你。
      • Host: 請求資源所在的服務器
      • If-Match: 比較實體標記(ETag)
      • If-None-Match: 比較實體標記(與If-Match相反)
      • If-Modified-Since: 比較資源的更新時間
      • If-Unmodified-Since: 比較資源的更新時間(與If-Modified-Since相反)
      • If-Range: 資源未更新時發送實體Byte的範圍請求
      • Range: 實體的字節範圍請求
      • Referer: 請求頭包含了當前請求頁面的來源頁面的地址,即表示當前頁面是經過此來源頁面裏的連接進入的。服務端通常使用 Referer 請求頭識別訪問來源,可能會以此進行統計分析、日誌記錄以及緩存優化等。
      • TE: 傳輸編碼的優先級
      • User-Agent: HTTP客戶端程序的信息
    • 響應首部字段
      • Etag: 實體標籤(Entity Tag)的縮寫。ETag通常不以明文形式相應給客戶端。在資源的各個生命週期中,它都具備不一樣的值,用於標識出資源的狀態。當資源發生變動時,若是其頭信息中一個或者多個發生變化,或者消息實體發生變化,那麼ETag也隨之發生變化。生成規則由服務端確認。ETag之間的比較使用的是強比較算法,即只有在每個字節都相同的狀況下,才能夠認爲兩個文件是相同的。在 ETag 前面添加 W/ 前綴表示能夠採用相對寬鬆的算法。 值表明優先順序,用相對質量價值表示,又稱做權重。
      • Trailer: 報文末端的首部一覽
      • Age: 消息頭裏包含消息對象在緩存代理中存貯的時長,以秒爲單位。
      • Server: HTTP服務器的安裝信息。例如:TornadoServer/5.1.1
      • Location: 令客戶端重定向至指定URI
      • Vary: 代理服務器緩存的管理信息
      • WWW-Authenticate: HTTP訪問認證
      • Accept-Ranges: 是否接受字節範圍的要求
      • Proxy-Authenticate: 代理服務器對客戶端的認證信息
      • Retry-After: 對再次發起請求時機的要求
    • 實體首部字段
      • Allow: 用於枚舉資源所支持的 HTTP 方法的集合。當服務器接收到不支持的HTTP方法時,會以狀態碼405 Method Not Allowed做爲相應返回。以此同時,還會把全部支持的HTTP方法寫入首部字段Allow後返回。
      • Content-Encoding: 是一個實體消息首部,用於對特定媒體類型的數據進行壓縮。當這個首部出現的時候,它的值表示消息主體進行了何種方式的內容編碼轉換。這個消息首部用來告知客戶端應該怎樣解碼才能獲取在 Content-Type 中標示的媒體類型內容。例如Content-Encoding: gzip
      • Content-Language: 實體主體使用的天然語言
      • Content-Length: 實體主體部分的大小(單位是字節)。對實體主體進行編碼傳輸時,不能再使用這個首部字段。因爲實體主題大小的計算略微複雜,因此再也不展開。
      • Content-Location: 要返回的數據的地址選項。最主要的用途是用來指定要訪問的資源通過內容協商後的結果的URL。
      • Content-Type: 實體主體內對象媒體類型
      • Last_Modified: 是一個響應首部,其中包含源頭服務器認定的資源作出修改的日期及時間。 它一般被用做一個驗證器來判斷接收到的或者存儲的資源是否彼此一致。因爲精確度比 ETag 要低,因此這是一個備用機制。包含有 If-Modified-Since 或 If-Unmodified-Since 首部的條件請求會使用這個字段。
      • Expires: 響應頭包含日期/時間, 即在此時候以後,響應過時。無效的日期,好比 0, 表明着過去的日期,即該資源已通過期

具體的一些重要的報文字段介紹見下一篇文章。


上一篇:HTTP誕生背景及版本變化瀏覽器

相關文章
相關標籤/搜索