HTTP 緩存機(jī)制

為了提高瀏覽器 HTTP 請(qǐng)求的性能,在 HTTP 協(xié)議中有幾種緩存機(jī)制來(lái)保證網(wǎng)絡(luò)訪問(wèn)的性能。HTTP 協(xié)議中提供了如下幾種緩存:Cache-Control、Expires、Last-modified 和 ETag,很好的利用它們可以提高我們網(wǎng)站的速度。

Expires

Expires 類似于 Cache-Control 中的 max-age,它告訴瀏覽器在這個(gè)時(shí)間(例如:Last-Modified:Sat, 25 Jun 2016 02:26:30 GMT)內(nèi)直接從本地讀取資源,不必再次向服務(wù)器請(qǐng)求。

Cache-Control

它用于定義資源的緩存策略,可以設(shè)置以下值:

  • no-store:絕對(duì)禁止緩存,每次請(qǐng)求支援都要從服務(wù)器端獲?。?/li>
  • no-cache
  • publice:允許代理服務(wù)器緩存資源;
  • private:不允許代理服務(wù)器緩存資源;
  • max-age:設(shè)置緩存的最大有效時(shí)間(單位:秒),當(dāng)發(fā)送請(qǐng)求的時(shí)間在有效期范圍內(nèi),它不會(huì)向服務(wù)器發(fā)送請(qǐng)求,直接從本地獲取資源。當(dāng)它與 Expries 緩存同時(shí)使用時(shí),Expries 失效;
  • s-maxage:類似于 max-age,只適用于 publice` 緩存,一般用在 CDN 服務(wù)器上;

當(dāng) Expires 和 max-age 同時(shí)存在時(shí),Expires 將被忽略。

Last-modified

Last-modified 是服務(wù)器端返回給瀏覽器資源的最后修改時(shí)間。如果同樣一個(gè)資源的最后修改時(shí)間有變動(dòng),服務(wù)器會(huì)返回給瀏覽器 200 告訴瀏覽器需要重新向服務(wù)器請(qǐng)求新資源;如果沒(méi)有變動(dòng),服務(wù)器會(huì)返回瀏覽器 304 告訴瀏覽器資源沒(méi)有變動(dòng),直接從本地讀取。

ETag

ETag 是為了解決 Last-modified 的一些缺陷:

  • 一些資源的最后修改時(shí)間變了,但是內(nèi)容沒(méi)有改變;
  • Last-modified 只能精確到秒級(jí);

這樣我們引入了 ETag,服務(wù)端會(huì)通過(guò)資源文件生成一段 Hash 字符串來(lái)標(biāo)示這個(gè)資源,在 HTTP 的頭部會(huì)將此標(biāo)示返回給瀏覽器端,同時(shí)瀏覽器每次請(qǐng)求會(huì)將 ETag 發(fā)送給服務(wù)器端,此刻服務(wù)器端會(huì)比較請(qǐng)求和和即將返回的資源的 ETag,如果不一樣,服務(wù)器會(huì)返回給瀏覽器 200 告訴瀏覽器需要重新向服務(wù)器請(qǐng)求新資源;如果一樣,服務(wù)器會(huì)返回瀏覽器 304 告訴瀏覽器資源沒(méi)有變動(dòng),直接從本地讀取。

當(dāng) Etag 和 Last-modified 同時(shí)存在時(shí),Last-modified 會(huì)忽略。

它們的區(qū)別

為什么有這么多緩存呢,其實(shí)它們是存在區(qū)別的:Expires 以及 Cache-Control 兩種緩存在有效期內(nèi),它們是不會(huì)向服務(wù)器端發(fā)送任何請(qǐng)求的,直接獲取本地資源;然而 Last-modified 和 ETag 還是需要請(qǐng)求服務(wù)器,服務(wù)器比較完后高速瀏覽器是否需要從本地獲取。

這幾種緩存需要搭配使用,如果客戶端的有效期失效后,再次訪問(wèn)服務(wù)器端讓服務(wù)器端比較一下資源內(nèi)容是否改變,如果改變了這樣服務(wù)器端才返回最新資源。

對(duì)于不同的資源的緩存策略

不同類型的資源會(huì)采用不同的緩存策略,通常 html 文件經(jīng)常會(huì)采用 Cache-Control:no-cache,css 和 js 文件通常會(huì)采用 Cache-Control:max-age。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • HTTP報(bào)文就是瀏覽器和服務(wù)器間通信時(shí)發(fā)送及響應(yīng)的數(shù)據(jù)塊。 瀏覽器向服務(wù)器請(qǐng)求數(shù)據(jù),發(fā)送請(qǐng)求(request)報(bào)文...
    ch1n3h閱讀 399評(píng)論 0 0
  • 重點(diǎn)參考: 瀏覽器 HTTP 協(xié)議緩存機(jī)制詳解 https://www.cnblogs.com/520yang/a...
    Kevin_Junbaozi閱讀 514評(píng)論 0 1
  • 簡(jiǎn)介 web緩存大致可以分為:數(shù)據(jù)庫(kù)緩存,服務(wù)器端緩存(代理服務(wù)器緩存,CDN緩存),瀏覽器緩存。瀏覽器緩存也包含...
    我向你奔閱讀 587評(píng)論 0 1
  • 1. 思路1,無(wú)緩存 瀏覽器向服務(wù)器請(qǐng)求資源 a.jpg,服務(wù)器找到對(duì)應(yīng)資源把內(nèi)容返回給瀏覽器。當(dāng)瀏覽器再次向服務(wù)...
    蔡華鵬閱讀 600評(píng)論 0 0
  • HTTP 緩存到底怎么實(shí)現(xiàn)呢?之前課堂上講過(guò)怎么突然想不起來(lái)了... 從頭開(kāi)始捋一捋吧!一、 思路1,無(wú)緩存瀏覽器...
    IrisLong閱讀 177評(píng)論 0 0

友情鏈接更多精彩內(nèi)容