「 圖解HTTP 」 讀書筆記 第六章 下

4. 請求首部字段

請求首部字段是從客戶端往服務器端發(fā)送請求報文中所使用的字段,用于補充請求的附加信息承绸、客戶端信息枯怖、對響應內(nèi)容相關的優(yōu)先級等內(nèi)容

請求首部字段.png
4.1 Accept
Accept.png
Accept: text/html,application/xhtml+xml,application/xml;q=0.9

Accept 首部字段可通知服務器蜕琴,用戶代理能夠處理的媒體類型及媒體類型的相對優(yōu)先級萍桌。可使用 type/subtype 這種形式奸绷,一次指定多種媒體類型

媒體類型示例

  • 文本文件

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

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

  • 圖片文件

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

  • 視頻文件

    video/mpeg,video/quicktime...

  • 應用程序使用的二進制文件

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

當服務器提供多種內(nèi)容時梗夸,將會首先返回權重值最高的媒體類型

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

Accept-Charset 首部字段可用來通知服務器用戶代理支持的字符集及字符集的相對優(yōu)先順序

可一次指定多種字符集,與首部字段 Accept 相同的可用權重 q 值來表示相對優(yōu)先級

該首部字段用于內(nèi)容協(xié)商機制的服務器驅(qū)動協(xié)商

4.3 Accept-Encoding
Accept-Encoding.png
Accept-Encoding: gzip, deflate

Accept-Encoding 首部字段用來告知服務器用戶代理支持的內(nèi)容編碼及內(nèi)容編碼的優(yōu)先級順序号醉》粗ⅲ可一次行指定多種內(nèi)容編碼

內(nèi)容編碼示例:

  • gzip

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

  • compress

    由 UNIX 文件壓縮程序 compress 生成的編碼格式

  • deflate

    組合使用 zlib 格式及由 deflate 壓縮算法生成的編碼格式

  • identity

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

采用權重 q 值來表示相對優(yōu)先級,也可使用星號 (*)作為通配符畔派,指定任意的編碼格式

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

首部字段 Accept-Language 用來告知服務器用戶代理能夠處理的自然語言集(指中文或英文等)铅碍,以及自然語言集的相對優(yōu)先級,可一次指定多種語言集

4.5 Authorization
Authorization.png
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==

首部字段 Authorization 是用來告知服務器线椰,用戶代理的認證信息

4.5 Expect
Expect.png
Expect: 100-continue

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

4.7 Form
Form.png

首部字段 Form 用來告知服務器,使用用戶代理的用戶的電子郵件地址憨愉。通常其使用目的就是為了顯示搜索引擎等用戶的代理的負責人的電子郵件聯(lián)系方式

4.8 Host
Host.png
Host: www.hackr.jp

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

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

4.9 If-Match
If-Match.png

形如 If-xxx 這種形式的請求首部字段,都可稱為條件請求配紫。服務器接受到附帶條件的請求后径密,只有判斷附帶條件為真時,才會執(zhí)行請求

示例:

If-Match-ETag.png

首部字段 If-Match 屬附帶條件之一躺孝,它會告知服務器匹配資源所用的的實體標記(ETag)值

服務器會對比 If-Match 的字段值和資源的 ETag 值享扔,僅當兩者一只時底桂,才會執(zhí)行請求。反之惧眠,則返回狀態(tài)碼 412 Precondition Failed 的響應

4.10 If-Modified-Since
If-Modified-Since.png
If-Modified-Since: Thu, 15 Apr 2004 00:00:00 GMT

首部字段 If-Modified-Since 屬附帶條件之一籽懦,它會告知服務器若 If-Modified-Since 字段值早于資源的更新時間,則希望能處理該請求

If-Modified-Since 用于確認代理或客戶端擁有的本地資源的有效性

4.11 If-None-Match
If-None-Match.png

