HTTP/1.1 通用首部字段
通用首部字段是指,請(qǐng)求報(bào)文和響應(yīng)報(bào)文雙方都會(huì)使用的首部馒疹。
1.Cache-Control
通過指定首部字段 Cache-Control 的指令,就能操作緩存的工作機(jī)制乙墙。
指令的參數(shù)是可選的颖变,多個(gè)參數(shù)之間通過 ,
分隔生均。首部字段 Cache-Control
的指令可用于請(qǐng)求及響應(yīng)時(shí)。
Cache-Control:private, max-age=0, no-cache
1.1. Cache-Control 指令一覽
緩存請(qǐng)求指令
指令 | 參數(shù) | 說明 |
---|---|---|
no-cache | 無 | 強(qiáng)制向源服務(wù)器再次驗(yàn)證 |
no-store | 無 | 不緩存請(qǐng)求或響應(yīng)的任何內(nèi)容 |
max-age=[秒] | 必需 | 相應(yīng)的最大值 |
max-stale(= [秒]) | 可省略 | 接收已過期的響應(yīng) |
min-fresh=[秒] | 必需 | 期望在指定時(shí)間內(nèi)的響應(yīng)仍有效 |
no-transform | 無 | 代理不可更改媒體類型 |
only-if-cached | 無 | 從緩存獲取資源 |
cache-extension | - | 新指令標(biāo)記(token) |
緩存響應(yīng)指令
指令 | 參數(shù) | 說明 |
---|---|---|
public | 無 | 可向任意方提供響應(yīng)的緩存 |
private | 可省略 | 僅向特定用戶返回響應(yīng) |
no-cache | 可省略 | 緩存服務(wù)器不能對(duì)資源進(jìn)行緩存 |
no-store | 無 | 不緩存請(qǐng)求或響應(yīng)的任何內(nèi)容 |
no-transform | 無 | 代理不可更改媒體類型 |
must-revalidate | 無 | 可緩存但必須再向源服務(wù)器進(jìn)行確認(rèn) |
proxy-revalidate | 無 | 要求中間緩存服務(wù)器對(duì)緩存的響應(yīng)有效性再進(jìn)行確認(rèn) |
max-age=[秒] | 必需 | 響應(yīng)的最大 Age 值 |
s-maxage=[秒] | 必需 | 公共緩存服務(wù)器響應(yīng)的最大Age值 |
cache-extension | - | 新指令標(biāo)記(token) |
這里僅挑選幾個(gè)重要的指令來解釋
no-cache
no-cache:為了防止從緩存中返回過期的資源悼做。
如果請(qǐng)求中包含 no-cache,表示客戶端不會(huì)接受緩存過的響應(yīng)哗魂「刈撸“中間”的緩存服務(wù)器必須把客戶端請(qǐng)求轉(zhuǎn)發(fā)給源服務(wù)器。
如果源服務(wù)器返回的響應(yīng)中包含 no-cache录别,那么緩存服務(wù)器也不能對(duì)資源進(jìn)行緩存朽色。
如果服務(wù)器返回的響應(yīng)中 no-cache 包含參數(shù)值,就表示當(dāng)客戶端接收到這個(gè)被指定的參數(shù)值的首部字段對(duì)應(yīng)的響應(yīng)報(bào)文后组题,就不能使用緩存葫男。另外就是 no-store 表示真正的不允許緩存。
Cache-Control:no-cache=Location
max-age
Cache-Control:max-age=604800(單位:秒)
當(dāng)客戶端發(fā)送的請(qǐng)求中包含 max-age 指令時(shí)崔列,如果判定緩存資源的緩存時(shí)間數(shù)值比指定時(shí)間的數(shù)值更小梢褐,那么客戶端就接收緩存的資源。另外赵讯,當(dāng)指定 max-age 值為 0 盈咳,那么緩存服務(wù)器通常需要將請(qǐng)求轉(zhuǎn)發(fā)給源服務(wù)器。
當(dāng)服務(wù)器返回的響應(yīng)中包含 max-age 時(shí)边翼,此時(shí)表示資源緩存的最長(zhǎng)時(shí)間鱼响,緩存服務(wù)器不再對(duì)資源的有效性進(jìn)行確認(rèn)。
在 HTTP/1.0 版本中组底,當(dāng) Expires 和 max-age (同時(shí)出現(xiàn)時(shí))丈积,會(huì)優(yōu)先處理 max-age 指令,忽略 Expires债鸡。
min-fresh
Cache-Control:min-fresh=60(單位:秒)
min-fresh 指令要求緩存服務(wù)器返回至少還未過指定時(shí)間的緩存資源江滨。當(dāng)指定 min-fresh=60 后,過了60秒的資源都無法作為響應(yīng)返回了厌均。
max-stale
Cache-Control:max-stale=3600(單位:秒)
該指令表示即使過期也照常接收牙寞。
如果未指定參數(shù)值,則表示無論過期多長(zhǎng)時(shí)間都會(huì)接收
only-if-cached
Cache-Control:only-if-cached
表示客戶端僅在緩存服務(wù)器本地緩存目標(biāo)資源的情況下才會(huì)要求其返回莫秆〖淙福———— 該指令要求緩存服務(wù)器不重新加載響應(yīng),也不會(huì)再次確認(rèn)資源有效性镊屎。若發(fā)生請(qǐng)求緩存服務(wù)器的本地緩存無響應(yīng)惹挟,則返回狀態(tài)碼 504 Gateway Timeout。
must-revalidate
Cache-Control:must-revalidate
使用 must-revalidate 指令缝驳,代理會(huì)向源服務(wù)器再次驗(yàn)證即將返回的響應(yīng)緩存目前是否仍然有效连锯。
若代理無法連通源服務(wù)器归苍,緩存必須給客戶端一條 504(Gateway Timeout)狀態(tài)碼。
注意:使用 must-revalidate 會(huì)忽略 max-stale 运怖。
proxy-revalidate
Cache-Control:proxy-revalidate
該指令要求所有的緩存服務(wù)器在接收到客戶端帶有該指令的請(qǐng)求返回響應(yīng)之前拼弃,必須再次驗(yàn)證緩存的有效性。
no-transform
Cache-Control:no-transform
該指令規(guī)定無論在請(qǐng)求還是響應(yīng)中摇展,緩存都不能該表實(shí)體主體的媒體類型吻氧。
這樣可防止緩存或代理壓縮圖片等類似操作。
2.Connection
Connection的作用如下
- 控制不再轉(zhuǎn)發(fā)給代理的首部字段
- 管理持久連接
下面依次來對(duì)每個(gè)作用做說明
2.1 控制不再轉(zhuǎn)發(fā)給代理的首部字段
Connection:不再轉(zhuǎn)發(fā)的首部字段名
在客戶端發(fā)送請(qǐng)求和服務(wù)器返回響應(yīng)內(nèi)咏连,使用該首部字段盯孙,可控制不再轉(zhuǎn)發(fā)給代理的首部字段
![](media/14680613521295/14681351239994.jpg)
2.2 管理持久連接
Connection:close
HTTP/1.1 版本默認(rèn)連接都是持久連接。為此祟滴,客戶端會(huì)在持久連接上持續(xù)發(fā)送請(qǐng)求振惰。當(dāng)服務(wù)器想明確斷開連接時(shí),則指定 Connection 首部字段的值為 Close垄懂。
HTTP/1.1 之前的 HTTP 版本默認(rèn)連接都是非持久連接骑晶。為此,如果想在舊版本的 HTTP 協(xié)議上維持持續(xù)連接草慧,則需要指定 Connection 首部字段值為 Keep-Alive透罢。
如下圖①所示,客戶端發(fā)送請(qǐng)求給服務(wù)器時(shí)冠蒋,服務(wù)端會(huì)像下圖②那樣加上首部字段 Keep-Alive 及首部字段 Connection 后返回響應(yīng)羽圃。
3. Trailer
該字段會(huì)向服務(wù)器說明在報(bào)文主體后面記錄了哪些首部字段。該首部字段可應(yīng)用在 HTTP/1.1 版本分塊傳輸編碼時(shí)抖剿。
Trailer: Expires
···報(bào)文主體···
0
Expires:Tue朽寞,28 Sep 2004 23:59:59 GMT
上面指定值為 Expires,在報(bào)文主體之后(分塊長(zhǎng)度0之后)出現(xiàn)了首部字段 Expires斩郎。
4. Upgrade
該字段用于檢測(cè) HTTP 協(xié)議及其他協(xié)議是否可使用更高的版本進(jìn)行通信脑融,其參數(shù)值可以用來指定一個(gè)完全不同的通信協(xié)議。
上圖中缩宜,Upgrade字段值指定為 TLS/1.0肘迎。此時(shí)其字段產(chǎn)生作用的對(duì)象僅限于客戶端和鄰接服務(wù)器之間。
5. Via
Via 是為了追蹤客戶端與服務(wù)器之間的請(qǐng)求和響應(yīng)報(bào)文的傳輸路徑锻煌。
報(bào)文經(jīng)過代理或網(wǎng)關(guān)時(shí)妓布,會(huì)先在首部字段 Via 中附加該服務(wù)器的信息,然后在進(jìn)行轉(zhuǎn)發(fā)宋梧。
另外匣沼,該字段還可避免請(qǐng)求回環(huán)的發(fā)生。所以必須在經(jīng)過代理時(shí)附加該首部字段內(nèi)容捂龄。
6. Warning
該字段通常會(huì)告知用戶一些與緩存相關(guān)的問題的警告释涛。
其格式如下加叁。最后的日期時(shí)間部分可省略。
Warning:[警告碼] [警告的主機(jī):端口號(hào)] "[警告內(nèi)容]" ([日期時(shí)間])
HTTP/1.1 警告碼
警告碼 | 警告內(nèi)容 | 說明 |
---|---|---|
110 | Response is stale(響應(yīng)已過期) | 代理返回已過期的資源 |
110 | Revalidation failed(再驗(yàn)證失敶角恕) | 代理再驗(yàn)證資源有效性時(shí)失效(服務(wù)器無法到達(dá)等原因) |
112 | Disconnection operation(斷開連接操作) | 代理與互聯(lián)網(wǎng)連接被故意切斷 |
113 | Heuristic expiration(試探性過期) | 響應(yīng)的使用期超過24小時(shí)(有效緩存的設(shè)定時(shí)間大于24小時(shí)的情況下) |
199 | Miscellaneous warning(雜項(xiàng)警告) | 任意的警告內(nèi)容 |
214 | Transformation applied(使用了轉(zhuǎn)換) | 代理對(duì)內(nèi)容編碼或媒體類型等執(zhí)行了某些處理時(shí) |
299 | Miscellaneous persistent warning(持久雜項(xiàng)警告) | 任意的警告內(nèi)容 |