HTTP首部(一)

目標(biāo)

  • 首部的結(jié)構(gòu)

  • 首部中各字段的用法

HTTP報文首部

HTTP報文的結(jié)構(gòu)

HTTP協(xié)議的請求和響應(yīng)報文中必定包含HTTP首部,對于客戶的來說,這些信息的大部分內(nèi)容都無須親自查看。

HTTP請求報文

HTTP請求報文

下面是訪問http://hackr.jp時的報文

請求報文

HTTP響應(yīng)報文

響應(yīng)報文

以下是請求http://hackr.jp/時返回的響應(yīng)報文首部信息

響應(yīng)報文頭部

HTTP首部字段

HTTP首部字段傳遞重要信息

使用首部字段是為了給瀏覽器和服務(wù)器提供報文主體大小,所使用的語言,認(rèn)真信息等內(nèi)容

首部字段內(nèi)可使用的附加信息較多

HTTP首部字段結(jié)構(gòu)

首部字段名:字段值

如:報文主體對象類型

Content-Type:text/html

字段值對應(yīng)單個HTTP首部字段可以有多個值,如

Keep-Alive:timeout=15, max=100

若HTTP首部字段重復(fù)了如何

根據(jù)瀏覽器的不同,處理情況可能不能,有些瀏覽器優(yōu)先處理第一次出現(xiàn)的首部字段,而有些則會優(yōu)先處理最后出現(xiàn)的首部字段。

4種HTTP首部字段類型

  • 通用首部字段:General Header Fields

? 請求報文和響應(yīng)報文兩方都會使用的首部。

  • 請求首部字段:Request Header Fields

? 客戶端發(fā)送請求報文給服務(wù)器時使用,補(bǔ)充了請求的附加內(nèi)容,客戶端信息,響應(yīng)內(nèi)容相關(guān)的優(yōu)先級等信息

  • 響應(yīng)首部字段:Response Header Fields

? 服務(wù)器向客戶端返回響應(yīng)報文時使用的首部,補(bǔ)充響應(yīng)的附加內(nèi)容,也會要求客戶端附加額外的內(nèi)容信息。

  • 實(shí)體首部字段:Entity header Fields

? 針對請求報文和響應(yīng)報文的實(shí)體部分使用的首部。補(bǔ)充了資源內(nèi)容更新時間等與實(shí)體有關(guān)的信息。

HTTP/1.1首部字段一覽

47種首部字段

通用首部字段
請求首部字段
響應(yīng)首部字段
實(shí)體首部字段

非HTTP/1.1首部字段

在HTTP協(xié)議中不限于RFC2616中的47種首部字段,還有Cookie,Set-Cookie和Content-Disposition等其他RFC中定義的首部字段。

End-to-end首部和Hop-by-hop首部

HTTP首部字段將定義成緩存代理和非緩存代理的行為,分為2種類型。

  • 端到端首部(End-to-end Header)

? 分在此類別中的首部會轉(zhuǎn)發(fā)給請求/響應(yīng)對應(yīng)的最終接受目標(biāo),且必須保存在由緩存生成的響應(yīng)中,另外規(guī)定它必須被轉(zhuǎn)發(fā)。

  • 逐跳首部(Hop-by-hop Header)

? 分在此類別中的首部只對單次轉(zhuǎn)發(fā)有效,會因通過緩存或代理而不再轉(zhuǎn)發(fā)。HTTP/1.1和之后版本中,如果要使用hop-by-hop首部,需提供Connection首部字段

? 下列字段首部字段,其他所有字段都端到端首部

Connection/Keep-Alive/Proxy-Authenticate/Proxy-Authorization/Trailer/TE/Transfer-Encoding/Upgrade

HTTP/1.1通用首部字段

Cache-Control

通過指定首部字段Cache-Control的指令,就能操作緩存的工作機(jī)制。

指令的參數(shù)是可選的,多個指令之間通過“,”分隔,首部字段Cache-Control可用于請求何響應(yīng)時。

Cache-Control: private, max-age=0, no-cache
緩存請求指令
緩存響應(yīng)指令

public

當(dāng)指定public指令時,則明確表明其他用戶也可以利用緩存

private

當(dāng)指定private指令后,響應(yīng)只以特定的多用戶作為對象,這與public指令的行為相反

no-cache