首部字段 If-None-Match 屬于附帶條件之一氛魁,用于指定 If-None-Match 字段值的實體標記(ETag)值與請求資源 的 ETag 不一致時暮顺,它就會告知服務器處理該請求。和首部字段 If-Match 作用相反

在 GET 或 HEAD 方法中使用首部字段 If-None-Match 可獲取最新的資源

4.12 If-Range
If-Range.png

首部字段 If-Range 屬于附帶條件之一呆盖,它告知服務器若指定的 If-Range 字段值(ETag 值或時間)和請求資源的 ETag 值或時間一致時拖云,則作為范圍請求處理。反之应又,返回全體資源

4.13 If-Unmodified-Since
If-Unmodified-Since: Thu, 03 Jul 2012 00:00:00 GMT

首部字段 If-Unmodified-Since 和首部字段 If-Modified-Since 的作用相反,它的作用是告訴服務器乏苦,指定的請求資源只有在字段值內(nèi)指定的日期時間之后株扛,未發(fā)生更新的情況下,才能處理請求

4.14 Max-Forwards
Max-Forwards.png
Max-Forwards: 10

通過 TRANCE 方法或 OPTIONS 方法汇荐,發(fā)送包含首部字段 MAx-Forwards 的請求時洞就,該字段以十進制整數(shù)形式指定可經(jīng)過的服務器最大數(shù)目。服務器在往下一個服務器請求轉發(fā)之前掀淘,Max-Forwards 的值減 1 后重新賦值旬蟋,當服務器接受到 Max-Forwards 的值為 0 的請求時,則不再進行轉發(fā)革娄,而是直接返回響應

4.15 Proxy-Authorization
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5

接受從代理服務器發(fā)來的認證質(zhì)詢時倾贰,客戶端會發(fā)送包含首部字段 Proxy-Authorization 的請求,以告知服務器認證所需的信息

4.16 Range
Range: bytes=5001-10000

對于只需要獲取部分資源的范圍請求拦惋,包含首部字段 Range 即可告知服務器資源的指定范圍

接受到附帶 Range 首部字段請求的服務器匆浙,會在處理請求之后返回狀態(tài)碼為 206 Partial Content 的響應。無法處理該范圍請求時厕妖,則會返回狀態(tài)碼 200 OK的響應和全部資源

4.17 Referer
Referer.png
Referer: http://www.hackr.jp/index.htm

首部字段 Referer 會告知服務器請求的原始資源的 URI

4.18 TE
TE: gzip, deflate;q=0.5

首部字段 TE 會告知服務器客戶端能夠處理響應的傳輸編碼方式及相對優(yōu)先級首尼。和首部字段 Accept-Encoding 的功能很像,但是用于傳輸編碼

4.19 User-Agent
User-Agent.png
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/201001

首部字段 User-Agent 會將創(chuàng)建請求的瀏覽器好用戶代理等信息傳達給服務器

5. 響應首部字段

響應首部字段是由服務器端項客戶端返回響應報文中所使用的字段言秸,用于補充響應的附加信息软能、服務信息,以及對客戶端的附加要求等信息

5.1 Accept-Ranges
Accept-Ranges.png

首部字段 Accept-Ranges 用來告知客戶端举畸,服務器能否處理范圍請求查排,以指定獲取服務器端某個部分的資源

可指定的字段值有兩種,可處理范圍請求時指定其為 bytes俱恶,反之則指定其為 none

5.2 Age
Age.png
Age: 600

首部字段 Age 能告知客戶端雹嗦,源服務器在多久前創(chuàng)建了響應范舀,字段值的單位為秒

若創(chuàng)建該響應的服務器是緩存服務器,Age 值是指緩存后的響應再次發(fā)起認證到認證完成的時間值了罪。代理創(chuàng)建響應時必須加上首部字段 Age

5.3 ETag
ETag.png
ETag: "82e22293907ce725faf67773957acd12"

首部字段 ETag 能告知客戶端實體標識锭环。它是一種可以將資源以字符串形式做唯一性標識的方式。服務器會為每份資源分配對應的 ETag 值

