web快取之瀏覽器快取

2021-08-16 21:26:56 字數 1938 閱讀 2933

所謂快取就是再copy乙份資料的副本(可能是html頁面,,檔案),根據副本的存放位置不同,又可分為不同的快取策略,比如瀏覽器快取,就是將檔案儲存再客戶端,再訪問相同的url時首先檢查副本是否時最新的,如果足夠新的話,直接使用副本,不會再請求伺服器,這樣可以減少伺服器請求數量,使使用者獲得更好的體驗。

瀏覽器快取,主要是http協議定義的快取,當然也有非http協議的,比如html的meta標籤。

meta標籤提供了很多的屬性用來定義文件資訊,同時也提供了修改http傳輸的屬性。

當然這不是今天的重點,今天主要說的是http協議定義的快取機制。

expires用來設定快取的過期時間,是web伺服器響應訊息頭欄位,在響應http請求時可以通知瀏覽器在過期時間以前,可以直接從瀏覽器的快取中獲取資料。

相比於expires,cache-control的作用幾乎和它是一樣的,雖然都是指明資源的有限期,控制瀏覽器是否從瀏覽器快取中拉取資料,但是在兩者一起設定了的情況下,cache-control的優先順序更高,同時選擇性也更多。

cache-control的值可以是

1. max-age(單位s)

設定快取的最長有效時間,使用的是時間長短,例如說我設定max-age=60,也就是說在請求發出後的60秒內,瀏覽器再次請求時不會再請求伺服器,而是從瀏覽器快取中讀取資料。

2. s-maxage

與max-age的唯一區別是,s-maxage僅僅應用於共享快取。而不引用於使用者**的本地快取,等針對單使用者的快取. 另外,s-maxage的優先順序要高於max-age。

3. public

告知任何途徑的快取者,可以無條件的快取該響應,該響應可以在被多使用者共享。

4. private

只針對單個使用者快取響應。且可以具體指定某個字段,如private –「username」,則響應頭中,名為username的標頭內容,不會被共享快取。

5. no-cache

這個貌似不是很好解釋,那麼先來列一下瀏覽器從服務端請求資料的基本步驟

1.如果請求命中本地快取則從本地快取中獲取乙個對應資源的副本

2.檢查這個副本是否是最新的,是則直接返回,否則繼續向伺服器**請求。

3.伺服器接收到請求,然後判斷資源是否變更,是則返回新內容,否則返回304,未變更。

4.客戶端更新本地快取。

no-cache會強制跳過步驟2,也就是告訴瀏覽器,要原原本本的**請求到伺服器,等伺服器確認最新了才可以使用。這樣的話no-cache其實是允許瀏覽器快取副本,但是總是會校驗快取是否最新,一旦確認最新,則可以使用快取作為響應。

6. no-store

絕對被禁止快取,每一次請求都要被傳送到伺服器然後重新來獲取資料。

7. only-if-cached

告知瀏覽器,我希望內容來自快取,我並不關心被快取響應,是否是新鮮的。

在瀏覽器第一次請求某乙個url時,伺服器端的返回狀態會是200,內容是你請求的資源,同時有乙個last-modified的屬性標記此檔案在服務期端最後被修改的時間。

客戶端第二次請求此url時,根據 http 協議的規定,瀏覽器會向伺服器傳送 if-modified-since 報頭,詢問該時間之後檔案是否有被修改過。

如果伺服器端的資源沒有變化,則自動返回 http 304 (not changed.)狀態碼,使用快取資料。當伺服器端**發生改變或者重啟伺服器時,則重新發出資源,返回和第一次請求時類似。從而保證不向客戶端重**出資源,也保證當伺服器有變化時,客戶端能夠得到最新的資源。

瀏覽器第一次傳送請求時,伺服器端會生成一段hash字串,用來表示本次請求,下一次傳送請求時會回傳這個hash字串到伺服器端,伺服器會進行校驗,如果發現etag沒有變化,則會返回304。

ok,蝦麵copy別人的兩張圖,很清晰的講解了http瀏覽器的快取機制。

第一次請求:

再次請求:

參考文章:

快取 瀏覽器快取

瀏覽器快取 brower caching 是瀏覽器在本地磁碟對使用者最近請求過的文件進行儲存,當訪問者再次訪問同一頁面時,瀏覽器就可以直接從本地磁碟載入文件 1 瀏覽器第一次請求時,會發出一組 http 頭,用來指導瀏覽器如何進行快取。伺服器規定乙個資源是否要進行快取,主要由響應頭中的expires...

http快取 瀏覽器快取

如果以下題目都能快速回答,那此文章也就沒有必要要看啦 1.講一下http快取 強快取,協商快取 2.如何控制強 協商快取 expires,cache control,etag if none match,if modified sine last modified 3.cache control有哪...

瀏覽器快取

1.為什麼使用瀏覽器快取 以前了解的動態指令碼加速,或者動態內容快取之類,他們的原理都是避免伺服器重複計算,結果仍保留在伺服器端,這樣獲取資料還得從伺服器檢索然後傳送到使用者瀏覽器,如果我們把這些結果放在瀏覽器中,就省去了伺服器的查詢和網路傳輸,瀏覽器快取很好的實現了這個功能 2.瀏覽器快取存放在哪...