介紹http快取之前先簡單說一下web快取
web快取是一種儲存web資源副本並在下次請求時直接使用該副本的技術。web快取可以分為這幾種:瀏覽器快取、cdn快取、伺服器快取、資料庫資料快取 。因為可能會直接使用副本免於重新傳送請求或者僅僅確認資源沒變無需重新傳輸資源實體,web快取可以減少延遲加快網頁開啟速度、重複利用資源減少網路頻寬消耗、降低請求次數或者減少傳輸內容從而減輕伺服器壓力。
這篇文章主要討論和前端密切相關的瀏覽器http快取
機制。瀏覽器http快取
可以分為強快取
和協商快取
。強快取
和協商快取
最大也是最根本的區別是:強快取命中的話不會發請求到伺服器(比如chrome中的200 from memory cache),協商快取一定會發請求到伺服器,通過資源的請求首部字段驗證資源是否命中協商快取,如果協商快取命中,伺服器會將這個請求返回,但是不會返回這個資源的實體,而是通知客戶端可以從快取中載入這個資源(304 not modified)。
瀏覽器http快取由http報文的首部字段決定
控制強快取的字段按優先順序介紹
1.pragma
pragma
是http/1.1之前版本遺留的通用首部字段,僅作為於http/1.0的向後相容而使用。雖然它是乙個通用首部,但是它在響應報文中時的行為沒有規範,依賴於瀏覽器的實現。rfc中該字段只有no-cache
乙個可選值,會通知瀏覽器不直接使用快取,要求向伺服器發請求校驗新鮮度。因為它優先順序最高,當存在時一定不會命中強快取。
2.cache-control指令
引數說明
private
無表明響應只能被單個使用者快取,不能作為共享快取(即**伺服器不能快取它)
public
可省略表明響應可以被任何物件(包括:傳送請求的客戶端,**伺服器,等等)快取
no-cache
可省略快取前必需確認其有效性
no-store
無不快取請求或響應的任何內容
max-age=[s]
必需響應的最大值
no-store表示禁止瀏覽器以及所有中間快取儲存任何版本的返回響應,一定不會出現強快取和協商快取,適合個人隱私資料或者經濟類資料。
public表明響應可以被瀏覽器、cdn等等快取。
private響應只作為私有的快取,不能被cdn等快取。如果要求http認證,響應會自動設定為private
。
3.expires控制協商快取的字段
1.last-modified/if-modified-since
if-modified-since是乙個請求首部字段,並且只能用在get或者head請求中。last-modified
是乙個響應首部字段,包含伺服器認定的資源作出修改的日期及時間。當帶著if-modified-since
頭訪問伺服器請求資源時,伺服器會檢查last-modified
,如果last-modified
的時間早於或等於if-modified-since
則會返回乙個不帶主體的304
響應,否則將重新返回資源。
if-modified-since: , ::gmt2.etag/if-none-matchlast-modified: , ::gmt
etag
是乙個響應首部字段,它是根據實體內容生成的一段hash字串,標識資源的狀態,由服務端產生。if-none-match
是乙個條件式的請求首部。如果請求資源時在請求首部加上這個字段,值為之前伺服器端返回的資源上的etag
,則當且僅當伺服器上沒有任何資源的etag
屬性值與這個首部中列出的時候,伺服器才會返回帶有所請求資源實體的200響應,否則伺服器會返回不帶實體的304
響應。etag
優先順序比last-modified
高,同時存在時會以etag
為準。
etag屬性之間的比較採用的是弱比較演算法,即兩個檔案除了每個位元都相同外,內容一致也可以認為是相同的。例如,如果兩個頁面僅僅在頁尾的生成時間有所不同,就可以認為二者是相同的。因為
etag
的特性,所以相較於last-modified
有一些優勢:
1. 某些情況下伺服器無法獲取資源的最後修改時間
2. 資源的最後修改時間變了但是內容沒變,使用etag可以正確快取
3. 如果資源修改非常頻繁,在秒以下的時間進行修改,last-modified只能精確到秒
整體流程
HTTP瀏覽器快取機制
來自 瀏覽器快取機制 瀏覽器快取機制,其實主要就是http協議定義的快取機制 如 expires cache control等 但是也有非http協議定義的快取機制,如使用html meta 標籤,web開發者可以在html頁面的節點中加入標籤,如下 上述 的作用是告訴瀏覽器當前頁面不被快取,每次訪...
瀏覽器快取機制 http快取頭
重用已獲取的資源能夠有效的提公升 與應用的效能。web 快取能夠減少延遲與網路阻塞,進而減少顯示某個資源所用的時間。借助 http 快取,web 站點變得更具有響應性。快取作為加快頁面載入速度的方法,可以說是必不可少的乙個方法,如何能更好地運用快取來服務客戶,首先我們就得了解清楚快取 先上一張從se...
瀏覽器http的快取機制
頁面每次重新整理都是200,解決304快取 當瀏覽器請求過一遍資源,並且資源內容未變 主要也是last modifiled 我們先來瞅一眼rfc2616規定的47種http報文首部欄位中與快取相關的字段,事先了解一下能讓咱在心裡有個底 通用首部字段 就是請求報文和響應報文都能用上的字段 cache ...