国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

瀏覽器緩存(強緩存、協(xié)商緩存)

這篇具有很好參考價值的文章主要介紹了瀏覽器緩存(強緩存、協(xié)商緩存)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、瀏覽器緩存

這一點主要解析瀏覽器緩存以及緩存機制的詳細過程。

與緩存相關(guān)的狀態(tài)碼:

200 ok?? ?從瀏覽器下載的最新資源
200 (from memory cache)?? ?不進行http請求,直接從瀏覽器內(nèi)存中讀取的資源,頁面關(guān)閉,則資源釋放,一般一些腳本、圖片、文字等會存在內(nèi)存中
200 (from disk cache)?? ?不進行http請求,直接從磁盤中讀取的資源,頁面關(guān)閉,資源仍然存在,除非清除緩存,一般一些非腳本文件會存在磁盤中,例如html、css文件
304 (not modified)?? ?請求了服務器,但是由于服務器資源沒有更新,所以仍使用內(nèi)存中的資源
緩存相關(guān)的http header介紹:

http header?? ?介紹
cache-control?? ?response header or request header;指定緩存機制,優(yōu)先級最高
expires?? ?response header or request header;指定緩存的過期時間(現(xiàn)在瀏覽器一般設(shè)置cache-control,設(shè)置expires是為了兼容http1.0)
last-modified?? ?response header;資源的最后修改時間
etag?? ?response header;資源的唯一標識符
if-modified-since?? ?request header;緩存的服務器資源的最后修改時間
if-none-match?? ?request header;緩存的服務器資源的唯一標識
1.1強緩存:
不會進行http請求,讀取的是內(nèi)存中的資源,直到緩存失效

涉及到的狀態(tài)碼:

200(from memory cache)
200(from disk cache)
涉及到的http header:?

cache-control
expires
當瀏覽器對某個資源的請求命中了強緩存時,返回的http狀態(tài)碼為200,在chrome開發(fā)者工具中的network中的size會顯示from cache

強緩存時利用Expires或者Cache-Control這兩個http header實現(xiàn)的,都用來表示資源在客戶端緩存的有效期

Expires是http1.0提出的一個header,描述的是一個絕對時間,由服務器返回,用GMT格式的字符串表示,如Exprires:Thu,31 Dec 2037 23:55:55 GMT

緩存過程:

1、瀏覽器第一次跟服務器請求一個資源,服務器在返回這個資源的同時,在response的header加上Expires的header

2、瀏覽器在接收到這個資源后,會把這個資源連同所有的response header一起緩存下來,所以緩存命中的請求返回的header并不是來自服務器,而是來自之前緩存的header

3、瀏覽器再請求這個資源時,先從緩存中尋找,找到這個資源后,拿出Expires跟當前的請求時間比較,如果請求時間在Expires指定的時間之前,就能命中緩存,否則就不行。

4、如果緩存沒有命中,瀏覽器直接從服務器加載資源時,Expires Header在重新加載的時候會被更新

Expires是服務器返回的一個絕對時間,在服務器時間與客戶端時間相差較大時,緩存管理容易出現(xiàn)問題,比如隨意修改下客戶端時間,就能影響緩存命中的結(jié)果,所以在http1.1的時候,提出了一個新的header,也就是Cache-Control,這是一個相對時間,在進行緩存命中的時候,都是利用客戶端時間進行判斷,因此更有效安全一些,在配置緩存的時候,以秒為單位,用數(shù)值表示:如:Cache-Control:max-age=315360000,它的緩存過程是:

1、瀏覽器第一次跟服務器請求一個資源,服務器在返回這個資源的同時,在response的header加上Cache-Control的header

2、瀏覽器在接收到這個資源的時候,會把這個資源連同所有response header一起緩存下來

3、瀏覽器再次請求這個資源的時候,先從緩存中尋找,找到這個資源之后,再拿這個過期時間跟當前的請求時間比較,如果請求時間在過期時間之前,就能命中緩存,否則就不行。

4、如果緩存沒有命中,瀏覽器直接從服務器加載資源時,Cache-Control在重新加載的時候會被更新

cache-control
優(yōu)先級最高,所有的緩存機制看到 cache-control 都要服從它;在請求頭和響應頭中都可以設(shè)置;cache-control有多種設(shè)置,設(shè)置如下:

