欧美日韩亚洲精品一区二区三区_亚洲一二三区在线观看_欧亚一区二区_一区二区三区美女

瀏覽器緩存機(jī)制post

瀏覽:159 發(fā)布日期:2023-04-28 00:00:00 投稿人:佚名投稿

1、瀏覽器緩存機(jī)制

有dns的地方,就有緩存。瀏覽器、操作系統(tǒng)、Local DNS、根域名服務(wù)器,它們都會(huì)對(duì)DNS結(jié)果做一定程度的緩存。

DNS查詢過程如下:

首先搜索瀏覽器自身的DNS緩存,如果存在,則域名解析到此完成。
如果瀏覽器自身的緩存里面沒有找到對(duì)應(yīng)的條目,那么會(huì)嘗試讀取操作系統(tǒng)的hosts文件看是否存在對(duì)應(yīng)的映射關(guān)系,如果存在,則域名解析到此完成。
如果本地hosts文件不存在映射關(guān)系,則查找本地DNS服務(wù)器(ISP服務(wù)器,或者自己手動(dòng)設(shè)置的DNS服務(wù)器),如果存在,域名到此解析完成。
如果本地DNS服務(wù)器還沒找到的話,它就會(huì)向根服務(wù)器發(fā)出請(qǐng)求,進(jìn)行遞歸查詢。

瀏覽器本地緩存失效后,瀏覽器會(huì)向CDN邊緣節(jié)點(diǎn)發(fā)起請(qǐng)求。類似瀏覽器緩存,CDN邊緣節(jié)點(diǎn)也存在著一套緩存機(jī)制。CDN邊緣節(jié)點(diǎn)緩存策略因服務(wù)商不同而不同,但一般都會(huì)遵循h(huán)ttp標(biāo)準(zhǔn)協(xié)議,通過http響應(yīng)頭中的
Cache-control: max-age 的字段來設(shè)置CDN邊緣節(jié)點(diǎn)數(shù)據(jù)緩存時(shí)間。

當(dāng)瀏覽器向CDN節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)時(shí),CDN節(jié)點(diǎn)會(huì)判斷緩存數(shù)據(jù)是否過期,若緩存數(shù)據(jù)并沒有過期,則直接將緩存數(shù)據(jù)返回給客戶端;否則,CDN節(jié)點(diǎn)就會(huì)向服務(wù)器發(fā)出回源請(qǐng)求,從服務(wù)器拉取最新數(shù)據(jù),更新本地緩存,并將最新數(shù)據(jù)返回給客戶端。 CDN服務(wù)商一般會(huì)提供基于文件后綴、目錄多個(gè)維度來指定CDN緩存時(shí)間,為用戶提供更精細(xì)化的緩存管理。

CDN 優(yōu)勢(shì)
CDN節(jié)點(diǎn)解決了跨運(yùn)營(yíng)商和跨地域訪問的問題,訪問延時(shí)大大降低。
大部分請(qǐng)求在CDN邊緣節(jié)點(diǎn)完成,CDN起到了分流作用,減輕了源服務(wù)器的負(fù)載。

http請(qǐng)求報(bào)文(request)
請(qǐng)求行
請(qǐng)求方法  空格  URL 空格  協(xié)議版本 回車符 換行符
請(qǐng)求頭(通用信息頭、請(qǐng)求頭、實(shí)體頭)
頭部字段名 冒號(hào)  值  回車鍵 換行符
...
頭部字段名 冒號(hào)  值  回車鍵 換行符
空行
回車符   換行符
實(shí)體主體(只有post請(qǐng)求有)
主體

http響應(yīng)報(bào)文(response)
狀態(tài)行
協(xié)議版本  空格  狀態(tài)碼 空格  狀態(tài)碼描述 回車符 換行符
響應(yīng)頭部
頭部字段名 冒號(hào)  值   回車符 換行符
...
頭部字段名 冒號(hào)  值   回車符 換行符
空行
回車符   換行符
響應(yīng)正文
正文

瀏覽器初次向服務(wù)器發(fā)起請(qǐng)求后拿到請(qǐng)求結(jié)果,會(huì)根據(jù)響應(yīng)報(bào)文中HTTP頭的緩存標(biāo)識(shí),決定是否緩存返回的結(jié)果,是則將請(qǐng)求結(jié)果和緩存標(biāo)識(shí)存入瀏覽器緩存中

