http首部


作者:李成文;
標(biāo)簽: http首部


HTTP報(bào)文首部

HTTP協(xié)議的請(qǐng)求和響應(yīng)報(bào)文中必定包含HTTP首部。首部內(nèi)容為客戶端和服務(wù)器分別處理請(qǐng)求和響應(yīng)提供所需要的信息。

HTTP請(qǐng)求報(bào)文:在請(qǐng)求中,HTTP報(bào)文由方法磕蒲、URI、HTTP版本只盹、HTTP首部字段等部分構(gòu)成辣往。

HTTP響應(yīng)報(bào)文:在響應(yīng)中,HTTP報(bào)文由HTTP版本殖卑、狀態(tài)碼站削、HTTP首部字段三部分構(gòu)成。

在這些字段中HTTP首部字段所包含的信息是最豐富的孵稽。

HTTP首部字段

HTTP首部字段中的信息

在HTTP通信的過程中许起,無論是請(qǐng)求還是響應(yīng)都會(huì)使用到首部字段十偶,它起到的作用是傳遞額外重要信息。

使用首部字段主要是為了給瀏覽器提供報(bào)文主體大小园细、所使用的語言惦积、認(rèn)證信息等內(nèi)容。

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

HTTP首部字段是由字段名和字段值構(gòu)成的猛频,中間使用分隔狮崩。

例如,在HTTP首部中以Content-Type這個(gè)字段來表示報(bào)文主體的對(duì)象類型:

Content-Type: text/html

另外單個(gè)HTTP首部也可以有多個(gè)值鹿寻,如:

Keep-Alive: timeout=15, max=100

如果HTTP首部字段重復(fù)了睦柴,會(huì)根據(jù)瀏覽器內(nèi)部處理邏輯不同而不同,并沒有明確的規(guī)范毡熏,有些會(huì)優(yōu)先處理第一次出現(xiàn)的首部字段坦敌,有些則會(huì)優(yōu)先處理最后出現(xiàn)的首部字段。

4種HTTP首部字段類型

HTTP首部字段根據(jù)實(shí)際用途被分為4中類型:

  • 通用首部字段

    請(qǐng)求報(bào)文和響應(yīng)報(bào)文兩方都會(huì)使用通用的首部字段

  • 請(qǐng)求首部字段

    從客戶端向服務(wù)器端發(fā)送請(qǐng)求報(bào)文時(shí)使用的首部招刹。補(bǔ)充了請(qǐng)求的附加內(nèi)容、客戶端信息窝趣、響應(yīng)內(nèi)容相關(guān)優(yōu)先級(jí)等信息

  • 響應(yīng)首部字段

    從服務(wù)器向客戶端返回響應(yīng)報(bào)文時(shí)使用的首部疯暑。補(bǔ)充了響應(yīng)的附加內(nèi)容,也會(huì)要求客戶端附加額外的內(nèi)容信息哑舒。

  • 實(shí)體首部字段

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

HTTP/1.1首部字段

HTTP/1.1規(guī)范了下面47種首部字段洗鸵。

通用首部字段:

首部字段名 說明
Cache-Control 控制緩存的行為
Connection 逐跳首部越锈、連接的管理
Date 創(chuàng)建報(bào)文的日期時(shí)間
Pragma 報(bào)文指令
Trailer 報(bào)文末端的首部一覽
Transfer-Encoding 指定報(bào)文主體的傳輸編碼方式
Upgrade 升級(jí)為其他協(xié)議
Via 代理服務(wù)器的相關(guān)信息
Waring 錯(cuò)誤通知

請(qǐng)求首部字段:

首部字段名 說明
Accept 用戶代理可處理的媒體類型
Accept-Charset 優(yōu)先的字符集
Accept-Language 優(yōu)先的語言
Authorization Web認(rèn)證信息
Expect 期待服務(wù)器的特定行為
From 用戶的電子郵箱地址
Host 請(qǐng)求資源所在的服務(wù)器
If-Match 比較實(shí)體標(biāo)記
If-Modified-Since 比較資源的更新時(shí)間
If-None-Match 比較實(shí)體標(biāo)記
If-Range 資源未更新時(shí)發(fā)送實(shí)體Byte的范圍請(qǐng)求
If-Unmodified-Since 比較資源的更新時(shí)間
Max-Forwards 最大傳輸逐跳數(shù)
Proxy-Authorization 代理服務(wù)器要求客戶端的認(rèn)證信息
Range 實(shí)體字節(jié)范圍請(qǐng)求
Referer 對(duì)請(qǐng)求中的URI的原始獲取方
TE 傳輸編碼的優(yōu)先級(jí)
User-Agent HTTP客戶端程序的信息

響應(yīng)首部字段:

