1. 程式人生 > >HTTP網路協議(三)

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.comURI。 
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首部欄位可用來保護使用者隱私。