cache-control?? ?描述
no-store?? ?請求和響應都不緩存(禁用)
no-cache?? ?協(xié)商緩存,相當于cache-control:max-age=0(每次取之前先跟服務器溝通比較)
max-age?? ?指定緩存內(nèi)容將在xxx秒后失效
public?? ?所有內(nèi)容都將被緩存(客戶端和代理服務器都可緩存)
private?? ?所有內(nèi)容只有客戶端可以緩存,Cache-Control的默認取值
注意:這個header可以只用一個,也可以同時用兩個,同時存在時,Cache-Control優(yōu)先級高于Expires

1.2 強緩存的管理

兩種方式來設(shè)置是否啟用強緩存:

1、通過代碼的方式,在web服務器返回的響應中添加Expires和Cache-Control Header

2、通過配置web服務器的方式,讓web服務器在響應資源的時候統(tǒng)一添加Expires和Cache-Control Header

1.3 強緩存的應用

強緩存是前端性能優(yōu)化最有力的工具,對于有大量靜態(tài)資源的網(wǎng)頁,一定要利用強緩存,提高響應速度,通常是為這些靜態(tài)資源全部配置一個超時時間超長的Expires或Cache-Control,這樣用戶只會在第一次訪問網(wǎng)站時加載靜態(tài)資源,其他時間只要緩存沒有失效并且用戶沒有強制刷新的條件下都會從緩存中加載。

然而這種緩存配置方式會帶來一個問題,就是當資源更新時,客戶端由于有緩存不會向服務器請求最新的資源,這個問題已有解決方案:

通過更新頁面中引用的資源路徑,讓瀏覽器主動放棄緩存,加載新資源。

但要實現(xiàn)有更新的文件才需要瀏覽器重新加載,因此必須讓url的修改與文件內(nèi)容相關(guān)聯(lián),利用數(shù)據(jù)摘要算法對文件求摘要信息,摘要信息與文件內(nèi)容一一對應,這一點許多前端構(gòu)建工具都做到了,如webpack

1.4 瀏覽器默認緩存使開發(fā)環(huán)境下常因為資源沒有及時更新而看不到效果

解決方法:

1、ctrl+F5

2、瀏覽器隱私模式開發(fā)

3、chrome開發(fā)者工具里將Disable cache選項打勾,阻止緩存

4、在開發(fā)階段,給資源加上一個動態(tài)的參數(shù),由于每次資源的修改都要更新引用的位置,同時修改參數(shù)的值,所以操作起來不是很方便,除非是在動態(tài)頁面比如jsp里開發(fā)就可以用服務器變量來解決,或者用前端構(gòu)建工具來處理這個參數(shù)修改的問題。

5、如果資源引用的頁面被嵌入到了一個iframe里面,可以在iframe的區(qū)域右鍵重新加載該頁面

6、如果緩存問題出現(xiàn)在ajax請求中,最有效的解決辦法就是ajax的請求地址追加隨機數(shù)

7、動態(tài)設(shè)置iframe的src時,有可能因為緩存問題導致看不到最新效果,在src后面添加隨機數(shù)即可

8、通過前端開發(fā)工具grunt gulp等的插件來啟動一個靜態(tài)服務器,則在這個服務器下所有資源返回的response header中,Cache-Control始終被設(shè)置為不緩存

1.5 發(fā)布問題

發(fā)布問題:若頁面和它引用的資源路徑同時更新了,不管是先部署頁面還是先部署資源都會帶來各種問題,這是由于資源是覆蓋式發(fā)布的,即用待發(fā)布資源覆蓋已發(fā)布資源。

解決辦法就是實現(xiàn)非覆蓋式發(fā)布:把有修改的資源文件作為一個新的文件發(fā)布,不對已有的資源文件進行覆蓋,這樣用戶還可以請求舊的資源文件,不至于發(fā)生頁面錯亂的問題,這樣先部署靜態(tài)資源,再覆蓋式部署頁面,等到用戶訪問新頁面的時候,新的資源文件也已發(fā)布,就可以正確請求,即可解決問題。

2.1 協(xié)商緩存
涉及到的狀態(tài)碼:

304 not modified
200 ok
涉及到的請求頭

etag / ig-none-match
last-modified / if-modified-since
如果命中協(xié)商緩存,請求響應返回的http狀態(tài)為304以及一個Not Modified字符串,協(xié)商緩存利用的是【Last-Modified、If-Modified-Since】、【ETag、If-None-Match】這兩對header來管理的。

【Last-Modified、If-Modified-Since】:

1、瀏覽器第一次跟服務器請求一個資源,服務器在返回這個資源時,在response的header加上Last-Modified的header,表示這個資源在服務器上的最后修改時間