首部字段名 說明
Accept-Ranges 是否接受字節(jié)范圍請(qǐng)求
Age 推算資源創(chuàng)建經(jīng)過時(shí)間
ETag 資源的匹配信息
Location 令客戶端重定向至指定的URI
Proxy-Authenticate 代理服務(wù)器對(duì)客戶端的認(rèn)證信息
Retry-After 對(duì)再次發(fā)起請(qǐng)求的時(shí)機(jī)要求
Server HTTP服務(wù)器的安裝信息
Vary 代理服務(wù)器緩存的管理信息
WWW-Authenticate 服務(wù)器對(duì)客戶端的認(rèn)證信息

實(shí)體首部字段:

首部字段名 說明
Allow 資源可支持的HTTP方法
Content-Encoding 實(shí)體主體適用的編碼方式
Content-Language 實(shí)體主體的自然語言
Content-Length 實(shí)體主體的大小
Content-Location 替代對(duì)應(yīng)資源的URI
Content-MD5 實(shí)體主體的報(bào)文摘要
Content-Range 實(shí)體主體的位置范圍
Content-Type 實(shí)體主體的媒體類型
Expires 實(shí)體主體過期的日期時(shí)間
Last-Modified 資源的最后修改日期時(shí)間

非HTTP/1.1首部字段

在HTTP協(xié)議通信交互中使用到的首部字段不限于RFC2616中定義的47中首部字段。還有Cookie膘滨、set-Cookie和Content-Disposition等在其他RFC中定義的首部字段甘凭。

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

HTTP首部字段將定義成緩存代理和非緩存代理的行為,分成兩個(gè)類型

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

分在這個(gè)類別中的首部會(huì)轉(zhuǎn)發(fā)給請(qǐng)求/響應(yīng)對(duì)應(yīng)的最終接受目標(biāo)火邓,且必須保存在由緩存生成的響應(yīng)中丹弱,另外規(guī)定它必須被轉(zhuǎn)發(fā)。

逐跳首部(Hop-by-hop)

分在這個(gè)類別中的首部只對(duì)單次轉(zhuǎn)發(fā)有效铲咨,會(huì)因通過緩存或代理而不再轉(zhuǎn)發(fā)躲胳。HTTP/1.1和之后的版本中,如果要使用hop-by-hop首部纤勒,需要提供Connection首部字段坯苹。

下面列舉HTTP/1.1中逐跳首部字段。除了這8個(gè)首部字段之外摇天,其他的字段都是端到端首部粹湃。

  • Connection
  • Keep-Alive
  • Proxy-Authorization
  • Trailer
  • TE
  • Transfer-Encoding
  • Upgrade

HTTP/1.1通用首部字段

通用首部字段指的是恐仑,請(qǐng)求報(bào)文和響應(yīng)報(bào)文雙方都會(huì)使用的首部。

Cache-Control

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

指令的參數(shù)是可選的,多個(gè)指令之間通過“济赎,”分隔鉴逞,首部字段Cache-Control的指令可以用于請(qǐng)求及響應(yīng)時(shí)。

Cache-Control的指令可以按照請(qǐng)求和響應(yīng)分類司训,如下所示:

緩存請(qǐng)求指令:

指令 參數(shù) 說明
no-cache 強(qiáng)制向源服務(wù)器再次驗(yàn)證
no-store 不緩存請(qǐng)求或響應(yīng)的任何內(nèi)容
max-age=[秒] 必需 響應(yīng)的最大Age值
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 可省略 緩存前必須先確認(rè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)

表示能否緩存的指令

public 指令

Cache-Control: public

當(dāng)使用public指令時(shí)构捡,明確的表明其他用戶也可以利用緩存。

private 指令

Cache-Control: private

當(dāng)指定private指令后壳猜,響應(yīng)只以特定的用戶作為對(duì)象勾徽,和public相反。

緩存服務(wù)器會(huì)對(duì)特定的用戶提供資源緩存服務(wù)统扳,對(duì)于其他用戶發(fā)送過來的請(qǐng)求喘帚,代理服務(wù)器不會(huì)返回緩存。

no-cache 指令

Cache-Control: no-cache

使用no-cache指令的目的是為了防止從緩存中返回過期的資源咒钟〈涤桑客戶端發(fā)送的請(qǐng)求如果包含no-cache指令,那么中間的緩存服務(wù)器必須把客戶端的請(qǐng)求發(fā)送給源服務(wù)器朱嘴。

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

由服務(wù)器返回的響應(yīng)中,若報(bào)文首部字段Cache-Control中對(duì)no-cache字段名具體指定參數(shù)值壤追,那么客戶端在接受到這個(gè)被指定參數(shù)值的首部字段對(duì)應(yīng)的響應(yīng)報(bào)文后磕道,就不能使用緩存,無參數(shù)值的首部字段可以使用緩存行冰。只能在響應(yīng)指令中指定該參數(shù)捅厂。

Cache-Control: no-cache=Location

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

no-store指令

Cache-Control: no-store

使用store指令時(shí),暗示請(qǐng)求或響應(yīng)中包含機(jī)密信息资柔,因此該指令規(guī)定緩存不能在本地存儲(chǔ)請(qǐng)求或響應(yīng)的任一部分焙贷。

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

s-maxage指令