當資源更新時泊藕,ETag 值也需要更新辅辩。生成 ETag 值時,并沒有統(tǒng)一的算法規(guī)則娃圆,而僅僅是由服務器來分配

ETag 值有強 ETag 值 和 弱 ETag 值之分

強 ETag 值

ETag: "usagi-1234"

強 ETag 值玫锋,不論實體發(fā)生多么細微的變化都會改變其值

弱 ETag 值

ETag: W/"usagi-1234"

弱 ETag 值只用于提示資源是否相同。只有資源發(fā)生了根本改變讼呢,產(chǎn)生差異時才會改變 ETag 值撩鹿。這時,會在字段值最開始處附加 W/

5.4 Location
Location.png
Location: http://www.usagidesign.jp/sample.html

使用首部字段 Location 可以將響應接收方引導至某個與請求 URI 位置不同的資源

幾乎所有的瀏覽器在接受到包含首部字段 Location 的響應后悦屏,都會強制性的嘗試對已提示的重定向資源的訪問

5.5 Proxy-Authenticate
Proxy-Authenticate: Basic realm="Usagidesign Auth"

首部字段 Proxy-Authenticate 會把由代理服務器所要求的認證信息發(fā)送給客戶端

5.6 Retry-After
Retry-After.png
Retry-After: 120

首部字段 Retry-After 告知客戶端應該在多久之后再次發(fā)送請求

5.7 Server
Server.png
Server: Apache/2.2.17 (Unix)

首部字段 Server 告知客戶端當前服務器上安裝的 HTTP 服務器應用程序的信息节沦。

5.8 Vary
Vary.png
Vary: Accept-Language

首部字段 Var 可對緩存進行控制,源服務器會向代理服務器傳達關于本地緩存使用方法的命令

5.9 WWW-Authenticate
WWW-Authenticate: Basic realm="Usagidesign Auth"

首部字段 WWW-Authenticate 用于 HTTP 訪問認證础爬,它會告知客戶端適用于訪問請求 URI 所指定資源的認證方案和帶參數(shù)提示的質(zhì)詢

6. 實體首部字段

實體首部字段是包含在請求報文和響應報文中的實體部分所使用的首部甫贯,用于補充內(nèi)容的更新時間等與實體相關的信息

實體首部字段.png
6.1 Allow
Allow.png
Allow: GET,HEAD

首部字段 Allow 用于通知客戶端能夠支持 Request-URI 指定資源的所有 HTTP 方法

當服務器接受到不支持的 HTTP 方法時,會以狀態(tài)碼 405 Method Not Allowed 作為響應返回看蚜,還會把所有能支持 HTTP 方法寫入首部字段 Allow 后返回

6.2 Content-Encoding
Content-Encoding.png
Content-Encoding: gzip

首部字段 Content-Encoding 會告知客戶端叫搁,服務器對實體的主體部分選用的內(nèi)容編碼方式

內(nèi)容編碼是指在不丟失實體信息的前提下所進行的壓縮

主要采用以下 4 種內(nèi)容編碼方式

  • gzip

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

  • compress

    由 UNIX 文件壓縮程序 compress 生成的編碼格式

  • deflate

    組合使用 zlib 格式及由 deflate 壓縮算法生成的編碼格式

  • identity

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

6.3 Content-Language
Content-Language.png
Content-Language: zh-CN

首部字段 Content-Language 會告知客戶端,實體主體使用的自然語言

6.4 Content-Length
Content-Length.png
Content-Length: 15000

首部字段 Content-Length 表明了實體主體部分的大泄┭住(單位:字節(jié))

對實體主體進行內(nèi)容編碼傳輸時渴逻,不能再使用 Content-Length 首部字段

6.5 Content-Location
Content-Location: http://www.hackr.jp/index-ja.html

