第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

HTTP 通用首部字段

Http 協(xié)議除了我們的請(qǐng)求和響應(yīng)參數(shù),還包含了很多首部字段,這些字段使 Http 在滿足基本接口的請(qǐng)求接收參數(shù)之余,還有更多高級(jí)豐富的擴(kuò)展。這些首部字段可以分為3類:通用首部字段 / 請(qǐng)求首部字段 / 響應(yīng)首部字段。本節(jié)我們將學(xué)習(xí)的是通用首部字段。
報(bào)文結(jié)構(gòu)

Http 報(bào)文結(jié)構(gòu)

1. 簡(jiǎn)介

通用的首部字段指的是請(qǐng)求和響應(yīng)的首部都能使用的字段。

請(qǐng)求示例

GET / HTTP/1.1
Host: idcbgp.cn
Connection: keep-alive

請(qǐng)求實(shí)體內(nèi)容

響應(yīng)示例

HTTP/1.1 200 OK
Date: Web 29 Apr 2020 08:08:08 GMT
Connection: keep-alive

響應(yīng)實(shí)體內(nèi)容

示例中請(qǐng)求和響應(yīng)的協(xié)議首部均有 Connection 字段,這類即為公共首部字段。

2. 字段介紹

2.1 Connection

Upgrade

該字段用來(lái)支持以一種協(xié)議建立連接后,想要升級(jí)成更高層的協(xié)議,比如 Http/1.1 想要升級(jí)成 Http/2.0 的協(xié)議,或者說(shuō)要升級(jí)成 Websocket 協(xié)議。

Upgrade:websocket
Connection: Upgrade

如果 Connection 的值是 Upgrade ,通常也需要一個(gè) Upgrade 字段來(lái)標(biāo)明要升級(jí)的協(xié)議,該值可以是多個(gè)的逗號(hào)分隔開(kāi),服務(wù)端會(huì)按照順序查看支持的升級(jí)服務(wù)。

上面客戶端想要升級(jí)成 Websocket 協(xié)議,如果服務(wù)端支持就會(huì)返回一個(gè) 101 Switching Protocols 響應(yīng)狀態(tài)碼,和一個(gè)要切換到的協(xié)議的頭部字段 Upgrade。 如果服務(wù)器沒(méi)有(或者不能)升級(jí)這次連接,它會(huì)忽略客戶端發(fā)送的 Upgrade 頭部字段,返回一個(gè)常規(guī)的響應(yīng)。

Close

Http/1.1 規(guī)定了默認(rèn)保持長(zhǎng)連接(HTTP persistent connection ,也有翻譯為持久連接),數(shù)據(jù)傳輸完成了保持 TCP 連接不斷開(kāi)(不發(fā) RST 包、不四次握手),等待在同域名下繼續(xù)用這個(gè)通道傳輸數(shù)據(jù)。當(dāng)服務(wù)器端想明確斷開(kāi)連接時(shí),則指定 Connection 首部字段的值為 Close。

Connection: close

Keep-Alive

Http/1.1 之前的 HTTP 版本的默認(rèn)連接都是非持久連接。為此, 如果想在舊版本的 HTTP 協(xié)議上維持持續(xù)連接,則需要指定 Connection 首部字段的值為 Keep-Alive。

Connection: Keep-Alive

2.2 Cache-Control

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

請(qǐng)求緩存

  • no-cache:不讀取過(guò)期的資源;
  • no-store:不緩存;
  • max-age = [ 秒]:響應(yīng)的最大 Age 值;
  • max-stale( = [ 秒 ]):接收已過(guò)期的響應(yīng);
  • min-fresh = [ 秒 ]:期望在指定時(shí)間內(nèi)的響應(yīng)仍有效;
  • no-transform:代理不可更改媒體類型;
  • only-if-cached:只讀緩存的資源;
  • cache-extension:可以拓展 Cache-Control 首部字段內(nèi)的指令。

響應(yīng)緩存

  • 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ù)器進(jìn)行確認(rèn);
  • max-age = [ 秒] :響應(yīng)的最大 Age 值;
  • s-maxage = [ 秒]:可以拓展 Cache-Control 首部字段內(nèi)的指令;

2.3 Date

表明協(xié)議的日期,并沒(méi)有什么特殊含義,在這里就不過(guò)多贅述了。

2.4 Trailer

Trailer 是拖車的意思,正常的報(bào)文是 首部字段+回車符+請(qǐng)求體,Trailer 允許在請(qǐng)求體的后面再添加首部信息。Trailer 的值會(huì)先表明請(qǐng)求體后面的首部字段是什么。

HTTP/1.1 200 OK
Trailer: Expires

--報(bào)文--
Expires: May, 1 Sep 2020 23:59:59 GMT

使用場(chǎng)景:首部字段的值是動(dòng)態(tài)生成的,事先無(wú)法知道。如 content-length 請(qǐng)求體的長(zhǎng)度,在分塊傳輸中一開(kāi)始無(wú)法確定內(nèi)容的長(zhǎng)度。還有一些可能是消息的數(shù)字簽名,完整性校驗(yàn)等。

2.5 Transfer-Encoding

可以通過(guò)此頭屬性確定通信內(nèi)容的傳輸方式,如果指定 chunk 表示把大資源分為多個(gè)小塊進(jìn)行傳輸 。
通常情況下靜態(tài)資源等小文件傳輸時(shí)可以指定 Content-Length 告知通信雙方文件大小,而當(dāng)傳輸資源無(wú)法確定大小時(shí)可以指定該屬性進(jìn)行傳輸
通信雙方也無(wú)需知道文件大小,這樣可以節(jié)省內(nèi)存空間。此屬性和 Content-Length 沖突,不能同時(shí)指定。

2.6 Via

每經(jīng)過(guò)一個(gè)代理服務(wù)器就往 head via 字段添加服務(wù)器信息,可以用來(lái)追蹤請(qǐng)求的傳輸路徑。

2.7 Warning

用來(lái)告知客戶端的一些告警信息。

3. 小結(jié)

通用首部字段不多,一般是用來(lái)表示 緩存 / 時(shí)間 / 連接信息等通用內(nèi)容。 其中 ConnectionCache-Control 是很常見(jiàn)的首部?jī)?nèi)容,要清楚的掌握它。