s-maxage指令的功能和max-age指令是一樣的,它們不同點(diǎn)在于s-maxage指令只適用于供多位用戶適用的公共緩存服務(wù)器贿堰。也就是說對(duì)于同一用戶重復(fù)返回響應(yīng)的服務(wù)器來說辙芍,這個(gè)指令沒有作用。

使用了s-maxage指令后,會(huì)直接忽略對(duì)Expires首部字段及max-age指令的處理

max-age指令

當(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í)徘层,緩存服務(wù)器將不對(duì)資源的有效性再作確認(rèn)峻呕,而max-age數(shù)值代表資源保存為緩存的最長時(shí)間。

應(yīng)用HTTP/1.1版本的緩存服務(wù)器遇到同時(shí)存在Expires首部字段的情況時(shí)趣效,會(huì)優(yōu)先處理max-age指令瘦癌,而忽略掉Expires首部字段,而HTTP/1.0版本的緩存服務(wù)器的情況相反跷敬,max-age指令會(huì)被忽略掉讯私。

min-fresh指令

min-fresh指令要求緩存服務(wù)器返回至少還未過指定時(shí)間的緩存資源。當(dāng)指定min-fresh未60秒后西傀,過來60秒的資源都無法作為響應(yīng)返回斤寇。

max-stale 指令

使用max-stale可指示緩存資源,即使過期也能照常接受拥褂。

如果沒有指定具體的參數(shù)值娘锁,那么無論過了多久,客戶端都會(huì)接受響應(yīng)肿仑,如果指令中指定了具體的參數(shù)數(shù)值致盟,那么即使過期了碎税,但是仍處于max-stale指定的時(shí)間內(nèi)尤慰,仍舊會(huì)被客戶端接受。

only-if-cached指令

使用only-if-cached指令表示客戶端僅在緩存服務(wù)器本地緩存目標(biāo)資源的情況下才會(huì)要求其返回雷蹂,該指令要求緩存服務(wù)器不重新加載響應(yīng)伟端,也不會(huì)再次確認(rèn)資源的有效性,如果發(fā)生請(qǐng)求緩存服務(wù)器的本地緩存無響應(yīng)匪煌,則會(huì)返回504 Gateway Timeout

must-revalidate 指令

使用must-revalidate指令责蝠,代理會(huì)向源服務(wù)器再次驗(yàn)證即將返回的響應(yīng)緩存是否任然有效。

如果緩存服務(wù)器無法連接源服務(wù)器再次獲取到有效資源萎庭,緩存必須給客戶端返回504狀態(tài)碼霜医,另外使用must-revalidate指令會(huì)忽略請(qǐng)求的max-stale指令。

proxy-revalidate 指令

proxy-revalidate 指令要求所有的緩存服務(wù)器在接受到客戶端帶有該指令的請(qǐng)求返回響應(yīng)之前驳规,必須再次驗(yàn)證緩存的有效性肴敛。

no-transform 指令

使用no-transform指令規(guī)定無論是在請(qǐng)求中還是在響應(yīng)中,緩存都不能改變實(shí)體主體的媒體類型

Cache-Control擴(kuò)展

cache-extension token

Cache-Control:private,community="UCI"

通過cache-extension標(biāo)記(token),可以擴(kuò)展Cache-Control首部字段內(nèi)的命令医男。如上例砸狞,Cache-Control首部字段并沒有community這個(gè)指令,但是借助extension tokens實(shí)現(xiàn)了這個(gè)指令的添加镀梭。這個(gè)指令只對(duì)能理解它的緩存服務(wù)器有意義刀森,不理解它的緩存服務(wù)器會(huì)直接忽略這個(gè)指令。

Connection

Connection首部字段具有兩個(gè)作用:

  • 控制不再轉(zhuǎn)發(fā)給代理的首部字段

    在客戶端發(fā)送請(qǐng)求和服務(wù)器返回響應(yīng)內(nèi)报账,使用Connection首部字段研底,可以控制不再轉(zhuǎn)發(fā)給代理的首部字段,即Hop-by-hop首部笙什,添加了之后代理服務(wù)器將請(qǐng)求或響應(yīng)轉(zhuǎn)發(fā)給服務(wù)器或客戶端的時(shí)候就會(huì)忽略掉Connection里面的首部字段飘哨。

Connection:不再轉(zhuǎn)發(fā)的首部字段名
  • 管理持久連接
Connection:close

HTTP/1.1版本的默認(rèn)連接都是持久連接,客戶端會(huì)在持久連接上連續(xù)發(fā)送請(qǐng)求琐凭,當(dāng)服務(wù)器端想明確斷開連接時(shí)芽隆,可以指定Connection首部字段的值為close。

Connection: Keep-Alive

HTTP/1.1之前的版本默認(rèn)連接時(shí)非持久連接统屈,如果想在舊版本的HTTP協(xié)議上使用持久連接胚吁,那么可以指定Connection首部字段的值為Keep-Alive。

Date

首部字段Date表明創(chuàng)建HTTP報(bào)文的日期和時(shí)間愁憔。