瀏覽器每次發(fā)起請(qǐng)求,都會(huì)現(xiàn)在瀏覽器緩存中查找該請(qǐng)求的結(jié)果以及緩存標(biāo)識(shí)
瀏覽器                瀏覽器緩存        服務(wù)器

——————第一次發(fā)起http請(qǐng)求——————>

<——沒有該請(qǐng)求的緩存結(jié)果和緩存標(biāo)識(shí)————

——————————————發(fā)起http請(qǐng)求——————————————>

<——————————返回該請(qǐng)求結(jié)果和緩存規(guī)則————————————

——將請(qǐng)求結(jié)果和緩存標(biāo)識(shí)存入瀏覽器緩存——>

強(qiáng)制緩存就是向?yàn)g覽器緩存查找結(jié)果,并根據(jù)該結(jié)果的緩存規(guī)則來決定是否使用該緩存結(jié)果的過程

強(qiáng)制緩存的情況分為三種:
1、不存在該緩存結(jié)果和緩存標(biāo)識(shí),強(qiáng)制緩存失效,直接向服務(wù)器發(fā)起請(qǐng)求
2、存在該緩存結(jié)果和緩存標(biāo)識(shí),但結(jié)果已經(jīng)失效,強(qiáng)制緩存失效,使用協(xié)商緩存
3、存在該緩存結(jié)果和緩存標(biāo)識(shí),且該結(jié)果沒有失效,強(qiáng)制緩存生效,直接返回該結(jié)果

控制強(qiáng)制緩存的字段:Expires,Cache-Control

Expires 是 HTTP/1.0 控制緩存的字段,值為服務(wù)器返回該請(qǐng)求的結(jié)果緩存時(shí)間
即再次發(fā)送請(qǐng)求是,客戶端時(shí)間 小于 Expires的值,直接使用緩存結(jié)果

Cache-Control 是HTTP/1.1的規(guī)則,主要用于控制網(wǎng)頁(yè)緩存,主要取值為:
public:所有的內(nèi)容都緩存(客戶端和代理服務(wù)器都可以緩存)
private:所有內(nèi)容只有客戶端可以緩存(默認(rèn)值)
no-cache:客戶端緩存內(nèi)容,但是是否使用緩存則需要經(jīng)過協(xié)商緩存來驗(yàn)證決定
no-store:即不使用強(qiáng)制緩存,也不使用協(xié)商緩存
max-age=xxx:緩存內(nèi)容將在xxx秒后失效

Expires 是一個(gè)絕對(duì)值
Cache-Control 中 max-age 是相對(duì)值,解決了 Expires時(shí)期 服務(wù)端與客戶端 可能出現(xiàn)時(shí)間差的問題

注:Expires和Cache-Control同時(shí)存在時(shí),只有Cache-Control生效

協(xié)商緩存就是強(qiáng)制緩存失效后,瀏覽器攜帶緩存標(biāo)識(shí)向服務(wù)器發(fā)起請(qǐng)求,由服務(wù)器根據(jù)緩存標(biāo)識(shí)決定是否使用緩存的過程

協(xié)商緩存的兩種情況:
1、協(xié)商緩存生效,返回304,繼續(xù)使用緩存
過程:
瀏覽器                 瀏覽器緩存     服務(wù)器

————————發(fā)起http請(qǐng)求————————>

<——該請(qǐng)求的緩存結(jié)果失效,只返回緩存標(biāo)識(shí)——

————————攜帶該資源的緩存標(biāo)識(shí),發(fā)起http請(qǐng)求————————>

<—————————————304,該資源無更新————————————

——————獲取該請(qǐng)求的緩存結(jié)果——————>

<——————返回該請(qǐng)求的緩存結(jié)果——————

2、協(xié)商緩存失敗,返回200和請(qǐng)求結(jié)果
過程:
瀏覽器                 瀏覽器緩存     服務(wù)器

————————發(fā)起http請(qǐng)求————————>

<——該請(qǐng)求的緩存結(jié)果失效,只返回緩存標(biāo)識(shí)——

————————攜帶該資源的緩存標(biāo)識(shí),發(fā)起http請(qǐng)求————————>

<————————200,資源已更新,重新返回請(qǐng)求和結(jié)果———————

——將該請(qǐng)求結(jié)果和緩存標(biāo)識(shí)存入瀏覽器緩存中—>

協(xié)商緩存的標(biāo)識(shí)也是在響應(yīng)報(bào)文的HTTP頭中和請(qǐng)求結(jié)果一起返回給瀏覽器的

