4. 請求首部字段
請求首部字段是從客戶端往服務器端發(fā)送請求報文中所使用的字段,用于補充請求的附加信息承绸、客戶端信息枯怖、對響應內(nèi)容相關的優(yōu)先級等內(nèi)容
4.1 Accept
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: 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: 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: zh-cn,zh;q=0.7,en-us,en;q=0.3
首部字段 Accept-Language 用來告知服務器用戶代理能夠處理的自然語言集(指中文或英文等)铅碍,以及自然語言集的相對優(yōu)先級,可一次指定多種語言集
4.5 Authorization
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==
首部字段 Authorization 是用來告知服務器线椰,用戶代理的認證信息
4.5 Expect
Expect: 100-continue
客戶端使用首部字段 Expect 來告知服務器胞谈,期望出現(xiàn)的某種特定行為
4.7 Form
首部字段 Form 用來告知服務器,使用用戶代理的用戶的電子郵件地址憨愉。通常其使用目的就是為了顯示搜索引擎等用戶的代理的負責人的電子郵件聯(lián)系方式
4.8 Host
Host: www.hackr.jp
首部字段 Host 會告知服務器烦绳,請求的資源所處的互聯(lián)網(wǎng)主機名和端口號
Host 首部字段在 HTTP/1.1 規(guī)范內(nèi)是唯一一個必須被包含在請求內(nèi)的首部字段
4.9 If-Match
形如 If-xxx 這種形式的請求首部字段,都可稱為條件請求配紫。服務器接受到附帶條件的請求后径密,只有判斷附帶條件為真時,才會執(zhí)行請求
示例:
首部字段 If-Match 屬附帶條件之一躺孝,它會告知服務器匹配資源所用的的實體標記(ETag)值
服務器會對比 If-Match 的字段值和資源的 ETag 值享扔,僅當兩者一只時底桂,才會執(zhí)行請求。反之惧眠,則返回狀態(tài)碼 412 Precondition Failed 的響應
4.10 If-Modified-Since
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 屬于附帶條件之一氛魁,用于指定 If-None-Match 字段值的實體標記(ETag)值與請求資源 的 ETag 不一致時暮顺,它就會告知服務器處理該請求。和首部字段 If-Match 作用相反
在 GET 或 HEAD 方法中使用首部字段 If-None-Match 可獲取最新的資源
4.12 If-Range
首部字段 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: 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: 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: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/201001
首部字段 User-Agent 會將創(chuàng)建請求的瀏覽器好用戶代理等信息傳達給服務器
5. 響應首部字段
響應首部字段是由服務器端項客戶端返回響應報文中所使用的字段言秸,用于補充響應的附加信息软能、服務信息,以及對客戶端的附加要求等信息
5.1 Accept-Ranges
首部字段 Accept-Ranges 用來告知客戶端举畸,服務器能否處理范圍請求查排,以指定獲取服務器端某個部分的資源
可指定的字段值有兩種,可處理范圍請求時指定其為 bytes俱恶,反之則指定其為 none
5.2 Age
Age: 600
首部字段 Age 能告知客戶端雹嗦,源服務器在多久前創(chuàng)建了響應范舀,字段值的單位為秒
若創(chuàng)建該響應的服務器是緩存服務器,Age 值是指緩存后的響應再次發(fā)起認證到認證完成的時間值了罪。代理創(chuàng)建響應時必須加上首部字段 Age
5.3 ETag
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: 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: 120
首部字段 Retry-After 告知客戶端應該在多久之后再次發(fā)送請求
5.7 Server
Server: Apache/2.2.17 (Unix)
首部字段 Server 告知客戶端當前服務器上安裝的 HTTP 服務器應用程序的信息节沦。
5.8 Vary
Vary: Accept-Language
首部字段 Var 可對緩存進行控制,源服務器會向代理服務器傳達關于本地緩存使用方法的命令
5.9 WWW-Authenticate
WWW-Authenticate: Basic realm="Usagidesign Auth"
首部字段 WWW-Authenticate 用于 HTTP 訪問認證础爬,它會告知客戶端適用于訪問請求 URI 所指定資源的認證方案和帶參數(shù)提示的質(zhì)詢
6. 實體首部字段
實體首部字段是包含在請求報文和響應報文中的實體部分所使用的首部甫贯,用于補充內(nèi)容的更新時間等與實體相關的信息
6.1 Allow
Allow: GET,HEAD
首部字段 Allow 用于通知客戶端能夠支持 Request-URI 指定資源的所有 HTTP 方法
當服務器接受到不支持的 HTTP 方法時,會以狀態(tài)碼 405 Method Not Allowed 作為響應返回看蚜,還會把所有能支持 HTTP 方法寫入首部字段 Allow 后返回
6.2 Content-Encoding
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: zh-CN
首部字段 Content-Language 會告知客戶端,實體主體使用的自然語言
6.4 Content-Length
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: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==
首部字段 Content-MD5 是一串由 MD5 算法生成的值碱茁,其目的在于檢查報文主體再傳輸過程中是否保持完整裸卫,以及確認傳輸?shù)竭_
6.7 Content-Range
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: Wed, 04 Jul 2012 08:26:05 GMT
首部字段 Expires 會將資源失效的日期告知客戶端
6.10 Last-Modified
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 信息 | 請求首部字段 |
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: 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 的設定党瓮,需要按照以下步驟進行
創(chuàng)建 P3P 隱私
創(chuàng)建 P3P 隱私對照文件后详炬,保存命名在 /w3c/p3p.xml
從 P3P 隱私中新建 Compact policies 后,輸出到 HTTP 響應中