Pragma

Pragma是HTTP/1.1之前版本的歷史遺留字段腕扶,僅僅作為與HTTP/1.0的向后兼容而定義。

這個(gè)字段屬于通用首部字段吨掌,但是只用在客戶端發(fā)送的請(qǐng)求當(dāng)中半抱,客戶端會(huì)要求所有的中間服務(wù)器不返回緩存資源。

如果所有的中間服務(wù)器都是以HTTP/1.1為基準(zhǔn)膜宋,那么直接使用Cache-Control:no-cache指定緩存的處理即可窿侈,但是有些老的中間服務(wù)器不是以HTTP/1.1,那么如果想要兼容所有的中間服務(wù)器就需要加上Pragma:no-cache

Cache-Control: no-cache
Pragma: no-cache

Trailer

首部字段Trailer會(huì)事先說明在報(bào)文主體后記錄了那些首部字段秋茫,該首部字段可應(yīng)用在HTTP/1.1版本分塊傳輸編碼時(shí)史简。

HTTP/1.1 200 OK
Date: Tue, 03 JUl 2018 09:34:34 GMT
Content-Type: text/html
...
Trailer: Expires
...(報(bào)文主體)...
0
Expires: Tue, 23 sep 2017 23:34:43 GMT

上面的例子,指定首部字段Trailer的值為Expires肛著,在報(bào)文主體之后出現(xiàn)了首部字段Expires圆兵。

Transfer-Encoding

Transfer-Encoding規(guī)定了傳輸報(bào)文主體時(shí)采用的編碼方式。

Upgrade

Upgrade用來檢測(cè)HTTP協(xié)議及其他協(xié)議是否可使用更高版本進(jìn)行通信枢贿,參數(shù)值可以用來指定一個(gè)完全不同的通信協(xié)議

GET /index.html HTTP/1.1
Upgrade: TLS/1.0
Connection: Upgrade

在上面的報(bào)文中殉农,首部字段Upgrade指定的值為TLS/1.0。Connection的值被指定為Upgrade局荚。也就是說Upgrade首部字段產(chǎn)生作用的Upgrade對(duì)象僅限于客戶端和鄰接服務(wù)器之間超凳。所以在使用Upgrade時(shí),還需要指定Connection:Upgrade

對(duì)于附有首部字段Upgrade的請(qǐng)求,服務(wù)器可以使用101 Switching Protocols 狀態(tài)碼作為響應(yīng)返回聪建。

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ā)擎析。

Warning

該首部通常會(huì)告知用戶一些與緩存相關(guān)的問題的警告。

Waring首部的格式如下挥下。最后的日期時(shí)間可以省略揍魂。

Warning:[警告碼][警告主機(jī):端口號(hào)]"[警告內(nèi)容]"([日期時(shí)間])

請(qǐng)求首部字段

請(qǐng)求首部字段是從客戶端往服務(wù)端發(fā)送請(qǐng)求報(bào)文中所使用的字段,用于補(bǔ)充請(qǐng)求的附加信息棚瘟、客戶端信息现斋、對(duì)響應(yīng)內(nèi)容相關(guān)的優(yōu)先級(jí)等內(nèi)容

Accept

Accept字段用來告訴服務(wù)器,用戶代理能夠處理的媒體類型以及媒體類型的相對(duì)優(yōu)先級(jí)偎蘸∽#可以使用type/subtype這種形式,一次指定多種媒體類型迷雪。

Accept:text/html,application/xhtml+xml,application/xml;q=0

下面是幾種常見的媒體類型:

  • 文本文件

text/html,text/plain,text/css...
application/xhtml+xml,application/xml...

  • 圖片文件

image/jpeg, image/gif, image/png

  • 視頻文件

video/mpeg, video/quicktime

  • 應(yīng)用程序使用的二進(jìn)制文件

application/octet-stream,application/zip...

如果瀏覽器不支持PNG圖片的顯示限书,那么Accept就不指定image/png。

如果想要給顯示的媒體類型增加優(yōu)先級(jí)章咧,可以使用q=來額外表示權(quán)重值倦西,用分號(hào)(;)進(jìn)行分隔。權(quán)重q的范圍是0~1赁严,且1是最大值扰柠。不指定權(quán)重q值時(shí),默認(rèn)權(quán)重q=1.0疼约。當(dāng)服務(wù)器可以提供多種內(nèi)容時(shí)卤档,會(huì)首先返回權(quán)重值最高的媒體類型。

Accept-Charset

Accept-Charset首部字段可以用來通知服務(wù)器用戶代理支持的字符集及字符集的相對(duì)優(yōu)先順序忆谓。另外裆装,可一次性指定多種字符集踱承。與首部字段Accept相同的是可以用權(quán)重q值來表示相對(duì)優(yōu)先級(jí)倡缠。

Accept-Charset: iso-8859, unicode-1-1;q=0.8

Accept-Encoding

