HTTP緩存

Http 緩存機(jī)制作為 web 性能優(yōu)化的重要手段,有如下作用:

  • 減少網(wǎng)絡(luò)帶寬消耗:無(wú)論對(duì)于網(wǎng)站運(yùn)營(yíng)者或者用戶(hù),帶寬都代表著金錢(qián),過(guò)多的帶寬消耗,只會(huì)便宜了網(wǎng)絡(luò)運(yùn)營(yíng)商。當(dāng)Web緩存副本被使用時(shí),只會(huì)產(chǎn)生極小的網(wǎng)絡(luò)流量,可以有效的降低運(yùn)營(yíng)成本。
  • 降低服務(wù)器壓力:給網(wǎng)絡(luò)資源設(shè)定有效期之后,用戶(hù)可以重復(fù)使用本地的緩存,減少對(duì)源服務(wù)器的請(qǐng)求,間接降低服務(wù)器的壓力。同時(shí),搜索引擎的爬蟲(chóng)也能根據(jù)過(guò)期機(jī)制降低爬取的頻率,也能有效降低服務(wù)器的壓力。
  • 減少網(wǎng)絡(luò)延遲,加快頁(yè)面打開(kāi)速度:帶寬對(duì)于個(gè)人網(wǎng)站運(yùn)營(yíng)者來(lái)說(shuō)是十分重要,而對(duì)于大型的互聯(lián)網(wǎng)公司來(lái)說(shuō),可能有時(shí)因?yàn)殄X(qián)多而真的不在乎。那Web緩存還有作用嗎?答案是肯定的,對(duì)于最終用戶(hù),緩存的使用能夠明顯加快頁(yè)面打開(kāi)速度,達(dá)到更好的體驗(yàn)。

以下是對(duì)HTTP中控制客戶(hù)端緩存的幾種方式以及優(yōu)先級(jí)的梳理

強(qiáng)制緩存

瀏覽器在請(qǐng)求已經(jīng)訪問(wèn)過(guò)的URL的時(shí)候, 會(huì)判斷是否使用緩存, 判斷是否使用緩存主要通過(guò)判斷緩存是否在有效期內(nèi), 通過(guò)兩個(gè)字段來(lái)判斷:

  • Expires, 有效期, 返回的是一個(gè)GMT時(shí)間,這是一個(gè)絕對(duì)時(shí)間, 但是使用的是客戶(hù)端時(shí)間, 與服務(wù)器時(shí)間存在一定時(shí)間差
  • Cache-Control => max-age, 最大有效時(shí)間,這是一個(gè)相對(duì)時(shí)間, 單位是s, 優(yōu)先級(jí)比expires高, 為了解決expires時(shí)間差的問(wèn)題而出現(xiàn)的

對(duì)比緩存

當(dāng)緩存過(guò)期后, 瀏覽器不會(huì)直接去服務(wù)器上拿緩存, 而是判斷緩存是否有更新, 能否繼續(xù)使用, 判斷的方法有兩種:

  • Last-Modified 和 If-Modified-Since: 服務(wù)器會(huì)響應(yīng)一個(gè)Last-Modified字段, 表示最近一次修改緩存的時(shí)間, 當(dāng)緩存過(guò)期后, 瀏覽器就會(huì)把這個(gè)時(shí)間放在If-Modified-Since去請(qǐng)求服務(wù)器, 判斷緩存是否有更新
  • Etag和If-None-Match: 服務(wù)器會(huì)響應(yīng)一個(gè)Etag字段, 一個(gè)表示文件唯一的標(biāo)識(shí)符, 一旦文件更新, Etag也會(huì)跟著更改, 當(dāng)緩存過(guò)期后, 瀏覽器會(huì)把這個(gè)唯一標(biāo)識(shí)符放在If-None-Match去請(qǐng)求服務(wù)器, 判斷是否有更新, Etag的優(yōu)先級(jí)比Last-Modified的更高

那么既生Last-Modified何生Etag?你可能會(huì)覺(jué)得使用Last-Modified已經(jīng)足以讓瀏覽器知道本地的緩存副本是否足夠新,為什么還需要Etag(實(shí)體標(biāo)識(shí))呢?HTTP1.1中Etag的出現(xiàn)主要是為了解決幾個(gè)Last-Modified比較難解決的問(wèn)題

  • Last-Modified標(biāo)注的最后修改只能精確到秒級(jí),如果某些文件在1秒鐘以?xún)?nèi),被修改多次的話,它將不能準(zhǔn)確標(biāo)注文件的修改時(shí)間
  • 如果某些文件會(huì)被定期生成,當(dāng)有時(shí)內(nèi)容并沒(méi)有任何變化,但Last-Modified卻改變了,導(dǎo)致文件沒(méi)法使用緩存
  • 有可能存在服務(wù)器沒(méi)有準(zhǔn)確獲取文件修改時(shí)間,或者與代理服務(wù)器時(shí)間不一致等情形

參考:
徹底弄懂HTTP緩存機(jī)制及原理
知乎專(zhuān)欄-瀏覽器是如何控制緩存的

最后編輯于
?著作權(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)容

  • 網(wǎng)絡(luò)特有的延遲以及數(shù)據(jù)傳輸?shù)某杀荆萍s互聯(lián)網(wǎng)快速獲取Web資源。為此,HTTP協(xié)議引入緩存以空間換時(shí)間,使瀏覽器緩...
    大頭8086閱讀 3,204評(píng)論 2 12
  • 本文內(nèi)容大多參考《圖解HTTP》一書(shū) 一. 認(rèn)識(shí)代理服務(wù)器 所以講緩存為什么要先扯代理服務(wù)器?別急,讓我們看一下一...
    流光號(hào)船長(zhǎng)閱讀 2,102評(píng)論 0 10
  • 1. 緩存的分類(lèi) 緩存分為服務(wù)端緩存和客戶(hù)端緩存 服務(wù)端緩存又分為代理服務(wù)器緩存和反向代理服務(wù)器緩存(也叫網(wǎng)關(guān)緩存...
    lemonCode閱讀 383評(píng)論 0 0
  • 時(shí)間:2016-12-12 17:51:30作者: zhongxia 零、前言 這里主要寫(xiě)的是理論,具體實(shí)踐的比較...
    izhongxia閱讀 318評(píng)論 0 1
  • 什么,玩?zhèn)€玩具還有必要看書(shū)? 首先,說(shuō)到書(shū)籍,我們說(shuō)的不是樂(lè)高的產(chǎn)品目錄手冊(cè),或者套裝搭建說(shuō)明書(shū),這些固然占了樂(lè)高...
    彩色螞蟻閱讀 21,107評(píng)論 2 38

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