HTTP Etag與If-None-Match
更多關於HTTP協議的內容可以參閱HTTP 協議一章節。
利用快取可以提高頁面的訪問速度,提高使用者體驗,並且還能夠減輕伺服器壓力。
首先對頁面快取做一下簡單通俗的介紹,要獲取一個頁面需要向伺服器發起一個請求,然後伺服器會產生一個響應,響應內容經過瀏覽器解析之後呈現在我們面前,如果頁面有大量的內容可以重複利用,那麼就可以將這些內容在本地暫時快取起來,當再次訪問該頁面時,就無需從伺服器獲取,直接就近獲取即可。
利用快取優點總結如下:
(1).避免從伺服器再次獲取資源,提高頁面響應速度,進而使用者體驗得到提高。
(2).因為直接從本地獲取,節省頻寬。
(3).減輕了伺服器壓力,也是因為無需伺服器傳送需要的內容。
一.http快取機制:
http快取機制主要在http響應頭中進行設定,相關欄位主要有:
(1).Expires。
(2).Cache-Control。
(3).Last-Modified。
(4).If-Modified-Since。
(5).Etag。
1.Expires:
它是在HTTP1.0協議中定義,用來規定一個時間點,在此時間點之前,瀏覽器可以無需從伺服器獲取資料,直接從本地快取獲得即可;此時間採用GMT格式,並非本地時間。
關於HTTP版本的發展可以參閱HTTP版本發展介紹一章節。
2.Cache-Control:
它是在HTTP1.1協議中定義,相對於Expires更加具體和細緻,所以可以無視Expires欄位的存在。
Cache-Control欄位主要可能的值如下:
(1).max-age:用來設定資源(representations)可以被快取多長時間,單位為秒。
(2).s-maxage:和max-age是一樣的,不過它只針對代理伺服器快取而言。
(3).public:指示響應可被任何快取區快取。
(4).private:只能針對個人使用者,而不能被代理伺服器快取。
(5).no-cache:強制客戶端直接向伺服器傳送請求,也就是說每次請求都必須向伺服器傳送。伺服器接收到請求,然後判斷資源是否變更,是則返回新內容,否則返回304,未變更。這很容易產生誤解,使人誤以為是響應不被快取。實際上Cache-Control: no-cache是會被快取的,只不過每次在向客戶端(瀏覽器)提供響應資料時,快取都要向伺服器評估快取響應的有效性。
(6).no-store:禁止一切快取(這個才是響應不被快取的意思)。
3.Etag & If-None-Match:
它們在HTTP1.1協議中定義,主要用來解決Last-Modified存在的一些問題。
Etag工作過程描述如下:
(1).瀏覽器客戶端對HTTP伺服器頁面A發起請求。
(2).HTTP伺服器返回頁面A,同時給A新增上ETag。
(3).頁面A通過瀏覽器展現給使用者,並且將ETag快取起來。
(4).當客戶端再次請求該頁面時,並將上次快取的起來的ETag傳送到伺服器。
(5).伺服器會比對客服端傳送過來的ETag是否與伺服器的相同,如果相同,就將If-None-Match的值設為false,返回狀態為304,客戶端繼續使用本地快取。
Last-Modified工作過程基本與Etag是一致的;下面看幾個通過Fiddler工具捕捉相關資訊:
相同顏色框中的資料如果相同,那麼就使用快取,否則就從伺服器讀取內容。
特別說明:Etag的優先順序高於Last-Modified;Last-Modified缺點如下:
(1).Last-Modified只能精確到秒,如果檔案在1秒鐘內,被修改多次,將不能準確標註檔案修改時間。
(2).如果檔案被生成,且內容並沒有任何變化,但Last-Modified卻改變,導致檔案沒法使用快取。
(3).有可能存在伺服器沒有準確獲取檔案修改時間,或者與代理伺服器時間不一致等情形。
相關文章
- Etag和if-None-MatchNone
- Manifest 與TypeTag
- GoogleTagManager 介紹與使用Go
- http強制快取、協商快取、指紋ETag詳解HTTP快取
- HTTP 請求響應頭部欄位裡 ETAG 的用法舉例HTTP
- ETag使用效果對比及經驗分享(附ETag配置教程)
- ETag 介面軟快取快取
- Http與HTTP隧道技術HTTP
- OkHttp設定支援Etag快取HTTP快取
- ClassTag、Manifest、ClassManifest、TypeTagSSM
- http2與http1HTTP
- http1.1與http2.0HTTP
- HTTP 2.0與HTTP 1.1區別HTTP
- 元遊戲(Metagame)中的“沉默”遊戲GAM
- httpModules與Http模組HTTP
- HTTP、Socket與TCPHTTPTCP
- Expires, Last-Modified, Etag快取機制AST快取
- AI+Metagame的可能性AIGAM
- [服務端與網路]http協議與http狀態碼服務端HTTP協議
- HTTP發展史,HTTP1.1與HTTP2.0的區別HTTP
- Cookie 與 HTTP請求CookieHTTP
- SSL:http與httpsHTTP
- GRPC與HTTP/3.0RPCHTTP
- Python Django基礎教程(二)(模板templatetags)PythonDjango
- http1.0與http1.1的區別(轉)HTTP
- 程式設計疑問:文字與檔案、HTTP 1 0 與 HTTP 1 1程式設計HTTP
- HTTP 與 HTTPS 簡介HTTP
- HTTP 請求與響應HTTP
- Http與Https協議HTTP協議
- socket與http的區別HTTP
- Http請求與響應HTTP
- HTTP2.0與tomcatHTTPTomcat
- HTTP與UDP/TCP區別HTTPUDPTCP
- HTTP與HTTPS:為什麼HTTPS比HTTP更安全?HTTP
- http與https的區別HTTP
- HTTP的請求與響應HTTP
- ServiceWorker 快取與 HTTP 快取快取HTTP
- HTTP 與 HTTPS 的區別HTTP