Headers 與 Cache 機制探討 (一)

2016-06-24

error

Http Headers


經常串接 API 或是抓封包來看的朋友應該對 Http Header 不陌生吧, Http Header 是我們每次在向目標 Server 取得內容時,依附在內容上的一些屬性或參數, 不管是使用哪一種 method,GET.POST.DELETE 還是 PUT... 都可以使用 Header 來傳遞一些資料, Header 又分為三種 Request(請求)、Response(回應)、General(通用),下面讓我們先來看看一些常見到的 Header (與 cache 機制有關的使用紅色標記)



General (通用)

名稱 範例 簡介
Cache-Control no-cache,max-age=30 表示使用何種 Cache 機制,經常使用的 value 有:no-store , no-cache , public , private , max-age ,
Date Wed, 20 Apr 2016 08:46:31 GMT 時間戳記
Pragma no-store 表示使用何種 Cache 機制(已準備棄用,在Http 1.1後都改為參考 Cache-Control 了)

Response (回應)

名稱 範例 簡介
Content-Length 145698 表示回應的內容長度
Content-Type application/json 表示回應的格式,常見的有text/html(網頁)、text/plain(無格式純文字)、application/json(JSON格式)、application/xml(XML格式)、text/xml(XML格式)
Content-Language en 表示回應的語言
Content-Encoding gzip 表示回應的內容壓縮方式
Server Microsoft-IIS/8.5 表示何種技術的 web server
ETag "12345678" Cache 機制中的*內容驗證權杖,需要用引號("")包住
Last-Modified Wed, 20 Apr 2016 08:46:31 GMT Cache 機制中的*時間驗證權杖,需使用 Universal Time
X-Powered-By ASP.NET 表示何種技術的 web service,特別說明一下,X 開頭系列的 Header 通常是非標準(各個語言自定義的),雖說是非標準,但有些 X 開頭的 Header 幾乎是很常見的
X-Version 4.0.30319 web service 當前版本

Request (請求)

名稱 範例 簡介
Accept */* 指定請求內容的通用欄位
Accept-Charset UTF-8 指定請求內容編碼
Accept-Encoding gzip, deflate 指定請求內容壓縮方式,以這個範例來說,我指定可以接受 gzip 或 deflate 壓縮格式
Accept-Language zh-TW,zh-CN;q=0.6,en-US;q=0.2 指定請求內容語言,q 代表請求權重(範圍值介於0~1之間,不寫預設=1),以這個範例來說,我指定可以接受 zh-TW(繁中)zh-CN(簡中)en-US(英文),其中又以 zh-TW 權重最高=1,zh-CN 其次=0.6,en-US 最低=0.2
Authorization a54bc12-17dd-367c5dcd 這裡通常會放身份驗證 token
If-None-Match "12345678" 這裡會放上一次 Server 給的 ETag
If-Modified-Since Wed, 20 Apr 2016 08:46:31 GMT 這裡會放上一次 Server 給的 Last-Modified

Request 與 Response 對應關係

Request (請求) Response (回應)
Accept-Charset Content-Type
Accept-Language Content-Language
Accept-Encoding Content-Encoding
If-None-Match ETag
If-Modified-Since Last-Modified

Http 的 Header 有定義非常非常的多,上面只是列出一些常見到的,對其他有興趣的可以參考 WIKI

其實關於 Header 要放什麼,最主要還是看 Server 與 Client 端在溝通時需要何種資訊來做搭配運用。

下一篇將介紹 Cache 機制

重點會放在 Cache-Control 、 ETag 、 Last-Modified 、 If-None-Match 、 If-Modified-Since ,這幾個 Header。