控制協(xié)商緩存的字段:
(1) Last-Modified/If-Modified-Since:Last-Modified是服務(wù)器響應(yīng)請(qǐng)求是,返回該資源文件在服務(wù)器最后被修改的時(shí)間;If-Modified-Since再次發(fā)起請(qǐng)求時(shí),攜帶上次返回的Last-Modified的值,服務(wù)器將該字段值與該資源最后修改時(shí)間對(duì)比,決定是否用緩存
(2)Etag/If-None-Match:Etag服務(wù)器響應(yīng)請(qǐng)求時(shí),返回當(dāng)前資源文件的一個(gè)唯一標(biāo)識(shí),由服務(wù)器生成之;If-None-Match是再次發(fā)起請(qǐng)求時(shí),攜帶上次返回的唯一標(biāo)識(shí)Etag的值,服務(wù)器收到后,將該字段值與該資源在服務(wù)器上的Etag對(duì)比,一致 則返回304,否則返回200

注:Etag/If-None-Match優(yōu)先級(jí)高于Last-Modified/If-Modified-Since,同時(shí)存在時(shí)只有Etag/If-None-Match生效

瀏覽器緩存分為:內(nèi)存緩存 和 硬盤緩存

內(nèi)存緩存特性:
(1)快速讀取:內(nèi)存緩存會(huì)將編譯解析后的文件,存入該進(jìn)程的內(nèi)存中,便于下次運(yùn)行時(shí)快速讀取
(2)時(shí)效性:一旦關(guān)閉進(jìn)程,進(jìn)程內(nèi)存清空

硬盤緩存特性:
永久性:直接寫入硬盤文件中
復(fù)雜、緩慢:讀取緩存對(duì)該緩存存放的硬盤文件進(jìn)行I/O操作,重新解析

from memory cache:使用內(nèi)存中的緩存

from disk cache:使用硬盤中的緩存

瀏覽器讀取順序:memory ——> disk

瀏覽器將js和圖片等文件解析執(zhí)行后直接存入內(nèi)存緩存中,F(xiàn)5刷新頁(yè)面時(shí),from memory cache(使用內(nèi)存中的緩存)
css文件存入硬盤中,F(xiàn)5刷新頁(yè)面時(shí),from disk cache(使用硬盤中的緩存)

參考文章
https://segmentfault.com/a/1190000017962411
https://www.cnblogs.com/chengxs/p/10396066.html

2、為什么蘋果瀏覽器返回一次刷新一次

您好,很高興為您解答:蘋果瀏覽器返回一次刷新一次是因?yàn)樗褂昧艘环N叫做“緩存機(jī)制”的機(jī)制,來提高瀏覽器的速度和性能,從而可以節(jié)省網(wǎng)絡(luò)數(shù)據(jù),減少下載的內(nèi)容,提升瀏覽器的體驗(yàn)。緩存機(jī)制的關(guān)鍵一步就是檢測(cè)網(wǎng)頁(yè)上的內(nèi)容是否有變化,以決定是否需要重新加載網(wǎng)頁(yè)。蘋果瀏覽器會(huì)把頁(yè)面緩存,如果有任何更改,就會(huì)立即重新加載網(wǎng)頁(yè),這樣可以保證你的網(wǎng)頁(yè)有最新內(nèi)容出來。這也就是為什么蘋果瀏覽器總是返回一次刷新一次的原因。
希望可以幫到您,祝您生活愉快。 瀏覽器沒有緩存功能。蘋果瀏覽器返回刷新原因是,瀏覽器沒有緩存功能。每次打開一個(gè)網(wǎng)頁(yè)后,要返回上一頁(yè)的時(shí)候,都要重新加載。通常都是靜態(tài)的重新打開可以使搜索速度更快更流暢。

3、瀏覽器中的緩存

在我們使用瀏覽器訪問網(wǎng)頁(yè)的過程中,瀏覽器經(jīng)常會(huì)緩存各種網(wǎng)頁(yè)中的內(nèi)容。當(dāng)再次訪問同一個(gè)網(wǎng)頁(yè)時(shí),可以發(fā)現(xiàn)部分內(nèi)容是從緩存直接讀取的。
查看HTTP的響應(yīng)信息,就能發(fā)現(xiàn)一些端倪。比如響應(yīng) 200 from cache; 304 not modify 等等。
下面對(duì)瀏覽器使用緩存的各種情形做一下分析:

Pragma是HTTP 1.0版本的一個(gè)參數(shù),在HTTP 1.1版本里面這個(gè)參數(shù)也會(huì)生效,如果不想瀏覽器緩存網(wǎng)頁(yè)的內(nèi)容,可以在 Response header 里面加上 :Pragma: no-cache。