Accept-Encoding首部字段用來告知服務(wù)器用戶代理支持的內(nèi)容編碼及內(nèi)容編碼的優(yōu)先級(jí)順序,可以使用權(quán)重q值來表示相對(duì)優(yōu)先級(jí)茎活,也可以使用(*)作為通配符昙沦,指定任意的編碼格式。

Accept-Encoding:gzip,deflate

下面是幾種常見的內(nèi)容編碼:

  • gzip
  • compress
  • deflate
  • identity

Accept-Language

用來告訴服務(wù)器用戶代理能夠處理的自然語言集载荔,以及自然語言集的相對(duì)優(yōu)先級(jí)盾饮。可以一次指定多種自然語言集,用q來表示相對(duì)權(quán)重丘损。

Authorization

Authorization是用來告知服務(wù)器普办,用戶代理的認(rèn)證信息。通常想要通過服務(wù)器認(rèn)證的用戶代理會(huì)在接受到返回的401狀態(tài)碼響應(yīng)后徘钥,把首部字段Authorization加入請(qǐng)求中衔蹲。

Expect

客戶端使用功能首部字段Expect來告知服務(wù)器,期望出現(xiàn)的某種特定行為呈础。因?yàn)榉?wù)器無法理解客戶端的期望做出回應(yīng)而發(fā)生錯(cuò)誤時(shí)舆驶,會(huì)返回狀態(tài)碼417 Expectation Failed

客戶端利用該首部字段,寫明所期望的擴(kuò)展而钞。

From

首部字段Form用來告知服務(wù)器使用用戶代理的用戶的電子郵件地址沙廉。

Host

首部字段Host會(huì)告知服務(wù)器,請(qǐng)求的資源所在的互聯(lián)網(wǎng)主機(jī)名和端口號(hào)臼节。當(dāng)請(qǐng)求被發(fā)送至服務(wù)器是撬陵,請(qǐng)求中的主機(jī)名會(huì)用IP地址直接替換,那么如果在相同的IP下面部署了多個(gè)域名网缝,服務(wù)器將會(huì)無法理解究竟是哪個(gè)域名所對(duì)應(yīng)的請(qǐng)求袱结,這種情況下,必須使用Host字段來告訴服務(wù)器請(qǐng)求的主機(jī)名途凫,如果服務(wù)器沒有設(shè)定主機(jī)名垢夹,那么直接發(fā)送一個(gè)空值就可以了。

If-Match

形如If-xxx這種樣式的請(qǐng)求首部字段维费,都可以稱為條件請(qǐng)求果元。服務(wù)器接受到附帶條件的請(qǐng)求后,只有判斷指定條件為真的時(shí)候才會(huì)執(zhí)行請(qǐng)求犀盟。

If-Match: "123456

這里首部字段If-Match而晒,會(huì)告訴服務(wù)器匹配資源所用的實(shí)體標(biāo)記(ETag)值,服務(wù)器會(huì)對(duì)比If-Match的字段值和資源的ETag值阅畴,只有當(dāng)兩者一致的時(shí)候倡怎,才會(huì)執(zhí)行請(qǐng)求。反之贱枣,則會(huì)返回412 Precondition Failed的響應(yīng)监署。

可以使用星號(hào)(*)指定If-Match的字段值,這種情況下纽哥,服務(wù)器會(huì)忽略ETag的值钠乏。

If-Range

If-Range屬于附帶條件之一,它告訴服務(wù)端如果指定的If-Range字段值(ETag值或時(shí)間)和請(qǐng)求資源的ETag值或時(shí)間一直時(shí)春塌,就做范圍請(qǐng)求處理晓避,否則會(huì)返回全體資源簇捍。

如果不是用If-Range發(fā)送送請(qǐng)求的情況是怎么樣的呢?服務(wù)器的資源如果更新了俏拱,那么客戶端持有的一部分資源就會(huì)隨之失效暑塑,那么范圍請(qǐng)求就是無效的,服務(wù)器會(huì)返回412 Precondition Failed的響應(yīng)锅必,告訴客戶端需要再發(fā)一次請(qǐng)求梯投,而使用If-Range則不會(huì)。

Max-Forwards

使用TRACE方法或者OPTIONS方法况毅,發(fā)送包含首部字段Max-Forwards的請(qǐng)求時(shí)分蓖,這個(gè)字段以十進(jìn)制的整數(shù)來指定可以經(jīng)過的服務(wù)器的最大數(shù)目。服務(wù)器在往下一個(gè)服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求之前Max-Forwards的值減一然后會(huì)重新賦值尔许,當(dāng)服務(wù)器收到的Max-Forwards的值為0的時(shí)候請(qǐng)求就不會(huì)再進(jìn)行轉(zhuǎn)發(fā)么鹤,而是直接返回響應(yīng)。