為了防止從緩存中返回過期的資源

客戶端發(fā)送請求中如果包含no-cache指令,則表示客戶端將不會接收緩存過的響應(yīng),于是,“中間”的緩存服務(wù)器必須把客戶端請求轉(zhuǎn)發(fā)給源服務(wù)器。

如果服務(wù)器返回的響應(yīng)中包含no-cache指令,那么緩存服務(wù)器不能對資源進(jìn)行緩存,源服務(wù)器以后也將不再對緩存服務(wù)器請求中提出的資源有效性進(jìn)行確認(rèn),且禁止其對響應(yīng)資源進(jìn)行緩存操作。

Cache-Control: no-cache=Location

由服務(wù)器返回的響應(yīng)中,若報文首部字段Cache-Control中對no-cache 字段名具體指定參數(shù)值,那么客戶端就在接收到服務(wù)器這個被指定參數(shù)值,那么客戶端在接收到這個被指定參數(shù)值的首部字段對應(yīng)的響應(yīng)報文后,就不能使用緩存了。無參數(shù)值的首部字段可以使用緩存。

控制可執(zhí)行緩存的對象的指令

no-store

暗示請求(和對應(yīng)的響應(yīng))或響應(yīng)中包含機(jī)密信息。因此該指令規(guī)定緩存不能存儲在本地存儲請求或者響應(yīng)的任一部分。

注意 : no-cache代表不緩存過期的資源,緩存會向源服務(wù)器進(jìn)行有效期確認(rèn)后處理資源。no-store才是真正地不進(jìn)行緩存。

指定緩存期限和認(rèn)證的指令

s-maxage

Cache-Control: s-maxage=604800(單位:秒)

s-maxage指令的功能和max-age指令的相同,不同點(diǎn)是:前者只適用于供多用戶使用的公共緩存服務(wù)器。對于同一用戶重復(fù)返回響應(yīng)的服務(wù)器來說,這個指令沒有任何作用。

另外,當(dāng)使用s-maxage指令后,則直接忽略對Expires首部字段及max-age指令的處理。

max-age

Cache-Control: max-age=604800(單位:秒)

當(dāng)客戶端發(fā)送的請求中包含max-age指令時,如果判定緩存資源的緩存時間數(shù)值比指定時間數(shù)值更小,那么客戶端就接收緩存的資源。另外,當(dāng)指定max-age=0,那么緩存服務(wù)器通常需要將請求轉(zhuǎn)發(fā)給源服務(wù)器。

當(dāng)服務(wù)器返回的響應(yīng)中包含max-age指令時,緩存服務(wù)器將不對資源的有效性再做確認(rèn),而max-age數(shù)值代表資源保存為緩存的最長時間。

HTTP/1.1版本中,max-age與Expires共存,忽略掉Expires,1.0版本忽略掉max-age

min-fresh

Cache-Control:min-fresh=60(單位秒)

要求緩存服務(wù)器返回至少還未過指定時間的緩存資源

max-stale

Cache-Control: max-stale=3600(單位秒)

指示緩存資源即使過期也照常接收。

如果指令未指定參數(shù)值,那么無論經(jīng)歷多久,客戶端都會接收響應(yīng),如果指令中指定了具體的數(shù)值,那么即使過期,只要礽處于mas-stale指定的時間內(nèi),仍舊會被客戶端接收。

only-if-cached

客戶端僅在緩存服務(wù)器本地緩存目標(biāo)資源的情況下才會要求其返回。該指令要求緩存服務(wù)器不重新加載響應(yīng)。也不會再次確認(rèn)資源的有效性。若發(fā)生請求緩存服務(wù)器的本地緩存無響應(yīng),返回狀態(tài)碼504

must-revalidate

代理會向源服務(wù)器再次驗證即將返回的響應(yīng)緩存目前是否仍然有效。若代理無法聯(lián)通源服務(wù)器再次獲取有效數(shù)據(jù)的話,緩存必須給客戶端一條504狀態(tài)碼,另外,他會忽略max-stale指令。

proxy-revalidate

要求所有的緩存服務(wù)器在接收到客戶端帶有該指令的請求返回響應(yīng)之前必須再次驗證緩存的有效性

no-transform

規(guī)定無亂是在請求還是響應(yīng)中,緩存都不能改變實(shí)體主體的媒體類型。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容