首部字段 Content-Location 給出與報文主體部分相對應的 URI,Content-Location 表示的是報文主體返回資源對應的 URI

6.6 Content-MD5
Content-MD5.png
Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==

首部字段 Content-MD5 是一串由 MD5 算法生成的值碱茁,其目的在于檢查報文主體再傳輸過程中是否保持完整裸卫,以及確認傳輸?shù)竭_

6.7 Content-Range
Content-Range.png
Content-Range: bytes 5001-10000/10000

針對范圍請求,返回響應時使用的首部字段 Content-Range纽竣,能告知客戶端作為響應返回的實體的哪個部分符合范圍請求墓贿。字段值以字節(jié)為單位,表示當前發(fā)送部分及整個實體大小

6.8 Content-Type
Content-Type: text/html; charset=UTF-8

首部字段 Content-Type 說明了實體主體內(nèi)對象的媒體類型蜓氨,和首部字段 Accept 一樣聋袋,字段值用 type/subtype 形式賦值

6.9 Expires
Expires.png
Expires: Wed, 04 Jul 2012 08:26:05 GMT

首部字段 Expires 會將資源失效的日期告知客戶端

6.10 Last-Modified
Last-Modified.png
Last-Modified: Wed, 23 May 2012 09:59:55 GMT

首部字段 Last-Modified 指明資源最終修改的時間

7. 為 Cookie 服務的首部字段

Cookie 的工作機制是用戶識別及狀態(tài)管理

為 Cookie 服務的首部字段如下:

首部字段名 說明 類型
Set-Cookie 開始狀態(tài)管理所使用的 Cookie 信息 響應首部字段
Cookie 服務器接受到的 Cookie 信息 請求首部字段
Cookie 首部字段.png
7.1 SetCookie
Set-Cookie: status=enable; expires=Tue, 05 Jul 2011 07:26:31 GMT; 

當服務器準備開始管理客戶端的狀態(tài)時,會事先告知各種信息

Set-Cookie 字段的屬性如下:

屬性 說明
NAME = VALUE 賦予 Cookie 的名稱和值(必須項)
expires = DATE Cookie 的有效期
path = PATH 將服務器上的文件目錄作為 Cookie 的適用對象
domain = 域名 作為 Cookie 適用對象的域名
Secure 僅在 HTTPS 通信時才會發(fā)送 Cookie
HttpOnly 加以限制穴吹,使 Cookie 不能被 JavaScrip 腳本訪問
  • expires 屬性

    Cookie 的 expires 屬性指定瀏覽器可發(fā)送 Cookie 的有效期

    當省略 expires 屬性時幽勒,其有效期限僅限于維持瀏覽器會話(Session 時間段內(nèi))

  • path 屬性

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

  • domain 屬性

    通過 Cookie 的 domain 屬性指定的域名可做到與結尾匹配一致

  • Secure 屬性

    Cookie 的 secure 屬性用于限制 Web 頁面僅在 HTTPS 安全連接時,才可以發(fā)送 Cookie

    發(fā)送 Cookie 時港令,指定 secure 屬性的方法如下所示

    Set-Cookie: name=value; secure
    

    上述例子僅當在 https://www.example.com 安全連接的情況下才會進行 Cookie 的回收

    當省略 secure 屬性時啥容,不論是 HTTP 還是 HTTPS 都會對 Cookie 進行回收

  • HttpOnly 屬性

    Cookie 的 HttpOnly 屬性是 Cookie 的擴展功能锈颗,它使 JavaScript 腳本無法獲得 Cookie。其主要目的是為防止跨站腳本攻擊對 Cookie 的信息竊取

    發(fā)送指定 HttpOnly 屬性的 Cookie 方法如下所示

    Set-Cookie: name=value; HttpOnly
    
7.2 Cookie
Cookie: status=enable

首部字段 Cookie 會告知服務器咪惠,當客戶端想獲得 HTTP 狀態(tài)管理支持時击吱,就會在請求中包含從服務器接受到的 Cookie