Cache-Control是HTTP 1.1版本新增的一個(gè)參數(shù)。

Cache-Control:no-store 不允許緩存

Cache-Control:no-cache 不允許直接使用緩存,需要先發(fā)起請(qǐng)求和服務(wù)器協(xié)商(這個(gè)經(jīng)常被誤認(rèn)為是不允許緩存,實(shí)際上它的作用是讓瀏覽器在使用緩存前先請(qǐng)求服務(wù)端一次,確認(rèn)內(nèi)容是否有更新)

這樣的響應(yīng)代表沒有跟服務(wù)端進(jìn)行交互,內(nèi)容是直接從本地讀取的。

Expires和Cache-control: max-age= 有類似的作用,都是指定緩存內(nèi)容的有效周期,Expires指定的格式是格林威治時(shí)間,max-age則是秒數(shù)。

服務(wù)端也可以在 Response header 里加上 Last-Modified,它的格式是格林威治時(shí)間,再次請(qǐng)求時(shí),瀏覽器的 Request header 中會(huì)多出一個(gè)叫 If-Modified-Since的值,通過比較這兩個(gè)值是否一致來決定是否返回304。

ETag的用法和 Last-Modified 類似,值是一種文件指紋。比如:ETag:"5a3ccff0-5dc"。
服務(wù)端在 Response header 里加上 ETag,再次請(qǐng)求時(shí),瀏覽器的 Request header 中會(huì)多出一個(gè)叫 If-None-Match的值,通過比較這兩個(gè)值是否一致來決定是否返回304。

總體來說,瀏覽器使用緩存時(shí)有兩種表現(xiàn):
1.直接從本地讀取,不與服務(wù)端有交互,就是 200 OK (from memory cache)。
2.請(qǐng)求一次服務(wù)端,查看本地緩存是否生效,這種方式叫 協(xié)商緩存。如果服務(wù)端判斷緩存有效,將不返回完整內(nèi)容,而是返回 304 Not Modified。

在優(yōu)先級(jí)上 Pragma > Cache-Control > Expires。

4、web前端緩存機(jī)制

前端緩存機(jī)制有多種,如瀏覽器緩存、CDN緩存、DNS緩存、代理服務(wù)器緩存等。

CDN全稱是Content Delivery Network,即內(nèi)容分發(fā)網(wǎng)絡(luò)。CDN的原理是將資源存放在各地的緩存服務(wù)器上,當(dāng)用戶請(qǐng)求資源時(shí),從就近的服務(wù)器上返回緩存的資源,而不需要每次都從源服務(wù)器獲取,減輕源服務(wù)器的壓力,又能提升用戶的訪問速度。

瀏覽器可以將用戶請(qǐng)求的資源進(jìn)行緩存,存放在本地。瀏覽器緩存一般通過請(qǐng)求頭來設(shè)置。
與瀏覽器緩存有關(guān)的頭部有:

瀏覽器會(huì)將服務(wù)器的域名與IP地址的映射緩存在本地,這樣用戶在訪問網(wǎng)站時(shí),不用每次都去查詢DNS映射表。

在瀏覽器和服務(wù)器之間架設(shè)的一個(gè)服務(wù)器 ,這個(gè)代理服務(wù)器會(huì)幫助瀏覽器去請(qǐng)求頁(yè)面,然后將頁(yè)面進(jìn)行處理和壓縮(例如壓縮圖片和文件),使頁(yè)面變小,再傳輸給瀏覽器。大部分代理服務(wù)器都有緩存的功能,如果瀏覽器所請(qǐng)求的文件在它本機(jī)中存在且是最新的,就不需要再?gòu)脑捶?wù)器請(qǐng)求數(shù)據(jù),提高了瀏覽速度。

在瀏覽某個(gè)頁(yè)面時(shí),瀏覽器會(huì)判斷頁(yè)面的關(guān)聯(lián)內(nèi)容,進(jìn)行預(yù)加載。用戶在瀏覽A頁(yè)面時(shí),就加載好B頁(yè)面,這樣當(dāng)用戶去訪問B頁(yè)面時(shí),B頁(yè)面很快就出來,提升了用戶體驗(yàn)。但這個(gè)機(jī)制有一定的缺陷,就是預(yù)判不一定準(zhǔn)確,可能會(huì)造成流量和資源的浪費(fèi)。

5、北大青鳥java培訓(xùn):瀏覽器緩存功能在使用上都有哪些類型?

