HTTP 首部

HTTP 首部

HTTP 報文首部

HTTP 協(xié)議的請求和響應(yīng)報文中必定包含 HTTP 首部巡验。首部內(nèi)容為客

戶端和服務(wù)器分別處理請求和響應(yīng)提供所需要的信息。對于客戶端用戶來說哼审,這些信息中的大部分內(nèi)容都無須親自查看

報文首部由幾個字段構(gòu)成

HTTP 請求報文

在請求中谐腰,HTTP 報文由方法孕豹、URI、HTTP 版本十气、HTTP 首部字段等

部分構(gòu)成励背。

下面的示例是訪問 http://hackr.jp 時,請求報文的首部信息砸西。

GET / HTTP/1.1

Host: hackr.jp

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*; q=0.8

Accept-Language: ja,en-us;q=0.7,en;q=0.3

Accept-Encoding: gzip, deflate

DNT: 1

Connection: keep-alive

If-Modified-Since: Fri, 31 Aug 2007 02:02:20 GMT

If-None-Match: "45bae1-16a-46d776ac"

Cache-Control: max-age=0

HTTP 響應(yīng)報文

在響應(yīng)中椅野,HTTP 報文由 HTTP 版本、狀態(tài)碼(數(shù)字和原因短語)籍胯、

HTTP 首部字段 3 部分構(gòu)成竟闪。

以下示例是之前請求訪問 http://hackr.jp/ 時,返回的響應(yīng)報文的首部

信息杖狼。

HTTP/1.1 304 Not Modified

Date: Thu, 07 Jun 2012 07:21:36 GMT

Server: Apache

Connection: close

Etag: "45bae1-16a-46d776ac"

在報文眾多的字段當(dāng)中炼蛤,HTTP 首部字段包含的信息最為豐富。首部

字段同時存在于請求和響應(yīng)報文內(nèi)蝶涩,并涵蓋 HTTP 報文相關(guān)的內(nèi)容信

息理朋。

因 HTTP 版本或擴展規(guī)范的變化,首部字段可支持的字段內(nèi)容略有不

同绿聘。本書主要涉及 HTTP/1.1 及常用的首部字段嗽上。

HTTP 首部字段

HTTP 首部字段傳遞重要信息

HTTP 首部字段是構(gòu)成 HTTP 報文的要素之一。在客戶端與服務(wù)器之

間以 HTTP 協(xié)議進行通信的過程中熄攘,無論是請求還是響應(yīng)都會使用首

部字段兽愤,它能起到傳遞額外重要信息的作用。

使用首部字段是為了給瀏覽器和服務(wù)器提供報文主體大小挪圾、所使用的

語言浅萧、認證信息等內(nèi)容。

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

HTTP 首部字段是由首部字段名和字段值構(gòu)成的哲思,中間用冒號“:” 分

隔洼畅。

首部字段名: 字段值

例如,在 HTTP 首部中以 Content-Type 這個字段來表示報文主體的 對

象類型棚赔。

Content-Type: text/html

就以上述示例來看帝簇,首部字段名為 Content-Type,字符串 text/html 是

字段值靠益。

另外丧肴,字段值對應(yīng)單個 HTTP 首部字段可以有多個值,如下所示捆毫。

Keep-Alive: timeout=15, max=100

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

當(dāng) HTTP 報文首部中出現(xiàn)了兩個或兩個以上具有相同首部字段名時

會怎么樣闪湾?這種情況在規(guī)范內(nèi)尚未明確冲甘,根據(jù)瀏覽器內(nèi)部處理邏輯

的不同绩卤,結(jié)果可能并不一致途样。有些瀏覽器會優(yōu)先處理第一次出現(xiàn)的

首部字段,而有些則會優(yōu)先處理最后出現(xiàn)的首部字段濒憋。

4 種 HTTP 首部字段類型

HTTP 首部字段根據(jù)實際用途被分為以下 4 種類型何暇。