在使用HTTP協(xié)議通信時(shí)味廊,請(qǐng)求可能會(huì)經(jīng)過多個(gè)代理服務(wù)器蒸甜。途中,如果代理服務(wù)器由于某些原因?qū)е抡?qǐng)求轉(zhuǎn)發(fā)失敗余佛,客戶端就接收不到服務(wù)器的響應(yīng)了柠新,而使用Max-Forwards字段,可以針對(duì)這個(gè)問題進(jìn)行排查辉巡,由于Max-Forwards的值為0的時(shí)候恨憎,請(qǐng)求就會(huì)返回,那么我們就可以通過這個(gè)字段來對(duì)請(qǐng)求傳輸?shù)穆窂接兴盐铡?/p>

Proxy-Authorization

接受到代理服務(wù)器發(fā)來的認(rèn)證質(zhì)詢時(shí)郊楣,客戶端會(huì)發(fā)送包含首部字段Proxy-Authorization的請(qǐng)求憔恳,告訴服務(wù)器認(rèn)證所需要的信息。

這個(gè)和客戶端與服務(wù)器之間的HTTP訪問認(rèn)證類似净蚤,不同的地方在于钥组,認(rèn)證行為發(fā)生在客戶端與代理之間。

Range

進(jìn)行范圍請(qǐng)求時(shí)通過這個(gè)字段告訴服務(wù)器請(qǐng)求的范圍今瀑,接受到附帶Range字段的請(qǐng)求的服務(wù)器程梦,會(huì)在處理請(qǐng)求之后返回206 Partial Content 的響應(yīng)。 無法處理該范圍請(qǐng)求的時(shí)候橘荠,就會(huì)返回狀態(tài)碼200 OK 并且將所有的資源全部返回屿附。

Referer

Referer會(huì)告訴服務(wù)器請(qǐng)求的原始資源URI。

TE

TE會(huì)告知服務(wù)器客戶端能夠處理的傳輸編碼方式砾医,以及優(yōu)先級(jí)(使用q來表示優(yōu)先級(jí))拿撩,它和Accept-Encoding的功能很像衣厘,但是用于傳輸編碼如蚜。

User-Agent

User-Agent會(huì)將創(chuàng)建請(qǐng)求的服務(wù)器和用戶代理的名稱等信息傳達(dá)給服務(wù)器压恒。

響應(yīng)首部字段

響應(yīng)首部字段是由服務(wù)器發(fā)送給客戶端的響應(yīng)報(bào)文中所使用的字段。

Accept-Ranges

Accept-Ranges用來告訴客戶端服務(wù)器是否能處理范圍請(qǐng)求错邦,以指定獲取服務(wù)器端某個(gè)部分的資源探赫。可以指定的字段的值有兩種撬呢,可處理范圍請(qǐng)求時(shí)指定為bytes伦吠,否則指定為none。

Age

Age告訴客戶端魂拦,源服務(wù)器在多久前創(chuàng)建了響應(yīng)毛仪,單位是秒。

如果創(chuàng)建響應(yīng)的服務(wù)器是緩存服務(wù)器芯勘,Age的值是指緩存后的響應(yīng)再次發(fā)起認(rèn)證到認(rèn)證完成的時(shí)間值箱靴,代理創(chuàng)建響應(yīng)時(shí)必須加上首部字段Age。

Etag

Etag告訴客戶端實(shí)體標(biāo)記荷愕,它時(shí)一種可以將資源以字符串形式做唯一表示的方式衡怀。服務(wù)器會(huì)為每份資源分配對(duì)應(yīng)的Etag值,當(dāng)資源更新時(shí)安疗,Etag值也需要更新抛杨,生成Etag值時(shí),并沒有統(tǒng)一算法規(guī)則荐类,由服務(wù)器來分配怖现。

資源被緩存時(shí),會(huì)被分配唯一性標(biāo)識(shí)玉罐。如當(dāng)使用中文版瀏覽器訪問goole首頁時(shí)真竖,服務(wù)器返回的是中文的goole首頁,而使用英文版的訪問的時(shí)候就會(huì)返回英文版的首頁厌小。兩者的URI是完全相同的恢共,所以僅僅是憑著URI指定緩存的資源是非常困難的,如果在下載過程中出現(xiàn)連接中斷璧亚、再次連接的情況讨韭,都會(huì)依照ETag值來指定資源。

ETag值分為強(qiáng)ETag值和弱ETag值癣蟋。

強(qiáng)ETag值透硝,不論實(shí)體發(fā)生多么微小的變化都會(huì)改變他的值。

ETag: "usagi-1234"

弱ETag值疯搅,只用于提示資源是否相同濒生。只有資源發(fā)生了根本的改變,產(chǎn)生差異是才會(huì)改變ETag值幔欧,這個(gè)時(shí)候會(huì)在字段開始附加W/罪治。

Location

使用首部字段Location可以將響應(yīng)接受方引導(dǎo)至某個(gè)與請(qǐng)求URI位置不同的資源丽声,一般這個(gè)字段會(huì)配合3XX:Redirection的響應(yīng),提供重定向觉义。

Proxy-Authenticate

Proxy-Authenticate字段會(huì)把由服務(wù)器所要求的認(rèn)證信息發(fā)送給客戶端雁社。

Retry-After

