HTTP協議頭字段詳解大全

 

Accept

表示客戶端指望服務器返回的媒體格式。瀏覽器

Accept-Charset

表示客戶端指望服務器返回的內容的編碼格式。緩存

Accept-Language

表示客戶端指望服務器返回的內容的語言。服務器

 

Content-Type

Content-Type是服務器向客戶端發送的頭,表明內容的媒體類型和編碼格式,是對Accept頭和Accept-Charset頭的統一應答。併發

Content-Language

這個頭字段內容是對Accept-Language的應答。服務器經過此字段告知客戶端返回的Body信息的語言是什麼。ui

Content-Length

表示傳輸的請求/響應的Body的長度。編碼

Date

若是服務器沒有緩存,那麼Date就是響應的即時生成時間。若是服務器設有緩存,那麼Date就是響應內容被緩存的時間。spa

Last-Modified

標記資源的最近修改時間,它和Date比較相似,區別是Last-Modified表明修改時間,而Date是建立時間。操作系統

If-Modified-Since

瀏覽器向服務器請求靜態資源時,若是瀏覽器本地已經有了緩存,就會攜帶If-Modified-Since頭,值爲資源的Last-Modified時間,詢問服務器該資源自從這個Last-Modified時間以後有沒有被修改。若是沒有修改過,就會向瀏覽器返回304 Not Modified通知瀏覽器能夠放心使用緩存內的資源。若是資源修改過,那就像正常的GET請求同樣,攜帶資源的內容返回200 OK。代理

If-Unmodified-Since

相似於If-Modified-Since,意義相反。區別是當服務器資源條件不知足時,不是返回304 Not Modified,而是返回412 Precondition Failed。orm

Age

表示資源緩存的年齡,也就是資源自緩存以來到如今已通過去了多少時間,單位是秒。

Expires

服務器使用Expect頭來告知對方資源什麼時候失效。

ETag

資源標籤,每一個資源能夠提供多個標籤信息。它通常用來和下面的If-Match和If-None-Match配合使用,用來判斷緩存資源的有效性。比較常見的標籤是資源的版本號,好比能夠拿資源數據的md5校驗碼做爲版本號。

If-Match

If-Match的值通常是上面提到的ETag的值,它經常使用於HTTP的樂觀鎖。所謂HTTP樂觀鎖,是指客戶端先GET這個資源獲得ETag中的版本號,而後發起一個資源修改請求PUT|PATCH時經過If-Match頭來指定資源的版本號,若是服務器資源知足If-Match中指定的版本號,請求就會被執行。若是不知足,說明資源被併發修改了,就須要返回狀態碼爲412 Precondition failed 的錯誤。客戶端能夠選擇放棄或者重試整個過程。

If-None-Match

相似於If-Match,只是條件相反。

 

ETag vs Last-Modified vs Expires

ETag通常攜帶的是資源的版本號,協議沒有具體規定版本號是什麼。它能夠是資源的md5校驗碼,也能夠是uuid,甚至能夠是自增的數字,也能夠是資源的修改時間。它的匹配方式是相等/不相等。由於服務器須要維護版本號,取決的版本號是什麼,這多是一個存儲和計算的負擔。

Last-Modified攜帶的資源的修改時間。它的匹配方式是大於/小於。若是是靜態資源文件,通常就是操做系統記錄的文件修改時間。

Expires是服務器告知客戶端資源的過時時間。客戶端緩存的資源在這個時間以後自動過時,而不須要非得向服務器確認一下是否是304 Not Modified才認爲沒過時。

 

Cache-Control

這多是HTTP頭裏面最複雜的一個頭了。這個頭既能夠用於請求,也能夠用於響應。在請求和響應的取值不同,分別表明了不一樣的意思。

  1. no-cache 若是no-cache沒有指定值,那就表示不容許緩存。對於請求來講,服務器不得使用緩存內容直接返回。對於響應來講,客戶端不得緩存響應的資源內容。若是no-cache指定了值,那就表示值對應的頭信息不得使用緩存,其它的信息仍是能夠緩存的。告知對方我只要新鮮剛出浴的數據。

  2. no-store 告知對方不要持久化請求/響應數據到其它地方,這種信息是敏感的,要保持它的易失性。告知對方記在內心(memory)就行,別寫在紙上(disk)。

  3. no-transform 告知對方不要轉換數據。好比客戶端上傳了raw圖像數據,服務器通常都會選擇性壓縮圖像數據進行存儲。no-transform告知對方保留原始數據信息,不要進行任何轉換。告知對方不要亂動我發過來的東西。

  4. only-if-cached 用於請求頭,告知服務器只要那些已經緩存的內容,不要去reload。若是沒有緩存內容就返回504 Gateway Timeout錯誤。表示客戶端不想太麻煩服務器,有就給,沒就算了。

  5. max-age 用於請求頭。限制緩存內容的年齡,若是超過max-age年齡的,須要服務器去reload內容資源。這叫客戶端的年齡歧視。

  6. max-stale 用於請求頭。客戶端容許服務器返回緩存已過時的資源內容,可是限定了最大過時時間。表示客戶端雖然很寬容,那是也是有限度的。

  7. min-fresh 用於請求頭。客戶端限制服務器不要那些即將過時的資源內容。就比如咱們去超市買牛奶,若是牛奶快過時了雖然還在保質期內我們也就不會考慮。

  8. public 用於響應頭。表示容許客戶端緩存響應信息,並能夠給別人使用。好比代理服務器緩存靜態資源供全部代理用戶使用。

  9. private 用於響應頭。表示僅容許客戶端緩存響應信息給本身使用,不得分享給別人。這樣是爲了禁止代理服務器進行緩存,而容許客戶端本身緩存資源內容。意思是你我的留着用就行,別借給別人用。

 

Connection

當客戶端和服務器須要協商鏈接的屬性時,可使用Connection頭部。比較經常使用的一個值是close,用來通知對方在當前請求結束後關閉鏈接。

Referer

Referer是很是經常使用的頭,它表示請求的發起來源URI,也就是當前頁面資源的父頁面。

User-Agent

攜帶當前的用戶代理信息,通常包含瀏覽器、瀏覽器內核和操做系統的版本型號信息。

 

https://mp.weixin.qq.com/s/RtKPGi9rIcfx1anadj_HWg

相關文章
相關標籤/搜索