通用首部字段(General Header Fields)

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

請求首部字段(Request Header Fields)

從客戶端向服務(wù)器端發(fā)送請求報文時使用的首部凛驮。補充了請求的附加

內(nèi)容裆站、客戶端信息、響應(yīng)內(nèi)容相關(guān)優(yōu)先級等信息黔夭。

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

從服務(wù)器端向客戶端返回響應(yīng)報文時使用的首部宏胯。補充了響應(yīng)的附加

內(nèi)容,也會要求客戶端附加額外的內(nèi)容信息本姥。

實體首部字段(Entity Header Fields)

針對請求報文和響應(yīng)報文的實體部分使用的首部肩袍。補充了資源內(nèi)容更

新時間等與實體有關(guān)的信息。

HTTP/1.1 首部字段一覽

HTTP/1.1 規(guī)范定義了如下 47 種首部字段婚惫。

表 6-2:請求首部字段

非 HTTP/1.1 首部字段

在 HTTP 協(xié)議通信交互中使用到的首部字段氛赐,不限于 RFC2616 中定

義的 47 種首部字段。還有 Cookie先舷、Set-Cookie 和 Content-Disposition

等在其他 RFC 中定義的首部字段艰管,它們的使用頻率也很高。

這些非正式的首部字段統(tǒng)一歸納在 RFC4229 HTTP Header Field

Registrations 中蒋川。

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 首部字段絮姆。

下面列舉了 HTTP/1.1 中的逐跳首部字段。除這 8 個首部字段之外秩霍,

其他所有字段都屬于端到端首部篙悯。

Connection

Keep-Alive

Proxy-Authenticate

Proxy-Authorization

Trailer

TE

Transfer-Encoding

Upgrade

HTTP/1.1 通用首部字段

通用首部字段是指,請求報文和響應(yīng)報文雙方都會使用的首部

Cache-Control

通過指定首部字段 Cache-Control 的指令铃绒,就能操作緩存的工作機

制鸽照。

指令的參數(shù)是可選的,多個指令之間通過“,”分隔颠悬。首部字段 Cache-

Control 的指令可用于請求及響應(yīng)時矮燎。

Cache-Control: private, max-age=0, no-cache

Cache-Control 指令一覽

表示是否能緩存的指令

public 指令

Cache-Control: public

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

private 指令

Cache-Control: private

當(dāng)指定 private 指令后诞外,響應(yīng)只以特定的用戶作為對象澜沟,這與 public

指令的行為相反。

緩存服務(wù)器會對該特定用戶提供資源緩存的服務(wù)峡谊,對于其他用戶發(fā)送過來的請求茫虽,代理服務(wù)器則不會返回緩存。

no-cache 指令

Cache-Control: no-cache

使用 no-cache 指令的目的是為了防止從緩存中返回過期的資源既们。

客戶端發(fā)送的請求中如果包含 no-cache 指令濒析,則表示客戶端將不會接

收緩存過的響應(yīng)。于是啥纸,“中間”的緩存服務(wù)器必須把客戶端請求轉(zhuǎn)發(fā)

給源服務(wù)器悼枢。

如果服務(wù)器返回的響應(yīng)中包含 no-cache 指令,那么緩存服務(wù)器不能對

資源進行緩存脾拆。源服務(wù)器以后也將不再對緩存服務(wù)器請求中提出的資

源有效性進行確認馒索,且禁止其對響應(yīng)資源進行緩存操作。

Cache-Control: no-cache=Location

由服務(wù)器返回的響應(yīng)中名船,若報文首部字段 Cache-Control 中對 no-cache

字段名具體指定參數(shù)值绰上,那么客戶端在接收到這個被指定參數(shù)值的首

部字段對應(yīng)的響應(yīng)報文后,就不能使用緩存渠驼。換言之蜈块,無參數(shù)值的首

部字段可以使用緩存。只能在響應(yīng)指令中指定該參數(shù)迷扇。

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

