HTTP學習筆記 HTTP首部字段(1)

2021-07-25 20:55:01 字數 3772 閱讀 5393

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...