偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

前端百題斬之一文了解HTTP緩存

開發(fā) 前端
緩存是指代理服務(wù)器或客戶端本地磁盤內(nèi)保存的資源副本,利用緩存可減少對(duì)源服務(wù)器的訪問,節(jié)省通信流量和通信時(shí)間。

[[415205]]

緩存是指代理服務(wù)器或客戶端本地磁盤內(nèi)保存的資源副本,利用緩存可減少對(duì)源服務(wù)器的訪問,節(jié)省通信流量和通信時(shí)間。

瀏覽器緩存指的就是瀏覽器對(duì)之前請(qǐng)求過的文件進(jìn)行緩存,以便在下一次訪問時(shí)重復(fù)使用,從而節(jié)省帶寬、提升訪問速度、降低服務(wù)器壓力。

今天所說的HTTP緩存機(jī)制就是利用HTTP響應(yīng)頭將所請(qǐng)求的資源在瀏覽器中進(jìn)行緩存,緩存方式主要分為兩種:強(qiáng)緩存、協(xié)商緩存。

3.1 強(qiáng)緩存

強(qiáng)緩存指的是在緩存時(shí)間內(nèi)不會(huì)向服務(wù)器發(fā)起請(qǐng)求,只有過期之后才會(huì)向服務(wù)器發(fā)起請(qǐng)求,整個(gè)流程如下所示:

HTTP中存在兩個(gè)響應(yīng)頭來表征強(qiáng)緩存,分別是:Expires、Cache-Control,下面對(duì)這兩個(gè)字段進(jìn)行闡述。

3.1.1 Expires

Expires是HTTP1.0中的字段,是一個(gè)絕對(duì)時(shí)間,即服務(wù)器時(shí)間。瀏覽器檢查當(dāng)前時(shí)間,如果還沒到失效時(shí)間就直接使用緩存文件。

3.1.2 Cache-Control

由于Expires存在服務(wù)器時(shí)間越客戶端時(shí)間不一致的問題,所以HTTP1.1中新增了Cache-Control字段(注意:如果同時(shí)存在cache-control和expires時(shí),瀏覽器總是優(yōu)先使用cache-control),通過設(shè)置max-age來不存一個(gè)相對(duì)時(shí)間,表示其在該相對(duì)時(shí)間內(nèi)容有效。對(duì)于Cache-Control字段的常見取值如下所示:

  • private:默認(rèn)值,表示客戶端可以緩存,中間代理、CDN等不能緩存此響應(yīng);
  • public:表示客戶端和代理服務(wù)器都可緩存;
  • max-age=xxx:緩存的內(nèi)容將在xxx秒后失效;
  • no-cache:需要使用協(xié)商緩存來驗(yàn)證緩存數(shù)據(jù);
  • no-store:所有內(nèi)容都不會(huì)緩存(包括協(xié)商緩存),每次都向服務(wù)器請(qǐng)求最新資源;
  • must-revalidate:在緩存過期前可以使用,過期后必須向服務(wù)器驗(yàn)證。

3.1.3 為什么增加Cache-Control字段?

Expires字段存在一個(gè)問題,即該字段利用的是絕對(duì)時(shí)間,由于服務(wù)器時(shí)間與客戶端時(shí)間可能不一致,從而導(dǎo)致問題,所以新增了Cache-Control字段。

3.2 協(xié)商緩存

協(xié)商緩存都會(huì)向服務(wù)器發(fā)送請(qǐng)求,判斷緩存數(shù)據(jù)是否過期,過期的話會(huì)返回新的內(nèi)容,沒有過期則使用本地的緩存數(shù)據(jù)。對(duì)于協(xié)商緩存主要利用兩個(gè)字段:Last-Modify、Etag,其整體流程如下所示:

注:圖片來源于(https://www.cnblogs.com/zhouwenhong/p/3928645.html)

3.2.1 Last-Modify

last-modified是HTTP1.0中的字段,是第一次請(qǐng)求資源時(shí),服務(wù)器返回的字段,表示最后一次更新的時(shí)間。下一次瀏覽器請(qǐng)求資源時(shí)就發(fā)送if-modified-since字段。服務(wù)器用本地Last-modified時(shí)間與if-modified-since時(shí)間比較,如果不一致則認(rèn)為緩存已過期并返回新資源給瀏覽器;如果時(shí)間一致則發(fā)送304狀態(tài)碼,讓瀏覽器繼續(xù)使用緩存。

3.2.2 Etag

Etag是HTTP1.1中新增的字段,是資源的實(shí)體標(biāo)識(shí)(哈希字符串),當(dāng)資源內(nèi)容更新時(shí),Etag會(huì)改變。服務(wù)器會(huì)判斷Etag是否發(fā)生變化,如果變化則返回新資源,否則返回304。

3.2.3 為什么增加Etag字段?

在Last-Modify字段存在情況下又新增Etag字段的理由主要有以下幾點(diǎn): 

  • 一些文件進(jìn)行更改后,其內(nèi)容并沒有發(fā)生變化,僅僅影響了修改時(shí)間,這時(shí)候不應(yīng)該認(rèn)為緩存過期了;
  • 某些文件修改太多頻繁(秒級(jí)別以內(nèi)),但是If-Modify-Since能檢查的精度是秒級(jí)別,此時(shí)會(huì)導(dǎo)致問題;
  • 某些服務(wù)器并不能精確得到文件的最后修改時(shí)間。

本文轉(zhuǎn)載自微信公眾號(hào)「執(zhí)鳶者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系執(zhí)鳶者公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 執(zhí)鳶者
相關(guān)推薦

2018-09-28 14:06:25

前端緩存后端

2020-02-02 15:14:24

HTTP黑科技前端

2021-10-19 22:23:05

typeof方式Instanceof

2021-05-09 22:00:59

TypeofInstanceof運(yùn)算符

2021-06-07 07:01:43

js關(guān)鍵字運(yùn)行

2020-08-27 07:34:50

Zookeeper數(shù)據(jù)結(jié)構(gòu)

2021-05-30 19:02:59

變量對(duì)象上下文

2021-08-02 06:49:46

HTTP網(wǎng)絡(luò)模型

2021-06-09 07:01:30

前端CallApply

2022-06-08 08:11:56

威脅建模網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊

2025-05-23 09:38:54

JWT開發(fā)Go

2022-11-11 19:09:13

架構(gòu)

2022-02-25 07:34:36

MQTT協(xié)議RabbitMQ

2023-11-06 08:16:19

APM系統(tǒng)運(yùn)維

2023-04-26 15:43:24

容器編排容器編排工具

2023-11-20 08:18:49

Netty服務(wù)器

2021-12-02 06:58:02

項(xiàng)目事件循環(huán)

2021-07-29 06:56:35

前端事件循環(huán)

2021-07-14 07:00:53

瀏覽器技巧前端

2021-10-18 09:01:01

前端賦值淺拷貝
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)