http緩存機(jī)制

前言

本文是閱讀文章所做筆記。意在加深記憶也便于日后查找

強(qiáng)緩存和協(xié)商緩存

http的緩存機(jī)制可以分為兩種類型:

  • 強(qiáng)緩存:瀏覽器判斷本地緩存未過期,就直接使用,無需發(fā)起http請(qǐng)求
  • 協(xié)商緩存: 瀏覽器判斷本地緩存過期,發(fā)送http請(qǐng)求,服務(wù)器返回304告訴瀏覽器文件未改變,瀏覽器繼續(xù)使用本地緩存

緩存頭部

如何區(qū)分緩存類型呢?主要根據(jù)http頭部字段
屬于強(qiáng)緩存控制:

  • http1.0: Pragma/Expires
  • http1.1: Cache-Control/Max-Age
    ps: Max-Age不是一個(gè)頭部,而是Cache-Control的值

屬于協(xié)商緩存控制:

  • http1.0: If-Modified-Since/Last-Modified
  • http1.1: If-None-Match/E-tag

http1.0和http1.1緩存頭部控制的區(qū)別

在http1.0中:

  • Pragma: 嚴(yán)格說,他不屬于專門控制緩存的頭部,但是當(dāng)其值為no-cache時(shí)可以讓本地強(qiáng)緩存失效
  • Expires: 在服務(wù)端配置,用于強(qiáng)緩存。用來控制在規(guī)定時(shí)間之前,瀏覽器不需要在發(fā)出請(qǐng)求,直接使用本地緩存。切Expires是服務(wù)端時(shí)間
  • If-Modified-Since/Last-Modified: 這兩個(gè)是成對(duì)出現(xiàn)。屬于協(xié)商緩存。其中瀏覽器端頭部為If-Modified-Since,服務(wù)器端為Last-Modified。在發(fā)送請(qǐng)求時(shí),如果If-Modified-SinceLast-Modified匹配,那么表示服務(wù)器資源為變化,服務(wù)器不會(huì)返回當(dāng)前資源。而是返回頭部,告知瀏覽器使用本地緩存。Last-Modified是指文件的最后修改時(shí)間。只能精確到1s以內(nèi)。

在http1.1中:

  • Cache-Control:緩存控制的頭部。有no-cache, max-age,no-store等值。
  • Max-Age:服務(wù)器端配置,用于強(qiáng)緩存,例如Cache-Control=max-age=3600在3600秒內(nèi),瀏覽器無需再次發(fā)出請(qǐng)求直接使用本地緩存。他的值是絕對(duì)時(shí)間,由瀏覽器自己計(jì)算。
  • If-None-Match/E-tag: 這個(gè)是成對(duì)出現(xiàn)的。屬于協(xié)商緩存。其中瀏覽器端頭部為If-None-Match,服務(wù)器端為E-tag。當(dāng)瀏覽器發(fā)出請(qǐng)求后兩者匹配,則表示服務(wù)器端資源未改變,服務(wù)器不會(huì)返回資源本身,返回頭部,瀏覽器使用本地緩存。和Last-Modified相比。E-tag更精確。沒有1s的誤差。

Max-Age 和 Expires 區(qū)別

Expires 使用的服務(wù)器時(shí)間。當(dāng)服務(wù)器時(shí)間和瀏覽器時(shí)間不同步時(shí),可能會(huì)發(fā)生緩存無效或一直無法過期的bug。
E-tag 使用的瀏覽器時(shí)間。就不會(huì)存在上述問題。

E-tag 和 Last-Modified 區(qū)別

Last-Modified 表示的是文件的最后修改時(shí)間,有一個(gè)精確1s的缺陷,如果服務(wù)端的文件周期性改變,會(huì)導(dǎo)致緩存失效。
E-tag是一種指紋機(jī)制。只有文件發(fā)生改變才會(huì)變化。不存在1s的缺陷。

緩存關(guān)系圖


緩存關(guān)系圖

本文參考:
從輸入U(xiǎn)RL到頁(yè)面加載的過程?如何由一道題完善自己的前端知識(shí)體系

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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