no-store 指令

Cache-Control: no-store

當(dāng)使用 no-store 指令時百揭,暗示請求(和對應(yīng)的響應(yīng))或響應(yīng)中包含

機密信息。因此蜓席,該指令規(guī)定緩存不能在本地存儲請求或響應(yīng)的任一部分器一。

指定緩存期限和認證的指令

s-maxage 指令

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

s-maxage 指令的功能和 max-age 指令的相同,它們的不同點是 smaxage

指令只適用于供多位用戶使用的公共緩存服務(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ù)器將不對資源

的有效性再作確認黍翎,而 max-age 數(shù)值代表資源保存為緩存的最長時

間面徽。

應(yīng)用 HTTP/1.1 版本的緩存服務(wù)器遇到同時存在 Expires 首部字段的情

況時艳丛,會優(yōu)先處理 max-age 指令,而忽略掉 Expires 首部字段趟紊。而

HTTP/1.0 版本的緩存服務(wù)器的情況卻相反氮双,max-age 指令會被忽略掉

min-fresh 指令

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

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

比如霎匈,當(dāng)指定 min-fresh 為 60 秒后戴差,過了 60 秒的資源都無法作為響

應(yīng)返回了。

max-stale 指令

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

使用 max-stale 可指示緩存資源铛嘱,即使過期也照常接收暖释。

如果指令未指定參數(shù)值,那么無論經(jīng)過多久墨吓,客戶端都會接收響應(yīng)球匕;

如果指令中指定了具體數(shù)值,那么即使過期帖烘,只要仍處于 max-stale

指定的時間內(nèi)亮曹,仍舊會被客戶端接收。

only-if-cached 指令

Cache-Control: only-if-cached

使用 only-if-cached 指令表示客戶端僅在緩存服務(wù)器本地緩存目標(biāo)資

源的情況下才會要求其返回秘症。換言之照卦,該指令要求緩存服務(wù)器不重新

加載響應(yīng),也不會再次確認資源有效性乡摹。若發(fā)生請求緩存服務(wù)器的本

地緩存無響應(yīng)役耕,則返回狀態(tài)碼 504 Gateway Timeout。

must-revalidate 指令

Cache-Control: must-revalidate

使用 must-revalidate 指令聪廉,代理會向源服務(wù)器再次驗證即將返回的響

應(yīng)緩存目前是否仍然有效蹄葱。

若代理無法連通源服務(wù)器再次獲取有效資源的話,緩存必須給客戶端

一條 504(Gateway Timeout)狀態(tài)碼锄列。

另外图云,使用 must-revalidate 指令會忽略請求的 max-stale 指令(即使已

經(jīng)在首部使用了 max-stale,也不會再有效果)邻邮。

proxy-revalidate 指令

Cache-Control: proxy-revalidate

proxy-revalidate 指令要求所有的緩存服務(wù)器在接收到客戶端帶有該指

令的請求返回響應(yīng)之前竣况,必須再次驗證緩存的有效性。

no-transform 指令

Cache-Control: no-transform

使用 no-transform 指令規(guī)定無論是在請求還是響應(yīng)中筒严,緩存都不能改

變實體主體的媒體類型丹泉。這樣做可防止緩存或代理壓縮圖片等類似操作情萤。

Cache-Control 擴展

cache-extension token

Cache-Control: private, community="UCI"

通過 cache-extension 標(biāo)記(token),可以擴展 Cache-Control 首部字

段內(nèi)的指令摹恨。

如上例筋岛,Cache-Control 首部字段本身沒有 community 這個指令。借助

extension tokens 實現(xiàn)了該指令的添加晒哄。如果緩存服務(wù)器不能理解

community 這個新指令睁宰,就會直接忽略。因此寝凌,extension tokens 僅對

能理解它的緩存服務(wù)器來說是有意義的柒傻。

Connection

Connection 首部字段具備如下兩個作用

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