2、瀏覽器再次向服務器請求這個資源時,在request的header加上If-Modified-Since的header,這個header的值就是上一次請求時返回的Last-Modified的值

3、服務器再次收到資源請求時,根據(jù)瀏覽器傳過來If-Modified-Since和資源在服務器上的最后修改時間判斷資源是否有變化,如果沒有變化則返回304 Not Modified,但是不會返回資源內(nèi)容,如果有變化就返回資源內(nèi)容,當服務器返回304 Not Modified的響應時,response header中不會再添加Last-Modified的header,因為資源沒有變化,Last-Modified的值也不變

4、瀏覽器收到304的響應后,就會從緩存中加載資源

5、如果協(xié)商緩存沒有命中,瀏覽器直接從服務器加載資源時,Last-Modofied header在重新加載的時候會被更新,下次請求時,If-Modified-Since會采用上一次返回的Last-Modified的值

這一對header都是根據(jù)服務器時間返回的,有時候會有服務器資源有變化,但最后修改時間卻沒有變化的情況,因此有了

【Etag、If-None-Match】:

1、瀏覽器第一次向服務器請求一個資源,服務器在返回這個資源的同時,在response的header加上ETag的header,這個header是服務器根據(jù)當前請求的資源生成的一個唯一標識,是一個字符串,只要資源內(nèi)容發(fā)生改變,這個字符串也會改變,跟時間沒有關(guān)系

2、瀏覽器再次請求這個資源的時候,在request的header上加上If-None-Match的header。這個header的值是上一次請求返回的ETag的值

3、服務器再次收到資源請求時,根據(jù)客戶端傳過來的If-None-Match和重新生成的該資源的新的ETag做比較,相同則返回304 Not Modified,不會返回資源內(nèi)容,如果不同則返回資源內(nèi)容,但這里即使資源沒有發(fā)生變化,也會返回ETag,因為這個ETag重新生成過,即使沒有ETag沒有變化

4、瀏覽器收到304響應后,就從緩存中加載資源

etag兩種類型:

強etag:

不論實體發(fā)生多么細微的變化都會改變其值

強ETag表示形式:"22FAA065-2664-4197-9C5E-C92EA03D0A16"。

弱etag:

弱 ETag 值只用于提示資源是否相同。只有資源發(fā)生了根本改變產(chǎn) 生差異時才會改變 ETag 。這時,會在字段值最開始處附加 W/。

弱ETag表現(xiàn)形式:W/"22FAA065-2664-4197-9C5E-C92EA03D0A16"。

注意:當etag和last-modified同時存在時則以etag為準

2.2 協(xié)商緩存的管理

一般服務器上的【Last-Modified、If-Modified-Since】和【Etag、If-None-Match】會同時啟用,協(xié)商緩存需要配合強緩存使用文章來源地址http://www.zghlxwxcb.cn/news/detail-854888.html

