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ù)器提供報文主體大小、所使用的

語言、認(rèn)證信息等內(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ù)器請求中提出的資

源有效性進行確認(rèn),且禁止其對響應(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)的任一部分。

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

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ù)器將不對資源

的有效性再作確認(rèn),而 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),也不會再次確認(rèn)資源有效性。若發(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 版本的默認(rèn)連接都是持久連接。為此,客戶端會在持

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

Connection 首部字段的值為 Close。

Connection: Keep-Alive

? ? ? ?HTTP/1.1 之前的 HTTP 版本的默認(rèn)連接都是非持久連接。為

此,如果想在舊版本的 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)準(zhǔn)庫內(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ā)送的請求中??蛻?/p>

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

所有的中間服務(wù)器如果都能以 HTTP/1.1 為基準(zhǔn),那直接采用 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í)行壓縮或不會變化的默認(rèn)編碼格式

采用權(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ù)器,用戶代理的認(rèn)證信息(證

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

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ù)器使用用戶代理的用戶的電子郵件地

址。通常,其使用目的就是為了顯示搜索引擎等用戶代理的負(fù)責(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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