Connection: 不再轉(zhuǎn)發(fā)的首部字段名

在客戶端發(fā)送請求和服務(wù)器返回響應(yīng)內(nèi),使用 Connection 首部字

段较木,可控制不再轉(zhuǎn)發(fā)給代理的首部字段(即 Hop-by-hop 首

部)红符。

管理持久連接

Connection: close

? ? ? ?HTTP/1.1 版本的默認連接都是持久連接。為此伐债,客戶端會在持

久連接上連續(xù)發(fā)送請求预侯。當(dāng)服務(wù)器端想明確斷開連接時,則指定

Connection 首部字段的值為 Close峰锁。

Connection: Keep-Alive

? ? ? ?HTTP/1.1 之前的 HTTP 版本的默認連接都是非持久連接萎馅。為

此,如果想在舊版本的 HTTP 協(xié)議上維持持續(xù)連接祖今,則需要指定

Connection 首部字段的值為 Keep-Alive校坑。


如上圖①所示,客戶端發(fā)送請求給服務(wù)器時千诬,服務(wù)器端會像上圖

②那樣加上首部字段 Keep-Alive 及首部字段 Connection 后返回

響應(yīng)耍目。

Date

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

HTTP/1.1 協(xié)議使用在 RFC1123 中規(guī)定的日期時間的格式徐绑,如下 示

例邪驮。

Date: Tue, 03 Jul 2012 04:40:59 GMT

之前的 HTTP 協(xié)議版本中使用在 RFC850 中定義的格式,如下所示傲茄。

Date: Tue, 03-Jul-12 04:40:59 GMT

除此之外毅访,還有一種格式。它與 C 標(biāo)準庫內(nèi)的 asctime() 函數(shù)的輸出

格式一致盘榨。

Date: Tue Jul 03 04:40:59 2012

Pragma

Pragma 是 HTTP/1.1 之前版本的歷史遺留字段喻粹,僅作為與 HTTP/1.0

的向后兼容而定義。

規(guī)范定義的形式唯一草巡,如下所示守呜。

Pragma: no-cache

該首部字段屬于通用首部字段,但只用在客戶端發(fā)送的請求中〔槠梗客戶

端會要求所有的中間服務(wù)器不返回緩存的資源弥喉。

所有的中間服務(wù)器如果都能以 HTTP/1.1 為基準,那直接采用 Cache-

Control: no-cache 指定緩存的處理方式是最為理想的玛迄。但要整體掌握

全部中間服務(wù)器使用的 HTTP 協(xié)議版本卻是不現(xiàn)實的由境。因此,發(fā)送的

請求會同時含有下面兩個首部字段蓖议。

Cache-Control: no-cache

Pragma: no-cache

Trailer

首部字段 Trailer 會事先說明在報文主體后記錄了哪些首部字段虏杰。該

首部字段可應(yīng)用在 HTTP/1.1 版本分塊傳輸編碼時。

HTTP/1.1 200 OK

Date: Tue, 03 Jul 2012 04:40:56 GMT

Content-Type: text/html

...

Transfer-Encoding: chunked

Trailer: Expires

...(報文主體)...

0

Expires: Tue, 28 Sep 2004 23:59:59 GMT

以上用例中拒担,指定首部字段 Trailer 的值為 Expires嘹屯,在報文主體之后

(分塊長度 0 之后)出現(xiàn)了首部字段 Expires攻询。

Transfer-Encoding

首部字段 Transfer-Encoding 規(guī)定了傳輸報文主體時采用的編碼方式从撼。HTTP/1.1 的傳輸編碼方式僅對分塊傳輸編碼有效

HTTP/1.1 200 OK

Date: Tue, 03 Jul 2012 04:40:56 GMT

Cache-Control: public, max-age=604800

Content-Type: text/javascript; charset=utf-8

Expires: Tue, 10 Jul 2012 04:40:56 GMT

X-Frame-Options: DENY

X-XSS-Protection: 1; mode=block