到了這里,關(guān)于瀏覽器緩存(強緩存、協(xié)商緩存)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 瀏覽器緩存原理

    瀏覽器緩存原理

    使用 HTTP 緩存的好處 :通過復用緩存資源,減少了客戶端等待服務器響應的時間和網(wǎng)絡流量,同時也能緩解服務器端的壓力??梢燥@著的提升網(wǎng)站的應用性能。 HTTP 緩存策略分為兩種 :強制緩存、協(xié)商緩存。 強制緩存 瀏覽器緩存沒有過期的時候可以直接決定使用緩存。 強

    2023年04月27日
    瀏覽(23)
  • 瀏覽器緩存機制

    瀏覽器緩存機制

    什么是瀏覽器緩存 瀏覽器緩存就是瀏覽器根據(jù) url 第一次訪問網(wǎng)站之后,將網(wǎng)站的 html、css、js、圖片等文件復制一份保留到瀏覽器中,當你二次訪問這個 url 的網(wǎng)站時,如果網(wǎng)站沒有明確表示有更新時,瀏覽器直接在緩存中查找內(nèi)容,不會再次請求網(wǎng)頁內(nèi)容,只有網(wǎng)頁明確表

    2024年02月04日
    瀏覽(27)
  • 前端---需要了解瀏覽器相關(guān)知識--瀏覽器請求服務器資源---緩存

    前端---需要了解瀏覽器相關(guān)知識--瀏覽器請求服務器資源---緩存

    掘金1:瀏覽器緩存 掘金2 :瀏覽器緩存 跟別人怎么講,從大的說:緩存的原理是什么? 再說什么是瀏覽器緩存? 瀏覽器緩存 請求(靜態(tài)資源 | 動態(tài)資源) 一、緩存是什么? 二、為什么? 瀏覽器是如何判斷是否使用緩存的??第一次請求網(wǎng)頁 第二次請求相同網(wǎng)頁: 三、怎

    2024年02月12日
    瀏覽(29)
  • 真的只是簡單了解下瀏覽器緩存

    真的只是簡單了解下瀏覽器緩存

    當我們打開一個頁面時,會向服務端發(fā)起很多次請求,如下圖打開百毒首頁,發(fā)起了HTML、各種圖片、JS、CSS等資源共72次請求。這里面很多資源并不會頻繁變化,每次打開頁面都重新請求下載,就很浪費了。 瀏覽器緩存也稱為HTTP緩存,HTTP緩存 簡單理解就是本地(瀏覽器)緩

    2023年04月25日
    瀏覽(18)
  • 記錄--關(guān)于瀏覽器緩存策略這件事兒

    記錄--關(guān)于瀏覽器緩存策略這件事兒

    我們打開百度這個網(wǎng)站并刷新多次時時,注意到百度的logo是沒有每次都加載一遍的。我們知道圖片是img標簽中的src屬性加載出來的,這也需要瀏覽器去請求圖片資源的,那么為什么刷新多次瀏覽器只請求了一次圖片資源呢?這就涉及到了 瀏覽器的緩存策略 了,這張圖片被瀏

    2024年02月13日
    瀏覽(20)
  • 瀏覽器刷新頁面,緩存的處理方式,強制刷新

    刷新頁面的緩存處理的方式對比 地址欄回車/直接訪問 URL 保留強緩存,保留協(xié)商緩存,走正常請求流程 點擊瀏覽器刷新按鈕 忽略強緩存,保留協(xié)商緩存 按f5【command + r】 忽略強緩存,保留協(xié)商緩存 ctrl + f5 【command + shift + r 】 忽略強緩存,忽略協(xié)商緩存,從服務器端請求最

    2024年02月02日
    瀏覽(94)
  • 瀏覽器緩存引發(fā)的odoo前端報錯

    瀏覽器緩存引發(fā)的odoo前端報錯

    前兩天,跑了一個odoo16項目,莫名其妙的前端報錯, moment.js 報的錯, 這是一個時間庫,不是我自己寫的代碼,我也沒做過任何修改,搞不清楚為什么報錯。以為是odoo的bug,所以從gitee下載了odoo16最新的代碼,測試了一下還是報錯。 后來換成了一個非常老的odoo16版本,這回不

    2024年02月02日
    瀏覽(38)
  • 瀏覽器有哪幾種緩存?各種緩存之間的優(yōu)先級

    在瀏覽器中,有以下幾種常見的緩存: 1、強制緩存 :通過設(shè)置 Cache-Control 和 Expires 等響應頭實現(xiàn),可以讓瀏覽器直接從本地緩存中讀取資源而不發(fā)起請求。 2、協(xié)商緩存: 通過設(shè)置 Last-Modified 和 ETag 等響應頭實現(xiàn),可以讓瀏覽器發(fā)送條件請求,詢問服務器是否有更新的資源

    2024年02月11日
    瀏覽(22)
  • 【Vue】瀏覽器緩存sessionStorage、localStorage、Cookie

    【Vue】瀏覽器緩存sessionStorage、localStorage、Cookie

    目錄 一、sessionStorage 1、簡介 2、方法 3、代碼示例 a、存取單個數(shù)據(jù) b、存取對象 c、清除數(shù)據(jù) 二、localStorage 1、簡介 2、方法 3、代碼示例 三、cookie 1、簡介 2、方法 3、代碼示例 四、三者區(qū)別 1、sessionStorage與localStorage區(qū)別 2、sessionStorage、localStorage、cookie區(qū)別 五、往期相關(guān)優(yōu)

    2024年02月07日
    瀏覽(31)
  • 對于隨機生成圖片接口瀏覽器走緩存的問題

    對于隨機生成圖片接口瀏覽器走緩存的問題

    前提場景 目前有一個api 他可以隨機生成一張圖片,我通過v-for循環(huán)一個Array渲染出來幾個img 并且都調(diào)用了該接口,但是每個img都是一樣的圖片 具體代碼如下 圖片如下所示 只需要給api加個query,因為接口后端不會讀這個query所以不影響,又因為有了這個query使每個請求接口都不

    2024年01月21日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包