報頭
每個報頭都是由 [名稱 + ":" + 空格 + 值 + <CR><LF>] 組成。有四種不一樣類型的報頭:
- 通用報頭:可用於請求,也能夠用於響應,它是做爲一個總體而不是特定的資源與事務相關聯。
- 請求報頭:容許客戶端傳遞關於自身的信息和但願獲得的響應格式。
- 響應報頭:服務端關於傳遞自身信息的響應。
- 實體報頭:定義被傳輸資源的信息,能夠用於請求,也能夠用於響應。
注意,每一個報頭後必須以 <CR><LF> (即 \r\n)結尾,報頭與主體之間以 <CR><CL> 分割。
通用報頭
通用頭包含請求和響應消息都支持的頭域,但不能用於實體報頭。對通用報頭的擴展要求通信雙方都支持此擴展,若存在不支持的通用報頭,通常會做爲實體頭域處理。
Cache-Control:指定請求和響應遵循的緩存機制。
public 指示全部的內容都將被緩存(客戶端和代理服務均可緩存)
private 默認值,指示內容只緩存到私有緩存中(僅客戶端能夠緩存,代理服務器不能緩存)
no-cache 指示請求或響應消息不能緩存。
no-store 指示全部的內容都不會被緩存到緩存或 Internet 臨時文件中。
max-age 指示緩存的內容將在多少秒後失效,僅在 HTTP/1.1 可用,與 Last-Modified 一塊兒使用時,優先級更高。
must-revalidate 若緩存失效,請求必須發生到服務器以進行從新驗證。
Date:表示消息產生的日期和時間。
Pragma:惟一值爲 no-cache,表示服務器必須返回一個刷新後的文檔。其做用等價於 Cache-Control: no-cache 。
在 HTTP/1.0 版本中,只實現了 Pragma: no-cache,而 Cache-Control 是在 HTTP/1.1 引入的。
Connection:容許發送指定鏈接的選項。
keep-alive 客戶端與服務器的鏈接不關閉,後續會再次使用這一條鏈接。
close 表示一個請求完成後,客戶端與服務器斷開鏈接。
Transfer-Encoding:標明報文主體的傳輸編碼方式。
如果請求和響應的頭信息中都要 Transfer-Encoding: chunked , 代表迴應將由數量未定的數據快組成。在每一個非空的數據塊以前,會一個 16 進制的數值,表示這個塊的長度。最後是一個大小爲 0 的塊,表示本次迴應的數據發送完畢。
Upgrade:升級爲其餘協議,容許服務器指定一種新的協議或新的協議版本,與響應編碼 101(切換協議)配合使用。
Via:代理服務器相關信息。
請求報頭
請求報頭容許客戶端向服務端傳輸請求的附加信息以及客戶端自身的信息。在 HTTP/1.1 協議中,全部的請求頭,除 Host 外,都是可選的。
Accept:用於指定客戶端接受哪些類型的信息。
Accept-Charset:用於指定客戶端接受的字符集。
Accept-Encoding:用於指定客戶端可接受的內容編碼。如 gzip、deflate
Accept-Language:用於指定客戶端可接受的天然語言。如 zh-cn、de
Authorization:用於證實客戶端有權限查看某個資源。
Cookie:用於將 Cookie 值發送給服務器。
Host:用於指定被請求資源的主機和端口號。
If-Modified-Since:請求時指定資源的最後修改時間,用於比較資源的更新時間,與 Last-Modified 一塊兒配合 Cache-Control 使用。
當資源過時時(Cache-Control 中 max-age 設置),發現資源有 Last-Modified 聲明,則再次向服務器請求時帶上 If-Modified-Since,表示請求時間。服務器收到請求後發現頭有 If-Modified-Since ,則與被請求的資源進行最後修改時間進行對比。若最後修改時間較新,說明資源又被改動過,則響應整片資源內容(200);若最後修改時間較舊,說明資源沒有修改,會響應 304,告知瀏覽器繼續使用保存的 cache 。
If-None-Match:請求時加上的資源 ETag 值,用於比較實體標識(ETag),與 ETag 一塊兒配合 Cache-Control 使用。
當資源過時時(Cache-Control 中 max-age 設置),發現資源有 ETag 聲明,則再次向服務器請求帶上 If-None-Match (ETag 值)。服務器收到請求後發現頭 If-None-Match,則與被請求資源相應校驗串進行對比,返回 200 或 304 。
Referer:用於指定客戶端是從哪一個資源來訪問服務器的,可用於防盜鏈。
User-Agent:容許客戶端將其操做系統、瀏覽器和其它屬性告訴服務器。
響應報頭
響應報頭容許服務器傳遞不能放在狀態行中的附加信息,以及關於服務器的信息和對 Request-URL 所標識的資源進行下一步訪問的信息。
ETag:緩存相關的頭,可用於實時更新。和 If-None-Match 配合使用。
ETag 主要做用是在文件後面添加一個惟一的參數,該參數由服務器生成,並隨着文件的改變而改變。下次瀏覽器只須要從新獲取 ETag 發送了變化的文件。
Location:用於重定向一個新的位置。該響應狀態碼爲 302(臨時重定向),經常使用於在更換域名時。
Server:與 User-Agent 相對應,包含了服務器用來處理請求的軟件信息。
WWW-Authenticate:包含在 401(爲受權)響應信息中,當客戶端收到 401 響應消息,併發送 Authorization 報頭請求服務器對其進行驗證時,服務器端響應報頭就會包含該消息。
實體報頭
實體報頭定義了關於實體的元信息,實體信息通常由實體報頭和實體組成。
Content-Encoding:指明數據的壓縮方法。發送數據能夠是任何格式,咱們能夠把數據壓縮後再發送
客戶端請求時,Accept-Encoding 指明能夠接受哪些壓縮方法。
Content-Language:描述資源所用的天然語言。
Content-Length:指明響應的實體正文的長度。
對於 HTTP/1.1 引入的持久鏈接機制,一個 TCP 鏈接能夠傳送多個響應,此時要區分數據包是屬於哪個響應的。Content-Length 指明本次響應的數據長度,當到達指定的長度後,後面的字節就屬於下一個響應了。
Content-Type:指明發送給接收者的實體正文的媒體類型(MIME)。
客戶端請求時,Accept 指明能夠接受哪些類型。
Content-Disposition:指明瀏覽器如下載的方式打開數據。
Last-Modified:指明資源最後修改的時間(該文件在服務器端最後修改的時間)。
當 Last-Modified 與 ETag 一塊兒使用時,服務器會優先驗證 ETag。
Expires:指明響應文檔過時的日期和時間。當文檔過時後,會從新從服務器獲取,並更新緩存。
爲了讓代理服務器或瀏覽器在一段時間後更新緩存的頁面,可經過 Expires 指定頁面過時的時間。當設置爲 0 時,表示不讓瀏覽器緩存頁面。Expires 等同與 Cache-Control: max-age ,但若同時存在,則會被後者覆蓋。Expires 屬於 HTTP/1.0 的產物,從 HTTP/1.1 開始,使用 Cache-Control: max-age= 代替。