Content-Encoding: gzip

Transfer-Encoding: chunked

Connection: keep-alive

cf0 ←16進制(10進制為3312)

...3312字節(jié)分塊數(shù)據(jù)...

392 ←16進制(10進制為914)

...914字節(jié)分塊數(shù)據(jù)...

0

以上用例中,正如在首部字段 Transfer-Encoding 中指定的那樣钧栖,有效

使用分塊傳輸編碼低零,且分別被分成 3312 字節(jié)和 914 字節(jié)大小的分塊

數(shù)據(jù)。

Upgrade

首部字段 Upgrade 用于檢測 HTTP 協(xié)議及其他協(xié)議是否可使用更高的

版本進行通信拯杠,其參數(shù)值可以用來指定一個完全不同的通信協(xié)議掏婶。

上圖用例中,首部字段 Upgrade 指定的值為 TLS/1.0潭陪。請注意此處兩

個字段首部字段的對應(yīng)關(guān)系雄妥,Connection 的值被指定為 Upgrade。

Upgrade 首部字段產(chǎn)生作用的 Upgrade 對象僅限于客戶端和鄰接服務(wù)

器之間依溯。因此老厌,使用首部字段 Upgrade 時,還需要額外指定

Connection:Upgrade黎炉。

對于附有首部字段 Upgrade 的請求枝秤,服務(wù)器可用 101 Switching

Protocols 狀態(tài)碼作為響應(yīng)返回。

Via

使用首部字段 Via 是為了追蹤客戶端與服務(wù)器之間的請求和響應(yīng)報文

的傳輸路徑慷嗜。

報文經(jīng)過代理或網(wǎng)關(guān)時淀弹,會先在首部字段 Via 中附加該服務(wù)器的信

息,然后再進行轉(zhuǎn)發(fā)庆械。這個做法和 traceroute 及電子郵件的 Received

首部的工作機制很類似薇溃。

首部字段 Via 不僅用于追蹤報文的轉(zhuǎn)發(fā),還可避免請求回環(huán)的發(fā)生缭乘。所以必須在經(jīng)過代理時附加該首部字段內(nèi)容沐序。

上圖用例中,在經(jīng)過代理服務(wù)器 A 時,Via 首部附加了“1.0

gw.hackr.jp (Squid/3.1)”這樣的字符串值薄啥。行頭的 1.0 是指接收請求的服務(wù)器上應(yīng)用的 HTTP 協(xié)議版本辕羽。接下來經(jīng)過代理服務(wù)器 B 時亦是如

此,在 Via 首部附加服務(wù)器信息垄惧,也可增加 1 個新的 Via 首部寫入服

務(wù)器信息刁愿。

Via 首部是為了追蹤傳輸路徑,所以經(jīng)常會和 TRACE 方法一起使

用到逊。比如铣口,代理服務(wù)器接收到由 TRACE 方法發(fā)送過來的請求(其中

Max-Forwards: 0)時,代理服務(wù)器就不能再轉(zhuǎn)發(fā)該請求了觉壶。這種情況

下脑题,代理服務(wù)器會將自身的信息附加到 Via 首部后,返回該請求的響

應(yīng)铜靶。

Warning

HTTP/1.1 的 Warning 首部是從 HTTP/1.0 的響應(yīng)首部(Retry-After)演

變過來的叔遂。該首部通常會告知用戶一些與緩存相關(guān)的問題的警告。

Warning: 113 gw.hackr.jp:8080 "Heuristic expiration" Tue, 03

Warning 首部的格式如下争剿。最后的日期時間部分可省略已艰。

Warning: [警告碼][警告的主機:端口號]“[警告內(nèi)容]”([日期時間])

HTTP/1.1 中定義了 7 種警告。警告碼對應(yīng)的警告內(nèi)容僅推薦參考蚕苇。

另外哩掺,警告碼具備擴展性,今后有可能追加新的警告碼