接受到多個 Cookie 時,同樣也可以以多個 Cookie 形式發(fā)送

8. 其他首部字段

HTTP 首部字段是可以自行擴展的遥昧,所以在 Web 服務器和瀏覽器的應用上覆醇,會出現(xiàn)各種非標準的首部字段

最常用的首部字段如下:

  • X-Frame-Options

  • X-XSS-Protection

  • DNT

  • P3P

8.1 X-Frame-Options
X-Frame-Options: DENY

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

首部字段 X-Frame-Options 有以下兩個可指定的字段值

  • DENY 拒絕

  • SAMEORIGIN 僅同域名下的頁面匹配時許可

8.2 X-XXS-Protection
X-XSS-Protection: 1

首部字段 X-XXS-Protection 屬于 HTTP 響應首部永脓,它是針對跨站腳本攻擊的一種對策,用于控制瀏覽器 XSS 防護機制的開關

首部字段 X-XXS-Protection 可指定的字段值如下:

  • 0 將 XXS 過濾設置成無效狀態(tài)

  • 1 將 XXS 過濾設置成有效狀態(tài)

8.3 DNT
DNT.png
DNT: 1

首部字段 DNT 屬于 HTTP 請求首部鞋仍,其中 DNT 是 Do Not Track 的簡稱常摧,意為拒絕個人信息被收集,是表示拒絕被精準廣告追蹤的一種方法

首部字段 DNT 可指定的字段值如下:

  • 0 同意被追蹤

  • 1 拒絕被追蹤

由于首部字段 DNT 的功能具備有效性凿试,所有 Web 服務器需要對 DNT 做對應的支持

8.4 P3P
P3P: CP="CAO DSP LAW CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa 

首部字段 P3P 屬于 HTTP 響應首部排宰,通過利用 P3P (The Platform for
Privacy Preferences,在線隱私偏好平臺)技術,可以讓 Web 網(wǎng)站上的個人隱私變成一種僅供程序可理解的形式那婉,,以達到保護用戶隱私的目的

要進行 P3P 的設定党瓮,需要按照以下步驟進行

  1. 創(chuàng)建 P3P 隱私

  2. 創(chuàng)建 P3P 隱私對照文件后详炬,保存命名在 /w3c/p3p.xml

  3. 從 P3P 隱私中新建 Compact policies 后,輸出到 HTTP 響應中

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寞奸,一起剝皮案震驚了整個濱河市呛谜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枪萄,老刑警劉巖隐岛,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓷翻,居然都是意外死亡聚凹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門齐帚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妒牙,“玉大人,你說我怎么就攤上這事对妄∠娼瘢” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵剪菱,是天一觀的道長摩瞎。 經(jīng)常有香客問我拴签,道長,這世上最難降的妖魔是什么旗们? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任蚓哩,我火速辦了婚禮,結果婚禮上蚪拦,老公的妹妹穿的比我還像新娘杖剪。我一直安慰自己,他們只是感情好驰贷,可當我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布盛嘿。 她就那樣靜靜地躺著,像睡著了一般括袒。 火紅的嫁衣襯著肌膚如雪次兆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天锹锰,我揣著相機與錄音芥炭,去河邊找鬼。 笑死恃慧,一個胖子當著我的面吹牛园蝠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痢士,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼彪薛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怠蹂?” 一聲冷哼從身側響起善延,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎城侧,沒想到半個月后易遣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嫌佑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年豆茫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歧强。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡澜薄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出摊册,到底是詐尸還是另有隱情肤京,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站忘分,受9級特大地震影響棋枕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妒峦,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一重斑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肯骇,春花似錦窥浪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胚鸯,卻和暖如春骨稿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姜钳。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工坦冠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哥桥。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓辙浑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拟糕。 傳聞我的和親對象是個殘疾皇子例衍,可洞房花燭夜當晚...
    茶點故事閱讀 43,566評論 2 349

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