緩存功能的存在,讓我們?cè)跒g覽網(wǎng)頁(yè)和訪問防止的時(shí)候可以更快的加載我們需要的內(nèi)容,而今天北大青鳥http://www.kmbdqn.cn/就通過案例分析來了解一下,瀏覽器的緩存功能在使用上都有哪些類型。
1.ServiceWorkerServiceWorker是運(yùn)行在瀏覽器背后的獨(dú)立線程,一般可以用來實(shí)現(xiàn)緩存功能。
使用ServiceWorker的話,傳輸協(xié)議必須為HTTPS。
因?yàn)镾erviceWorker中涉及到請(qǐng)求攔截,所以必須使用HTTPS協(xié)議來保障安全。
ServiceWorker的緩存與瀏覽器其他內(nèi)建的緩存機(jī)制不同,它可以讓我們自由控制緩存哪些文件、如何匹配緩存、如何讀取緩存,并且緩存是持續(xù)性的。
ServiceWorker實(shí)現(xiàn)緩存功能一般分為三個(gè)步驟:先需要先注冊(cè)ServiceWorker,然后監(jiān)聽到install事件以后就可以緩存需要的文件,那么在下次用戶訪問的時(shí)候就可以通過攔截請(qǐng)求的方式查詢是否存在緩存,存在緩存的話就可以直接讀取緩存文件,否則就去請(qǐng)求數(shù)據(jù)。
當(dāng)ServiceWorker沒有命中緩存的時(shí)候,我們需要去調(diào)用fetch函數(shù)獲取數(shù)據(jù)。
也就是說,如果我們沒有在ServiceWorker命中緩存的話,會(huì)根據(jù)緩存查找優(yōu)先級(jí)去查找數(shù)據(jù)。
但是不管我們是從MemoryCache中還是從網(wǎng)絡(luò)請(qǐng)求中獲取的數(shù)據(jù),瀏覽器都會(huì)顯示我們是從ServiceWorker中獲取的內(nèi)容。
2.MemoryCacheMemoryCache也就是內(nèi)存中的緩存,主要包含的是當(dāng)前中頁(yè)面中已經(jīng)抓取到的資源,例如頁(yè)面上已經(jīng)下載的樣式、腳本、圖片等。
讀取內(nèi)存中的數(shù)據(jù)肯定比磁盤快,內(nèi)存緩存雖然讀取高效,可是緩存持續(xù)性很短,會(huì)隨著進(jìn)程的釋放而釋放。
一旦我們關(guān)閉Tab頁(yè)面,內(nèi)存中的緩存也就被釋放了。
那么既然內(nèi)存緩存這么高效,我們是不是能讓數(shù)據(jù)都存放在內(nèi)存中呢?這是不可能的。
計(jì)算機(jī)中的內(nèi)存一定比硬盤容量小得多,操作系統(tǒng)需要精打細(xì)算內(nèi)存的使用,所以能讓我們使用的內(nèi)存必然不多。

轉(zhuǎn)載請(qǐng)帶上網(wǎng)址:http://www.javbus2020.com/posjitwo/118930.html

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。
聯(lián)系我們
訂購(gòu)聯(lián)系:小莉
微信聯(lián)系方式
地址:深圳市寶安區(qū)固戍聯(lián)誠(chéng)發(fā)產(chǎn)業(yè)園木星大廈

公司地址:深圳市寶安區(qū)固戍聯(lián)誠(chéng)發(fā)產(chǎn)業(yè)園木星大廈

舉報(bào)投訴 免責(zé)申明 版權(quán)申明 廣告服務(wù) 投稿須知 技術(shù)支持:第一POS網(wǎng) Copyright@2008-2030 深圳市慧聯(lián)實(shí)業(yè)有限公司 備案號(hào):粵ICP備18141915號(hào)

主站蜘蛛池模板: 梅州市| 克什克腾旗| 资溪县| 奉贤区| 获嘉县| 尖扎县| 同仁县| 定结县| 武威市| 屯门区| 小金县| 泗洪县| 乐至县| 阿鲁科尔沁旗| 乌审旗| 中卫市| 卓资县| 安吉县| 北流市| 英吉沙县| 铜川市| 社会| 盘山县| 沂水县| 田阳县| 四川省| 万宁市| 万州区| 石阡县| 合山市| 怀集县| 中牟县| 阿拉善右旗| 广灵县| 临潭县| 揭阳市| 同仁县| 固始县| 介休市| 周至县| 卓尼县|