HTTP網路協議(三)
HTTP首部欄位有四種類型:通用首部欄位,請求首部欄位,響應首部欄位,實體首部欄位。
通用首部欄位:
首部欄位 | 說明 |
---|---|
Cache-Control | 控制快取的行為 |
Connection | 逐跳首部、連線的管理 |
Date | 建立報文的日期時間 |
Pragma | 報文指令 |
Trailer | 報文末端的首部一覽 |
Transfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級為其他協議 |
Via | 代理伺服器的相關資訊 |
Warning | 錯誤通知 |
請求首部欄位:
首部欄位 | 說明 |
---|---|
Accept | 使用者代理的媒體型別 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 優先的語言 |
Authorization | Web認證資訊 |
Expect | 期待伺服器的特定行為 |
From | 使用者的電子郵件 |
Host | 請求資源所在伺服器 |
if-Match | 比較實體標記(ETag) |
if-Modified-Since | 比較資源的更新時間 |
if-None-Match | 比較實體標記(與if-Match相反) |
if-Range | 資源未更新時傳送實體Byte的範圍請求 |
if-Unmodified-Since | 比較資源的更新時間(與if-Modified-Since想法) |
Max-Forwards | 最大傳輸逐跳 |
Proxy-Authorization | 代理伺服器要求客戶端的認證資訊 |
Range | 實體的位元組範圍請求 |
Refer | 對請求中URI的原始獲取方 |
TE | 傳輸編碼的優先順序 |
User-Agent | HTTP客戶端的資訊 |
響應首部欄位:
首部欄位 | 說明 |
---|---|
Accept-Ranges | 是否接受位元組範圍請求 |
Age | 推算資源建立經過時間 |
ETag | 資源匹配資訊 |
Location | 令客戶端重定向至指定URI |
Proxy-Authenticate | 代理伺服器對客戶端的認證資訊 |
Retry-After | 對再次發起請求的時機要求 |
Server | HTTP伺服器的安裝資訊 |
Vary | 代理伺服器快取的管理資訊 |
WWW-Authenticate | 伺服器對客戶端的認證資訊 |
實體首部欄位:
首部欄位 | 說明 |
---|---|
Allow | 資源可支援的HTTP方法 |
Content-Encod | 實體主體適用的編碼方式 |
Content-Language | 實體主體的自然語言 |
Content-Length | 實體主體的大小 |
Content-Location | 替代對飲資源的URI |
Content-MD5 | 實體主體的報文摘要 |
Content-Range | 實體主體的位置範圍 |
Content-Type | 實體主體的媒體型別 |
Expires | 實體主體過期的日期時間 |
Last-Modified | 資源的最後修改日期時間 |
HTTP首部欄位將定義成快取代理和非快取代理兩種型別:
端到端(End-to-end Header):此類中的首部欄位會轉發給請求/響應對應的最終接受目標,且必須在由快取生成的響應中,另外規定它必須被轉發。
逐跳首部(Hop-by-hop Header):此類中的首部只對單次轉發有效,會因通過快取或代理而不再轉發。如:Connection,Keep-Alive,Upgrade,Proxy-Authenticate,Proxy-Authorization等。
當有多個指令引數時,多個指令之間可通過”,”分隔,例如首部欄位Cache-Control: Cache-Control: private,max-age=0,no-cache
Cache-Control指令一覽:
快取請求指令:
指令 | 引數 | 說明 |
---|---|---|
no-cache | 無 | 強制向源伺服器再次驗證 |
no-store | 無 | 不快取請求或響應的任何內容 |
max-age=[秒] | 必需 | 響應的最大Age值 |
max-stale=[秒] | 可省略 | 接受已過的響應 |
min-fresh=[秒] | 必需 | 期望在指定時間內的響應仍有效 |
no-transform | 無 | 代理不可更改媒體型別 |
only-if-cache | 無 | 從快取獲取資源 |
cache-extension | - | 新指令標記 |
快取響應指令:
指令 | 引數 | 說明 |
---|---|---|
public | 無 | 可向任意方提供響應的快取 |
private | 可省略 | 僅向特定使用者返回響應 |
no-cache | 可省略 | 快取前必須先確認其有效性 |
no-store | 無 | 不快取請求或響應的任何內容 |
no-transform | 無 | 代理不可更改媒體型別 |
msut-revalidate | 無 | 可快取但必須再向源伺服器進行確認 |
proxy-revalidate | 無 | 要求中間快取伺服器對快取的響應有效性再進行確認 |
max-age=[秒] | 必需 | 響應的最大Age值 |
s-maxage=[秒] | 必需 | 公共快取伺服器響應的最大Age值 |
cache-extension | - | 新指令標記[token] |
Connection首部欄位有兩個作用:
- 控制不再轉發給代理的首部欄位,如:
Connection:不再轉發的首部欄位名
. - 管理持久化連線,HTTP/1.1預設是持久連線,如果想斷開連線,可以用
Connection: Close
.
首部欄位Upgrade用於檢測HTTP協議及其他協議是否可使用更高的版本進行通訊,其引數值可以用來指定一個完全不同的通訊協議,不過產生物件僅限於客戶端和鄰接伺服器之間。
首部欄位Warning來告知使用者一些與快取相關的問題的警告,其格式:Warning:[警告碼][警告的主機:埠號][警告內容]([日期時間])。
警告碼:
警告碼 | 警告內容 | 說明 |
---|---|---|
110 | Response is stale(響應已過期) | 代理返回已過期的資源 |
111 | Revalidation failed(再驗證失敗) | 代理再驗證資源有效性時失敗(伺服器無法到達等原因) |
112 | Disconnection operation(斷開連線操作) | 代理與網際網路連線被故意切斷 |
113 | Heuristic expiration(試探性過期) | 響應的使用其超過24小時(有效快取的設定時間大於24小時的情況下) |
199 | Miscellaneous warning(雜項警告) | 任意的警告內容 |
214 | Transformation applied(使用了轉換) | 代理對內容編碼或媒體型別等執行了某些處理時 |
299 | Miscellaneous persistent warning(持久雜項警告) | 任意的警告內容 |
首部欄位Accept可以指定媒體型別以及優先順序,如:Accept: text/html;q=0.9,text/css;q=0.3.
常見幾種媒體型別:
檔案文字:
text/html,text/plain,text/css,application/xhtml+xml,application/xml…
圖片檔案:
image/jpeg,image/gif,image/png…
視訊檔案:
video/mpeg,video/quicktime…
應用程式使用的二進位制檔案:
application/octet-stream,application/zip…
若想要給Accept開頭的首部欄位的引數增加優先順序,可以使用q=來額外表示,用分號(;)進行分隔,權重值q的範圍是0~1,預設權重為1,權重越大就越優先。
If-Match首部欄位它會告知伺服器匹配資源所用的實體標記ETag值,只有兩者一致才會執行請求,而ETag值會隨伺服器資源更新而更新。
If-Modified-Since首部欄位指定的日期時間之後,如果請求的資源有更新則接受請求,沒有則返回304狀態碼。
If-None-Match首部欄位指定的標記值若與請求資源的ETag值不一致時,伺服器就接受請求。
If-Range首部欄位指定的值若是跟ETag值一致時,那麼就根據範圍返回請求資源,否則返回全體請求資源(這相當於指定範圍無效)。
If-Unmodified-Since首部欄位告知請求資源在其欄位指定的值時間之後,為發生更新的情況下,才能處理請求。
Referer首部欄位會告知伺服器請求的原始資源的URI,其實就是從某個網站向伺服器資源請求的URI,比如:你在百度URIwww.baidu.com
點選連結http://blog.csdn.NET/xuguoli_beyondboy
跳轉到這個頁面,那麼Referer首部欄位就是指定這個www.baidu.com
URI。
Age首部欄位告知客戶端,源伺服器在多久前建立了響應,單位為秒,但若建立該響應的伺服器是快取伺服器,Age就是指快取後的響應再次發起認證到認證完成的時間值。
Retry-After首部欄位會告知客戶端應該在多久之後再次傳送請求。
Vary首部欄位:從代理伺服器接收到源伺服器返回包含Vary指定項的響應之後,僅對請求中含有相同Vary指定首部欄位的請求返回快取,否則代理伺服器需先從源伺服器端獲取資源後才能作為響應返回(即使對相同資源發起請求)。
首部欄位WWW-Authenticate用於HTTP訪問認證,它會告知客戶端適用於訪問請求URI所指定資源的認證方案(Basic或Digest)和帶引數提示的質詢。
Content-Loaction首部欄位表示的是報文主體返回資源對應的URI。
Content-MD5首部欄位在於檢查報文主體在傳輸過程中是否保持完整,以及確認傳輸到達,其過程如下:
伺服器對報文主體執行MD5演算法獲得的128位二進位制數,再通過Base64編碼後將結果寫入Content-MD5欄位值,為確保報文的有效性,客戶端對報文主體再執行一次相同的MD5演算法,計算出的值與Content-MD5首部欄位的值相比較,即可判斷出報文主體的準確性。
Expires首部欄位:如果請求還在Expires欄位值指定的時間之前,則會返回快取的該資源,當超過其時間之後,傳送來的請求將會轉向源伺服器請求資源。
Cookie首部欄位:
首部欄位 | 說明 | 首部型別 |
---|---|---|
Set-Cookie | 開始狀態管理所使用的Cookie資訊 | 響應首部欄位 |
Cookie | 伺服器接收到的Cookie資訊 | 請求首部欄位 |
Set-Cookie欄位屬性:
屬性 | 說明 |
---|---|
NAME=VALUE | 賦予Cookie的名稱和值(必需項 ) |
expires=DATE | Cookie的有效期(若不明確指定則預設為瀏覽器關閉前為止) |
path=PATH | 將伺服器上的檔案目錄為Cookie的使用物件(若不指定則預設為文件所在的檔案目錄) |
domain=域名 | 作為Cookie使用物件的域名(若不指定則預設為建立Cookie的伺服器的域名) |
Secure | 僅在HTTPS安全通訊時才會傳送Cookie |
HttpOnly | 加以限制,使Cookie不能被JavaScript指令碼訪問 |
X-Frame-Options首部欄位用於控制網站內容在其他Web網站的Frame標籤內的顯示問題,不過目的主要是為了防止點選劫持攻擊,其兩個屬性:
DENT:拒絕
SAMEORIGN:僅同源域名下的頁面匹配時許可,比如:當指定http:/hackr.jp/sample.html
頁面為SAMEORIGN時,那麼hackr .jp上所有的頁面的frame都被許可載入該頁面,而example.com
等其他域名的頁面就不行了。
X-XSS-Protection首部欄位是針對跨站指令碼攻擊的一種對策,用於控制瀏覽器XSS防護機制的開關,屬性值如下:
0:將XSS過濾設定成無效狀態。
1:將XSS過濾設定成有效狀態。
DNT首部欄位用來拒絕個人資訊被收集,常表示拒絕被精準廣告追蹤的一種方法,屬性值如下:
0:同意被追蹤
1:拒絕被追蹤
P3P首部欄位可用來保護使用者隱私。