http協議的請求和響應報文中必定包含http首部。首部內容為客戶端和伺服器分別處理請求和響應提供所需要的資訊。
在請求中,http報文首部由以下幾部分構成:
在響應中,http報文首部由以下幾個部分構成:
首部字段同時存在與請求和響應報文內,並涵蓋http報文相關的內容資訊。
http首部欄位是由首部欄位名和字段值構成的,中間用冒號分隔。
http首部字段根據實際用途被分為以下4種型別:
請求報文和響應報文兩方都會使用的首部。
用於操作http快取。多個指令之間通過「,」分隔。
表示是否能快取的指令
cache
-control:public
當指定使用public指令時,則明確表明其他使用者也可以利用快取。
cache
-control:private
當指定private指令後,響應只以特定的使用者作為物件,這與public指令的行為相反。
快取伺服器會對該特定使用者提供資源快取的服務,對其他使用者傳送過來的請求則不會返回快取。
cache
-control:no-cache
使用no-cache指令的目的是為了防止從快取中返回過期的資源。每次在使用快取之前都強制傳送請求給源伺服器進行驗證,檢查檔案該沒改變
從字面上理解很容易以為no-cache表示不快取,但事實上no-cache代表不快取過期的資源,快取會向伺服器進行有效性確認後處理資源。後面提到的no-store才是不快取資源。
cache
-control:no-store
該指令規定快取不能在本地儲存請求或者響應。
與到期時間相關的指令
cache
-control:s-maxage
=604800(單位:秒)
s-maxage指令的功能和max-age指令相同,它們的不同點是s-maxage指令只適用於供多位使用者使用的公共快取伺服器(即一般**)。
也就是說,對於向同一使用者重複返回響應的伺服器來說,這個指令沒有任何作用。
另外,使用s-maxage指令後,則直接忽略對expires首部欄位及max-age指令的處理。
cache
-control:max
-age
=604800(單位:秒)
當客戶端傳送的請求中包含max-age時,如果判定快取資源的快取時間比指定時間的數值更小,那麼客戶端就接受快取的資源。
如果max-age指定為0,那麼快取伺服器通常需要將請求**給源伺服器。
當伺服器返回的響應中包含max-age時,快取伺服器將不對資源的有效性再做確認,max-age代表資源儲存為快取的最長時間。
在同時遇到expires首部欄位和max-age時,會優先處理max-age指令而忽略掉expires首部字段。
cache
-control:min
-fresh
=60
min-fresh指令要求快取伺服器返回還未過指定時間的快取資源。
表示客戶端願意接收乙個已經過期的資源。 可選的設定乙個時間(單位秒),表示響應不能超過的過期時間。
cache
-control:max
-stale
=3600
如果指令未指定引數值,那麼無論經過多久客戶端都會接受快取。
如果指令中指定了具體數值,那麼只接受過期時間處於指定數值內的快取。
cache
-control:only-if
-cached
表示不要去獲取新資料。客戶端只希望獲取快取的響應,並且不去聯絡伺服器去檢查是否存在較新的副本。
與驗證相關的指令
cache
-control:must-revalidate
使用這個指令,**會向源伺服器再次驗證快取是否有效。
另外,使用這條指令會忽略max-stale指令。
cache
-control: proxy-revalidate
與must-revalidate相同,但它僅適用於共享快取(例如**),並被私有快取忽略。
cache
-control: no-transform
表示無論是在請求還是響應中,快取都不能改變實體主體的**型別。
這樣做可以防止快取或**壓縮等類似操作。
這個首部具備以下兩個作用:
控制不再**
connection:不再**的首部欄位名
在**向伺服器進行**時,將會刪除指定的首部字段。
管理持久連線
connection:close
http 1.1版本的預設連線都是持久連線。當伺服器想明確斷開連線時則指定connection首部欄位為close。
connection:keep-alive
之前舊版本的http預設連線都是非持久連線,為此如果想在舊版本的http協議上維持持續連線,則需要指定為keep-alive。
客戶端傳送請求給伺服器時,伺服器端返回的響應中的首部欄位會加上keep-alive和connection後返回。
表明建立http報文的日期和時間。
date
:sat, 07 jan 2017 11:52
:19gmt
這個欄位會事先說明在報文主體後記錄了哪些首部字段。
這個欄位可應用在分塊傳輸編碼。
可以看到在首部中trailer指定了expires欄位。這個欄位在報文主體的後面也出現了。
規定了傳輸報文主體時採用的編碼方式。
用於檢測http協議及其他協議是否可使用更高的版本進行通訊,其引數值可以用來指定乙個完全不同的通訊協議。
為了追蹤客戶端與伺服器之間的報文傳輸路徑。
報文經過**或者閘道器時,會現在首部欄位via中附加該伺服器的資訊然後再進行**。
via不僅用於追蹤報文的**,還可以避免請求回環的發生,所以必須在經過**時附加該首部字段內容。
via首部用於追蹤傳輸路徑,因此經常和trace方法一起使用。
會告知使用者一些與快取相關的問題的警告。
Http學習《三》HTTP 首部
http 協議的請求和響應報文中必定包含 http 首部,只是我們平時 在使用 web 的過程中感受不到它。本章我們一起來學習 http 首部 的結構,以及首部中各字段的用法。http 響應報文 在響應中,http 報文由 http 版本 狀態碼 數字和原因短語 http 首部字段 3 部分構成。以...
HTTP協議 HTTP首部總結
首部和方法配合工作,共同決定了客戶端和伺服器能做什麼事情。http協議的請求和響應報文中必定含有http首部,首部內容為客戶端和伺服器分別處理請求和響應提供所需要的資訊,對客戶端使用者來說,這些資訊中的大部分內容都無須親自檢視,因此平時在使用web的過程中感受不到它。http請求報文由方法 uri ...
HTTP協議 HTTP實體首部
有很多首部可以用來描述http報文的復合。由於請求和響應報文中都可能包含實體部分,所以在這兩種型別的報文中都可能出現這些首部。首部欄位名 說明allow 資源可支援的http方法 content encoding 實體主體使用的編碼方式 content language 實體主體的自然語言 cont...