HTTP報文格式html
HTTP協議的請求和響應報文中一定包含HTTP首部。首部內容爲客戶端和服務器分別處理請求和響應提供所須要的信息。web
1)HTTP請求報文chrome
在請求中,HTTP報文由方法、URI、HTTP版本、HTTP請首部字段等部分構成緩存
下面的示例是把百度的請求頭部報文拷貝了出來服務器
2)HTTP響應報文app
在響應中,HTTP報文由HTTP版本、狀態碼(數字和緣由短語)、HTTP首部字段3部分構成dom
下面的示例是把百度的響應頭部報文拷貝了出來編碼
在報文衆多的字段當中,HTTP首部字段包含的信息最爲豐富,首部字段同事存在於請求和響應的報文內,並涵蓋HTTP報文相關的內容信息spa
3)HTTP首部字段3d
HTTP首部字段是構成HTTP報文的要素之一。在客戶端與服務器之間以HTTP協議進行通訊的過程當中,無卵是請求仍是響應都會使用首部字段,它能起到傳遞額外重要信息的做用。如報文主體大小、使用的語言、認證信息等。
3.1 首部字段結構
HTTP首部字段由首部字段名和字段值構成,中間用冒號「:」」分割。
例如:以Content-Type字段來表示報文主體的對象類型
首部字段也能夠有多個值
3.2 四種HTTP首部字段類型
HTTP首部字段根據實際用途被分爲如下4種類型,HTTP/1.1貴方定義了47種首部字段。
3.2.1 通用首部字段(General Header Fields)
請求和響應中都會用到的首部。
首部字段名 | 說明 |
Cache-Control | 控制緩存的行爲 |
Connection | 逐條首部、鏈接的管理 |
Date | 建立報文的日期時間 |
Pragma | 報文指令 |
Trailer | 報文末端的首部一覽 |
Transfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級爲其餘協議 |
Via | 代理服務器的相關信息 |
Warning | 錯誤通知 |
3.2.2 請求首部字段(Request Header Fields)
從客戶端向服務器發送請求報文時經常使用的首部。補充了從請求的附加內容、客戶端信息、響應內容相關優先級等信息。
首部字段名 | 說明 |
Accept | 用戶代理可處理的媒體類型 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 優先的語言(天然語言) |
Authorization | Web認證信息 |
Expect | 期待服務器的特定行爲 |
From | 用戶的電子郵箱地址 |
Host | 請求資源所在的服務器 |
If-Match | 比較實體標記(ETag) |
If-Modified-Since | 比較資源的更新時間 |
If-None-Match | 比較實體標記(與If-Match相反) |
If-Unmodified-Since | 資源未更新時發送實體Byte的範圍請求 |
Max-Forwards | 比較資源的更新時間(與If-Modified-Since相反) |
Proxy-Authorization | 最大傳輸逐條數 |
Range | 代理服務器要求客戶端你的認證信息 |
Referer | 實體的字節的範圍請求 |
TE | 對請求中的URI的原始獲取方 |
User-Agent | 傳輸編碼的優先級 |
User-Agent | HTTP客戶端程序的信息 |
3.2.3 響應首部字段(Response Header Fields)
從服務器端向客戶端返回響應報文時使用的首部。補充了響應的附件內容,也會要求客戶端附加額外的內容消息。
首部字段名 | 說明 |
Accept-Ranges | 是否接受字節範圍請求 |
Age | 推算資源建立通過時間 |
ETag | 資源的匹配信息 |
Location | 令客戶端重定向至指定URI |
Proxy-Authenticate | 代理服務器對客戶端的認證信息 |
Retry-After | 對再次發起請求的時機要求 |
Server | HTTP服務器的安裝信息 |
Vary | 代理服務器緩存的管理信息 |
WWW-Authenticate | 服務器對客戶端的認證信息 |
3.2.4 實體首部字段(Entity Header Fields)
針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等於實體有關的信息。
首部字段名 | 說明 |
Allow | 資源可支持的HTTP方法 |
Content-Encoding | 實體主體適用的編碼方式 |
Conten-Language | 實體主體的天然語言 |
Content-Length | 實體主體的大小(單位:字節) |
Content-Location | 替代對應資源的URI |
Content-MD5 | 實體主體的報文摘要 |
Content-Range | 實體主體的位置範圍 |
Content-Type | 實體主體的媒體類型 |
Expires | 實體主體過時的日期時間 |
Last-Modified | 資源的最後修改日期時間 |
3.2.5 非HTTP/1.1首部字段
在HTTP協議通訊交互中使用的首部字段,不限於RFC2616中定義的47種首部字段。還有Cookie、Set-Cookie和Content-Disposition等在其餘RFC中定義的首部字段,它們的使用頻率也很高。
這些非正式的首部字段統一概括在RFC4299HTTP Header Field Registrations中
3.2.6 End-to-end首部 和 Hop-by-hop首部
HTTP首部講定義成緩存代理和非緩存代理的行爲,分爲2種類型。
端到端首部(End to end Header)
分在此類別的首部會轉發給請求/響應對應的最終接受目標,且必須保存在由緩存生成的響應彙總,另外規定它必須被轉發。
逐條首部(Hop-by-hop Header)
分在此類別的首部支隊單次轉發有效,會因經過緩存或代理而不在轉發。
HTTP/1.1和以後版本彙總,若是要使用hop-by-hop首部,需提供Connection首部字段
下面列舉了HTTP/1.1中的逐條首部字段。除這8個首部字段以外,其餘全部字段都屬於端到端首部
Connection |
Keep-Alive |
Proxy-Authenticate |
Proxy-Authorization |
Trailer |
TE |
Transfer-Encoding |
Upgrade |