《圖解HTTP》————第六章——HTTP首部
一、HTTP報文首部
HTTP請求報文,報文首部
- 請求行(方法、URI、HTTP版本)
- 請求首部欄位
- 通用首部欄位
- 實體首部欄位
- 其他
HTTP響應報文,報文首部
- 狀態行(HTTP版本、狀態碼)
- 響應首部欄位
- 通用首部欄位
- 實體首部欄位
- 其他
二.HTTP首部欄位
使用首部欄位是為了給瀏覽器和伺服器提供報文主體大小、所使用的語言、認證資訊等內容
結構——————首部欄位名:欄位值
eg:Content-Type:text/html (Content-Type表示報文主體的物件型別)
四種HTTP首部欄位型別:
HTTP首部欄位一覽
通用首部欄位
首部欄位名 | 說明 |
Cache-Control | 控制快取的行為 |
Connection | 逐跳首部、連結的管理 |
Date | 建立報文的日期時間 |
Pragma | 報文指令 |
Trailer | 報文末端的首部一覽 |
Transfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級為其他協議 |
Via | 代理伺服器的相關資訊 |
Warning | 錯誤通知 |
請求首部欄位
首部欄位名 | 說明 |
Accept | 使用者代理可處理的媒體資訊 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 優先的語言(自然語言) |
Authorization | Web認證資訊 |
Expect | 期待伺服器的特定行為 |
Form | 使用者的電子郵箱地址 |
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 | 實體的位元組範圍請求 |
Referer | 對請求中URI的原始獲取方 |
TE | 傳輸編碼的優先順序 |
User-Agent | HTTP客戶端程式的資訊 |
響應首部欄位
首部欄位名 | 說明 |
Accept-Ranges | 是否接受位元組範圍請求 |
Age | 推算資源建立經過時間 |
ETag | 資源的匹配資訊 |
Location | 令客戶端重新定向至指定URI |
Proxy-Authenticate | 代理伺服器對客戶端的認證資訊 |
Retry-After | 對再次發起請求的時機要求 |
Server | HTTP伺服器的安裝資訊 |
Vary | 代理伺服器快取的管理資訊 |
WWW-Authenticate | 伺服器對客戶端的認證資訊 |
實體首部欄位
首部欄位名 | 說明 |
Allow | 資源可支援的HTTP方法 |
Content-Encoding | 實體主體適用的編碼方式 |
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、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade
三、HTTP/1.1 通用首部欄位
1.Chache-Control:能夠控制快取的行為
- Chache-Control:no-cache 客戶端不接受快取過的資訊,偽雷防止快取中返回國企的資源
- Chache-Control:no-store 不進行快取,按時請求或響應中包含機密資訊
- Chache-Control:max-age=604800(單位:秒) 一定時間內不必再確認快取是否過期
- Chache-Control:min-fresh=60() 要求快取伺服器返回至少還未超過指定時間的快取資源,否則即使有效也不用
- Chache-Control:max-stale=3600()可指示快取資源,過期照收
- Chache-Control:only-if-chached 客戶端盡在快取伺服器本地快取目標的資源情況也才要求返回
- Chache-Control:must-revalidate 代理向元伺服器再次驗證即將返回的響應快取目前是否仍然有效,會忽略max-stale指令
- Chache-Control:proxy-revalidate 返回響應之前再次驗證快取的有效性
- Chache-Control:no-transform 無論在請求還是響應中,快取都不能改變實體主體的媒體型別
2.Connection
作用:1.控制不再轉發給代理的首部欄位
Connection:不再轉發的欄位名
2.管理持久連線
預設持久連線,伺服器想斷開時 Connection:close
請求/響應持久連線 Connectionn:Keep-Alive
3.Date 表明建立HTTP報文的日期和時間
Date: Tue,03 Jul 2012 04:40:59 GMT
4.Pragram
Pragram:no-chache 屬於通用首部欄位,但只用於請求中。客戶端會要求所有的中間伺服器不返回快取的資源,與Chache-Control:no-cache 可一起使用
5.Trailer 事先說明在報文主體後記錄了哪些首部欄位
6.Transfer-Encoding 規定傳輸報文時報文主體用編碼方式
7.Upgrade 用於檢測HTTP協議及其他協議是否可使用更高階的版本進行通訊,其引數值可以指定一個完全不同的通訊協議,使用時,需額外指定 Connection:Upgrade
8.Via 追蹤客戶端與伺服器之間的請求和響應報文的傳輸路徑 可以避免請求迴環的發生,在經過代理時必須附加
各個代理伺服器會往Via首部新增自身伺服器資訊
9.Warning 告知客戶一些於換成相關的問題的警告
四、請求首部欄位
1.Accept 通知伺服器使用者代理能夠處理的媒體型別以及相對優先順序
Accept:text/html,application/xhtml+xml;q=0.9,*/*;q=0.8
q= 表示權重,分號隔開
- 文字檔案:text/html,text/plain,text/css... application/xhtml+xml,application/xml....
- 圖片檔案:image/jpeg,image/jif,image/png...
- 視訊檔案:video/mpeg,video/quicktime...
- 應用程式使用的二進位制檔案:application/octet-stream,application/zip...
2.Accept-Charset 通知伺服器使用者代理支援的字符集以及優先順序
Accept-Charset:iso-8859-5,unicode-1-1;q=0.8
3.Accept-Encoding:告知伺服器使用者代理支援的內容編碼以及優先順序(q=)
內容編碼的例子
- gzip 檔案壓縮程式生產的編碼格式
- compress UNIX檔案壓縮程式生產的
- deflate zlib格式以及deflate壓縮演算法生產的編碼格式
- identity 不執行壓縮或者不會變化的預設編碼格式
4.Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3
5.Authorization 告知伺服器使用者代理的認證資訊
6.Expect 客戶端告知伺服器期望出現的某種特點行為
7.Form:[email protected] 告知伺服器使用使用者代理的電子郵件地址
8.Host 告知伺服器請求的資源所處的網際網路主機名和埠號,必須包含
Host:www.hackr.jp
9.If-Match:"123456" 條件請求 與實體標記(ETag)值相同時,伺服器接收請求
10.If-Modified-Since 告知若欄位值早於更新時間,則希望處理該請求 用於確認代理或客戶端擁有的本地資源的有效性
11.If-None-Match 與ETag值不一致時,處理請求
12.If-Range 與ETag值或時間 一致 處理
13.If-Unmodified-Since 告知若欄位值在指定日期之後,則處理該請求
14.Max-Forwards 伺服器在往下一個伺服器轉發請求之前,將Max-Forwards值-1後重新賦值
15.Proxy-Authorization 告知伺服器認證所需要的資訊
16.Range:bytes=5001-10000 範圍請求
17.Referer:http://www.hackr.jp/index.htm 告知伺服器請求的原始資源的URI
18.TE 告知伺服器客戶端能夠處理響應的傳輸編碼方式以及相對優先順序
19.User-Agent 用於傳達瀏覽器的種類 將建立請求的瀏覽器和使用者名稱等資訊傳送給伺服器
五、響應首部欄位
1.Accept-Ranges告知客戶端伺服器是否能處理範圍請求,一指定獲取伺服器端某個部分的資源
可處理 bytes 反之 none
2.Age:600 告知客戶端,源伺服器在多久之前建立了響應
3.ETag:“13216546” 告知客戶端實體標識 為每份資源分配ETag值
強Etag值,細微變化改變
弱ETag值,根本資源改變才變
4.Location 將響應接收方引導至與某個請求URI位置不同的資源
5.Proxy-Authenticate 把由代理伺服器所要求的認證資訊傳送給客戶端
6.Retry-After:120 告知客戶端應在多久之後再次傳送請求 欄位值可以說具體日期時間,也可以是建立相應後的秒數
7.Server 告知客戶端當前伺服器上安裝的HTTP伺服器應用程式的資訊
8.Vary:Accept-Language 可對快取進行控制。源伺服器會向代理伺服器傳達關於本地快取使用方法的命令
9.WWW-Authenticate 用於HTTP訪問認證
六、實體首部欄位
1.Allow:GET,HEAD 通知客戶端能夠支援指定資源的所以HTTP方法
2.Content-Encoding :gzip 告知客戶端伺服器對實體的主體部分選用的內容編碼方式
3.Content-Language:zh-CN 告知客戶端,實體主體使用的自然語言
4.Content-Length:15000 表明了實體主體部分大小(位元組)
5.Content-Location:HTTP://。。。。。。。 給出與報文主體部分相對應的URI
6.Content-MD5 客戶端會對接受的報文主體執行相同的MD5演算法,然後與首部欄位的Content-MD5的欄位值進行比較
7.Content-Range:bytes 5001-10000/10000 告知客戶端最為響應返回的實體的哪個部分符合範圍請求
8.Content-Type 說明了實體主體內物件的媒體型別
9.Expires 將資源失效日期告知客戶端
10.Last-Modified 指明資源最終修改時間
七、為Cookie服務的首部欄位
Cookie工作機制時使用者識別以及狀態管理
與Cookie有關的首部欄位:
- Set-Cookie 開始狀態管理所使用的Cookie資訊 屬於響應首部欄位
屬性
屬性 | 說明 |
NAME=VALUE | 賦予Cookie的名稱和其值(必須項) |
expires=DATE | Cookie的有效期(預設 瀏覽器關閉前為止) |
path=PATH | 將伺服器上的檔案目錄作為Cookie的適用物件 |
domain=域名 | 作為Cookie適用物件的域名 |
Secure | 僅在HTTPS安全通訊時才會傳送Cookie |
HttpOnly | 加以限制,使Cookie不能被JavaScript指令碼訪問 |
- Cookie
Cookie:status=enable 告知伺服器當客戶端想獲得HTTP狀態管理支援時,就會在請求中包括從伺服器接收到的Cookie
八、其他首部欄位
常用:
- X-Frame-Options 控制網站內容在其他Web網站的Frame標籤內顯示,防止點選劫持攻擊
DENY 拒絕 SAMEORIGIN 僅同源域名下的頁面許可
- X-XSS-Protection 響應首部 針對跨站指令碼攻擊(XSS)的對策
0:將XSS過濾設定成無效狀態
1:....有效狀態
- DNT 請求首部 拒絕被精準廣告追蹤
0:同意被追蹤
1:拒絕被追蹤
- P3P 響應首部 利用P3P(線上隱私偏好平臺)讓Web網站上的個人隱私變成僅供程式理解的形式