Retry-After告訴客戶端應(yīng)該在多久之后再次發(fā)送請(qǐng)求。主要配合狀態(tài)碼503 Service Unavailable 響應(yīng)晒骇,或3XX Redirect響應(yīng)一起使用霉撵。

字段的值可以是具體的日期時(shí)間,也可以是創(chuàng)建響應(yīng)后的毫秒數(shù)洪囤。

Server

Server告訴客戶端當(dāng)前服務(wù)器上安裝的HTTP服務(wù)器應(yīng)用程序的信息徒坡。

Vary

Vary的作用是對(duì)緩存進(jìn)行控制,源服務(wù)器會(huì)向代理服務(wù)器傳達(dá)關(guān)于本地緩存使用方法的命令瘤缩。

從代理服務(wù)器接受到源服務(wù)器返回包含Vary指定項(xiàng)的響應(yīng)之后崭参,若再要進(jìn)行緩存,僅對(duì)請(qǐng)求中包含相同Vary指定首部字段的請(qǐng)求返回緩存款咖。即使是對(duì)相同資源發(fā)起請(qǐng)求何暮,但是如果Vary指定的首部字段不相同,也必須要從源服務(wù)器重新獲取資源铐殃。

例如:當(dāng)代理服務(wù)器收到帶有Vary首部字段指定獲取資源的請(qǐng)求時(shí)海洼,如果使用的Accept-Language字段的值相同,那么直接從緩存中返回響應(yīng)富腊。反之需要從源服務(wù)器端獲取資源后才能作為響應(yīng)返回坏逢。

WWW-Authenticate

WWW-Authenticate用于HTTP訪問認(rèn)證。它會(huì)告知客戶端適用于訪問請(qǐng)求URI所指定的認(rèn)證方案(Basic和Digest)和帶參數(shù)提示的質(zhì)詢赘被。

實(shí)體首部字段

實(shí)體首部字段是包含在請(qǐng)求報(bào)文和響應(yīng)報(bào)文中的實(shí)體部分所使用的首部是整,用于補(bǔ)充內(nèi)容的更新時(shí)間等于實(shí)體相關(guān)的信息。

Allow

Allow用于通知客戶端能夠支持Request-URI指定資源的所有HTTP方法民假。當(dāng)服務(wù)器接受到不支持HTTP方法時(shí)浮入,會(huì)以405 Not Allowed 作為響應(yīng)返回,并且把所有支持的方法寫入首部字段Allow羊异。

Content-Encoding

Content-Encoding會(huì)告知客戶端服務(wù)器對(duì)實(shí)體的主體部分采用的編碼方式事秀,編碼方式指的是在不丟失實(shí)體信息的前提下所進(jìn)行的壓縮。

Content-Language

Content-Language告知客戶端野舶,實(shí)體主體所采用的自然語言易迹。

Content-Length

Content-Length表明實(shí)體主體部分的大小。對(duì)實(shí)體主體進(jìn)行內(nèi)容編碼傳輸時(shí)平道,不能再使用Content-Length首部字段睹欲。

Content-Location

Content-Location給出報(bào)文主體部分相對(duì)應(yīng)的URI。

Content-MD5

Content-MD5是一串由MD5算法生成的值一屋,用于檢查主體在傳輸過程中是否保存完整窘疮,以及確認(rèn)傳輸?shù)竭_(dá)袋哼。

Content-Range

針對(duì)范圍請(qǐng)求,返回響應(yīng)時(shí)使用的首部字段Content-Range考余,能告知客戶端作為響應(yīng)返回的實(shí)體的那部分符合范圍請(qǐng)求先嬉。字段值以字節(jié)為單位轧苫,表示當(dāng)前發(fā)送部分及整體實(shí)體大小楚堤。

Content-Range:bytes 5001-10000/10000

Content-Type

Content-Type說明了實(shí)體主體內(nèi)對(duì)象的媒體類型。

Expires

Expires會(huì)將資源的失效日期告知客戶端含懊,緩存服務(wù)器在接受到含有首部字段Expires字段值指定的時(shí)間之前身冬,響應(yīng)的副本會(huì)被一直保存,當(dāng)超過指定的時(shí)間之后岔乔,緩存服務(wù)器在請(qǐng)求發(fā)送過來之后會(huì)轉(zhuǎn)向源服務(wù)器請(qǐng)求資源酥筝。

Last-Modified

Last-Modified指明資源最終修改的時(shí)間。

為Cookie服務(wù)的首部字段

Cookie用來管理客戶端和服務(wù)器之間的狀態(tài)雏门,Cookie的工作機(jī)制是用戶識(shí)別及狀態(tài)管理嘿歌。

Set-Cookie

當(dāng)服務(wù)器準(zhǔn)備開始管理客戶端的狀態(tài)時(shí),會(huì)事先告知各種信息茁影,下面介紹一下Set-Cookie字段的屬性值:

expires

expires屬性指定瀏覽器可發(fā)送Cookie的有效期宙帝。當(dāng)省略這個(gè)屬性,有效期限僅限于位置瀏覽器會(huì)話時(shí)間段內(nèi)募闲。

