HTTP 報文首部

  • HTTP 協議的請求和響應報文中必定包含 HTTP 首部。首部內容爲客戶端和服務器分別處理請求和響應提供所需要的信息。
  • 在請求中,HTTP 報文由方法、URI、HTTP 版本、HTTP 首部字段等部分構成。

  • 請求報文:
報文首部
空行(CR + LF)
報文主體
  • 請求報文首部
請求行:方法,URI,HTTP 版本
請求首部字段(HTTP首部字段之一)
通用首部字段(HTTP首部字段之一)
實體首部字段(HTTP首部字段之一)
其他

  • HTTP 響應報文
  • 在響應中,HTTP 報文由 HTTP 版本、狀態碼(數字和原因短語)、HTTP 首部字段 3 部分構成。

  • 響應報文:
報文首部
空行(CR + LF)
報文主體
  • 響應報文首部
狀態行:(HTTP 版本,狀態碼)
響應首部字段(HTTP首部字段之一)
通用首部字段(HTTP首部字段之一)
實體首部字段(HTTP首部字段之一)
其他

  • 使用首部字段是爲了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容。
  • 在 HTTP 協議通信交互中使用到的首部字段,不限於 RFC2616 中定義的 47 種首部字段。還有 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定義的首部字段,它們的使用頻率也很高。

  • 通用首部字段
  • 通用首部字段是指,請求報文和響應報文雙方都會使用的首部。
  • 使用 no-cache 指令的目的是爲了防止從緩存中返回過期的資源。
  • HTTP/1.1 版本的默認連接都是持久連接。爲此,客戶端會在持久連接上連續發送請求。當服務器端想明確斷開連接時,則指定 Connection 首部字段的值爲 Close。
  • 首部字段 Date 表明創建 HTTP 報文的日期和時間。
  • 首部字段 Transfer-Encoding 規定了傳輸報文主體時採用的編碼方式。
  • 首部字段 Upgrade 用於檢測 HTTP 協議及其他協議是否可使用更高的版本進行通信,其參數值可以用來指定一個完全不同的通信協議。
  • 使用首部字段 Via 是爲了追蹤客戶端與服務器之間的請求和響應報文的傳輸路徑。
  • 報文經過代理或網關時,會先在首部字段 Via 中附加該服務器的信息,然後再進行轉發。
  • 首部字段 Via 不僅用於追蹤報文的轉發,還可避免請求迴環的發生。所以必須在經過代理時附加該首部字段內容。
  • HTTP/1.1 的 Warning 首部是從 HTTP/1.0 的響應首部(Retry-After)演變過來的。該首部通常會告知用戶一些與緩存相關的問題的警告。

  • 請求首部字段
  • 請求首部字段是從客戶端往服務器端發送請求報文中所使用的字段,用於補充請求的附加信息、客戶端信息、對響應內容相關的優先級等內容。
  • Accept 首部字段可通知服務器,用戶代理能夠處理的媒體類型及媒體類型的相對優先級。可使用 type/subtype 這種形式,一次指定多種媒體類型。
  • Accept-Charset 首部字段可用來通知服務器用戶代理支持的字符集及字符集的相對優先順序。 另外,可一次性指定多種字符集。與首部字段 Accept 相同的是可用權重 q 值來表示相對優先級。
  • Accept-Encoding 首部字段用來告知服務器用戶代理支持的內容編碼及內容編碼的優先級順序。可一次性指定多種內容編碼。
  • 首部字段 Accept-Language 用來告知服務器用戶代理能夠處理的自然語言集(指中文或英文等),以及自然語言集的相對優先級。 可一次指定多種自然語言集。和 Accept 首部字段一樣,按權重值 q 來表示相對優先級。
  • 首部字段 Authorization 是用來告知服務器,用戶代理的認證信息(證書值)。
  • 客戶端使用首部字段 Expect 來告知服務器,期望出現的某種特定行爲。因服務器無法理解客戶端的期望作出迴應而發生錯誤時,會返回狀態碼 417 Expectation Failed。
  • 首部字段 From 用來告知服務器使用用戶代理的用戶的電子郵件地址。
  • 虛擬主機運行在同一個 IP 上,因此使用首部字段 Host 加以區分,首部字段 Host 會告知服務器,請求的資源所處的互聯網主機名和端口號。Host 首部字段在 HTTP/1.1 規範內是唯一一個必須被包含在請求內的首部字段。
  • 請求被髮送至服務器時,請求中的主機名會用 IP 地址直接替換解決。但如果這時,相同的 IP 地址下部署運行着多個域名,那麼服務器就會無法理解究竟是哪個域名對應的請求。因此,就需要使用首部字段 Host 來明確指出請求的主機名。若服務器未設定主機名,那直接發送一個空值即可。
  • 形如 if-xxx 這種樣式的請求首部字段,都可稱爲條件請求。服務器接收到附帶條件的請求後,只有判斷指定條件爲真時,纔會執行請求。