請求首部字段

請求首部字段是從客戶端往服務(wù)器端發(fā)送請求報文中所使用的字段涩笤,

用于補充請求的附加信息嚼吞、客戶端信息、對響應(yīng)內(nèi)容相關(guān)的優(yōu)先級等

內(nèi)容蹬碧。

Accept

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

Accept 首部字段可通知服務(wù)器舱禽,用戶代理能夠處理的媒體類型及媒體

類型的相對優(yōu)先級∶誊裕可使用 type/subtype 這種形式呢蔫,一次指定多種媒

體類型。

下面我們試舉幾個媒體類型的例子

文本文件

text/html, text/plain, text/css ...

application/xhtml+xml, application/xml ...

圖片文件

image/jpeg, image/gif, image/png ...

視頻文件

video/mpeg, video/quicktime ...

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

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

比如飒筑,如果瀏覽器不支持 PNG 圖片的顯示片吊,那 Accept 就不指定

image/png羡滑,而指定可處理的 image/gif 和 image/jpeg 等圖片類型丰辣。

Accept-Charset

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

Accept-Charset 首部字段可用來通知服務(wù)器用戶代理支持的字符集及

字符集的相對優(yōu)先順序跨算。另外吠谢,可一次性指定多種字符集。與首部字

段 Accept 相同的是可用權(quán)重 q 值來表示相對優(yōu)先級甥温。

該首部字段應(yīng)用于內(nèi)容協(xié)商機制的服務(wù)器驅(qū)動協(xié)商想虎。

Accept-Encoding

Accept-Encoding: gzip, deflate

Accept-Encoding 首部字段用來告知服務(wù)器用戶代理支持的內(nèi)容編碼及

內(nèi)容編碼的優(yōu)先級順序艇炎。可一次性指定多種內(nèi)容編碼漫萄。

下面試舉出幾個內(nèi)容編碼的例子卷员。

gzip

? ? ? ?由文件壓縮程序 gzip(GNU zip)生成的編碼格式

(RFC1952),采用 Lempel-Ziv 算法(LZ77)及 32 ? ? ? ? ? ? ?位循環(huán)冗余

校驗(Cyclic Redundancy Check腾务,通稱 CRC)毕骡。

compress

由 UNIX 文件壓縮程序 compress 生成的編碼格式,采用 Lempel-

Ziv-Welch 算法(LZW)岩瘦。

deflate

? ? ? ? ? 組合使用 zlib 格式(RFC1950)及由 deflate 壓縮算法

(RFC1951)生成的編碼格式未巫。

identity

? 不執(zhí)行壓縮或不會變化的默認編碼格式

采用權(quán)重 q 值來表示相對優(yōu)先級,這點與首部字段 Accept 相同启昧。另

外叙凡,也可使用星號(*)作為通配符,指定任意的編碼格式密末。

Accept-Language

Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3

首部字段 Accept-Language 用來告知服務(wù)器用戶代理能夠處理的自然

語言集(指中文或英文等)握爷,以及自然語言集的相對優(yōu)先級∷找#可一次

指定多種自然語言集饼拍。

和 Accept 首部字段一樣赡模,按權(quán)重值 q 來表示相對優(yōu)先級田炭。在上述圖

例中,客戶端在服務(wù)器有中文版資源的情況下漓柑,會請求其返回中文版

對應(yīng)的響應(yīng)教硫,沒有中文版時,則請求返回英文版響應(yīng)辆布。

Authorization

Authorization: Basic dWVub3NlbjpwYXNzd29yZA==

首部字段 Authorization 是用來告知服務(wù)器瞬矩,用戶代理的認證信息(證

書值)。通常锋玲,想要通過服務(wù)器認證的用戶代理會在接收到返回的

401 狀態(tài)碼響應(yīng)后景用,把首部字段 Authorization 加入請求中。共用緩存

在接收到含有 Authorization 首部字段的請求時的操作處理會略有差

異惭蹂。