一旦Cookie從服務(wù)器發(fā)送至客戶端步脓,服務(wù)器就不存在可以顯示刪除Cookie的方法,但是可以通過覆蓋已經(jīng)過期的Cookie浩螺,實(shí)現(xiàn)對(duì)客戶端Cookie的實(shí)質(zhì)性刪除靴患。

path

Cookie的path屬性可以用來限制指定的Cookie的發(fā)送范圍的文件目錄。

domain

通過Cookie的domain屬性指定的域名可做到與結(jié)尾匹配一致要出。

secure

Cookie的secure屬性用于限制Web頁面僅在HTTPS安全連接時(shí)鸳君,才可以發(fā)送Cookie。當(dāng)省略secure屬性時(shí)患蹂,不論HTTP還是HTTPS相嵌,都會(huì)對(duì)Cookie進(jìn)行回收。

Set-Cookie:name="value"; secure

HttpOnly

Cookie的HttpOnly屬性時(shí)Cookie的擴(kuò)展功能况脆,它使JavaScript腳本無法獲得Cookie饭宾。主要的目的是為了防止跨站腳本攻擊對(duì)Cookie的信息竊取。

Cookie

首部字段Cookie會(huì)告知服務(wù)器格了,當(dāng)客戶端想獲得HTTP狀態(tài)管理支持時(shí)看铆,就會(huì)在請(qǐng)求中包含從服務(wù)器接受到的Cookie。接受到多個(gè)Cookie時(shí)盛末,同樣可以以多個(gè)Cookie形式發(fā)送弹惦。

其他首部字段

HTTP首部字段是可以自行擴(kuò)展的否淤,下面介紹幾個(gè)最常用的首部字段。

X-Frame-Options

首部字段X-Frame-Options屬于HTTP響應(yīng)首部棠隐,用于控制網(wǎng)站內(nèi)容在其他Web網(wǎng)站的Frame標(biāo)簽內(nèi)的顯示問題石抡。主要目的是為了防止點(diǎn)擊劫持攻擊。

首部字段X-Frame-Options有兩個(gè)可指定的值:

  • DENY:拒絕
  • SAMEORIGIN:僅同源域名下的頁面匹配時(shí)許可助泽。

X-XSS-Protection

X-XSS-Protection屬于HTTP響應(yīng)首部啰扛,它是針對(duì)跨站腳本攻擊(XSS)的一種對(duì)策,用于控制瀏覽器XSS防護(hù)機(jī)制的開關(guān)嗡贺。

字段值如下:

  • 0:將XSS過濾設(shè)置成無效狀態(tài)
  • 1:將XSS過濾設(shè)置成有效狀態(tài)

DNT

屬于HTTP請(qǐng)求首部隐解,DNT是Do Not Track 的簡(jiǎn)稱,意思是拒絕個(gè)人信息被收集诫睬,表示拒絕被精準(zhǔn)廣告追蹤的一種方法煞茫。

字段值如下:

  • 0:同一被追蹤
  • 1:拒絕被追蹤

P3P

屬于HTTP響應(yīng)首部,通過利用P3P技術(shù)摄凡,可以讓W(xué)eb網(wǎng)站上的個(gè)人隱私變成一種僅供程序理解的形式续徽,以達(dá)到保護(hù)用戶隱私的目的。

具體內(nèi)容請(qǐng)參考其他資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亲澡,一起剝皮案震驚了整個(gè)濱河市钦扭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谷扣,老刑警劉巖土全,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異会涎,居然都是意外死亡裹匙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門末秃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來概页,“玉大人,你說我怎么就攤上這事练慕《璩祝” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵铃将,是天一觀的道長项鬼。 經(jīng)常有香客問我,道長劲阎,這世上最難降的妖魔是什么绘盟? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上龄毡,老公的妹妹穿的比我還像新娘吠卷。我一直安慰自己,他們只是感情好沦零,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布祭隔。 她就那樣靜靜地躺著,像睡著了一般路操。 火紅的嫁衣襯著肌膚如雪疾渴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天寻拂,我揣著相機(jī)與錄音程奠,去河邊找鬼丈牢。 笑死祭钉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的己沛。 我是一名探鬼主播慌核,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼申尼!你這毒婦竟也來了垮卓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤师幕,失蹤者是張志新(化名)和其女友劉穎粟按,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霹粥,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灭将,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了后控。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庙曙。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浩淘,靈堂內(nèi)的尸體忽然破棺而出捌朴,到底是詐尸還是另有隱情,我是刑警寧澤张抄,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布砂蔽,位于F島的核電站,受9級(jí)特大地震影響署惯,放射性物質(zhì)發(fā)生泄漏左驾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望什荣。 院中可真熱鬧矾缓,春花似錦、人聲如沸稻爬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桅锄。三九已至琉雳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間友瘤,已是汗流浹背翠肘。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辫秧,地道東北人束倍。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像盟戏,于是被迫代替她去往敵國和親绪妹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354