響應首部字段

  • 響應首部字段是由服務器端向客戶端返回響應報文中所使用的字段,用於補充響應的附加信息、服務器信息,以及對客戶端的附加要求等信息。
  • 首部字段 Accept-Ranges 是用來告知客戶端服務器是否能處理範圍請求,以指定獲取服務器端某個部分的資源。
  • 首部字段 Age 能告知客戶端,源服務器在多久前創建了響應。字段值的單位爲秒。
  • 當使用中文版的瀏覽器訪問 http://www.google.com/ 時,就會返回中文版對應的資源,而使用英文版的瀏覽器訪問時,則會返回英文版對應的資源。兩者的 URI 是相同的,所以僅憑 URI 指定緩存的資源是相當困難的。若在下載過程中出現連接中斷、再連接的情況,都會依照 ETag 值來指定資源。
  • 使用首部字段 Location 可以將響應接收方引導至某個與請求 URI 位置不同的資源。
  • 首部字段 Proxy-Authenticate 會把由代理服務器所要求的認證信息發送給客戶端。它與客戶端和服務器之間的 HTTP 訪問認證的行爲相似,不同之處在於其認證行爲是在客戶端與代理之間進行的。
  • 首部字段 Retry-After 告知客戶端應該在多久之後再次發送請求。主要配合狀態碼 503 Service Unavailable 響應,或 3xx Redirect 響應一起使用。
  • 首部字段 Server 告知客戶端當前服務器上安裝的 HTTP 服務器應用程序的信息。不單單會標出服務器上的軟件應用名稱,還有可能包括版本號和安裝時啓用的可選項。
  • 首部字段 Vary 可對緩存進行控制。源服務器會向代理服務器傳達關於本地緩存使用方法的命令。

實體首部字段

  • 實體首部字段是包含在請求報文和響應報文中的實體部分所使用的首部,用於補充內容的更新時間等與實體相關的信息。
  • 首部字段 Allow 用於通知客戶端能夠支持 Request-URI 指定資源的所有 HTTP 方法。當服務器接收到不支持的 HTTP 方法時,會以狀態碼 405 Method Not Allowed 作爲響應返回。與此同時,還會把所有能支持的HTTP方法寫入首部字段 Allow 後返回。
  • 首部字段 Content-Encoding 會告知客戶端服務器對實體的主體部分選用的內容編碼方式。內容編碼是指在不丟失實體信息的前提下所進行的壓縮。
  • 首部字段 Content-Language 會告知客戶端,實體主體使用的自然語言(指中文或英文等語言)。
  • 首部字段 Content-Length 表明了實體主體部分的大小(單位是字節)。
  • 首部字段 Content-Location 給出與報文主體部分相對應的 URI。和首部字段 Location 不同,Content-Location 表示的是報文主體返回資源對應的 URI。
  • 首部字段 Content-MD5 是一串由 MD5 算法生成的值,其目的在於檢查報文主體在傳輸過程中是否保持完整,以及確認傳輸到達。
  • 爲確保報文的有效性,作爲接收方的客戶端會對報文主體再執行一次相同的 MD5 算法。計算出的值與字段值作比較後,即可判斷出報文主體的準確性。
  • 針對範圍請求,返回響應時使用的首部字段 Content-Range,能告知客戶端作爲響應返回的實體的哪個部分符合範圍請求。字段值以字節爲單位,表示當前發送部分及整個實體大小。
  • 首部字段 Content-Type 說明了實體主體內對象的媒體類型。和首部字段 Accept 一樣,字段值用 type/subtype 形式賦值。
  • 首部字段 Expires 會將資源失效的日期告知客戶端。緩存服務器在接收到含有首部字段 Expires 的響應後,會以緩存來應答請求,在 Expires 字段值指定的時間之前,響應的副本會一直被保存。當超過指定的時間後,緩存服務器在請求發送過來時,會轉向源服務器請求資源。
  • 首部字段 Last-Modified 指明資源最終修改的時間。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章