Expect

Expect: 100-continue

客戶端使用首部字段 Expect 來告知服務(wù)器伞插,期望出現(xiàn)的某種特定行

為。因服務(wù)器無法理解客戶端的期望作出回應(yīng)而發(fā)生錯誤時盾碗,會返回

狀態(tài)碼 417 Expectation Failed媚污。

客戶端可以利用該首部字段,寫明所期望的擴展廷雅。雖然 HTTP/1.1 規(guī)

范只定義了 100-continue(狀態(tài)碼 100 Continue 之意)耗美。

等待狀態(tài)碼 100 響應(yīng)的客戶端在發(fā)生請求時京髓,需要指定 Expect:100-

continue。

From

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

址商架。通常堰怨,其使用目的就是為了顯示搜索引擎等用戶代理的負責(zé)人的

電子郵件聯(lián)系方式。使用代理時蛇摸,應(yīng)盡可能包含 From 首部字段(但

可能會因代理不同诚些,將電子郵件地址記錄在 User-Agent 首部字段

內(nèi))。

Host

圖:虛擬主機運行在同一個 IP 上皇型,因此使用首部字段 Host 加以

區(qū)分

Host: www.hackr.jp

首部字段 Host 會告知服務(wù)器诬烹,請求的資源所處的互聯(lián)網(wǎng)主機名和端

口號。Host 首部字段在 HTTP/1.1 規(guī)范內(nèi)是唯一一個必須被包含在請

求內(nèi)的首部字段弃鸦。

首部字段 Host 和以單臺服務(wù)器分配多個域名的虛擬主機的工作機制

有很密切的關(guān)聯(lián)绞吁,這是首部字段 Host 必須存在的意義。

請求被發(fā)送至服務(wù)器時唬格,請求中的主機名會用 IP 地址直接替換解

決家破。但如果這時,相同的 IP 地址下部署運行著多個域名购岗,那么服務(wù)

器就會無法理解究竟是哪個域名對應(yīng)的請求汰聋。因此,就需要使用首部

字段 Host 來明確指出請求的主機名喊积。若服務(wù)器未設(shè)定主機名烹困,那直

接發(fā)送一個空值即可。

If-Match

形如 If-xxx 這種樣式的請求首部字段乾吻,都可稱為條件請求髓梅。服務(wù)器接

收到附帶條件的請求后,只有判斷指定條件為真時绎签,才會執(zhí)行請求枯饿。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市诡必,隨后出現(xiàn)的幾起案子奢方,更是在濱河造成了極大的恐慌,老刑警劉巖爸舒,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蟋字,死亡現(xiàn)場離奇詭異,居然都是意外死亡碳抄,警方通過查閱死者的電腦和手機愉老,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剖效,“玉大人嫉入,你說我怎么就攤上這事焰盗。” “怎么了咒林?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵熬拒,是天一觀的道長。 經(jīng)常有香客問我垫竞,道長澎粟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任欢瞪,我火速辦了婚禮活烙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遣鼓。我一直安慰自己啸盏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布骑祟。 她就那樣靜靜地躺著回懦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪次企。 梳的紋絲不亂的頭發(fā)上怯晕,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音缸棵,去河邊找鬼舟茶。 笑死,一個胖子當(dāng)著我的面吹牛蛉谜,可吹牛的內(nèi)容都是我干的稚晚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼型诚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鸳劳?” 一聲冷哼從身側(cè)響起狰贯,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赏廓,沒想到半個月后涵紊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡幔摸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年摸柄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片既忆。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡驱负,死狀恐怖嗦玖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跃脊,我是刑警寧澤宇挫,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站酪术,受9級特大地震影響器瘪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绘雁,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一橡疼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庐舟,春花似錦衰齐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘟檩,卻和暖如春抹缕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背墨辛。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工卓研, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人睹簇。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓奏赘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親太惠。 傳聞我的和親對象是個殘疾皇子磨淌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容