国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

瀏覽器緩存那些事

高勝山 / 2753人閱讀

摘要:瀏覽器讀取資源的流程瀏覽器在加載資源時,根據請求頭的和判斷是否命中強緩存,是則直接從緩存讀取資源,不會發請求到服務器。實際上是會被緩存的,只不過每次在向客戶端瀏覽器提供響應數據時,緩存都要向服務器評估緩存響應的有效性。

瀏覽器讀取資源的流程

瀏覽器在加載資源時,根據請求頭的expires和cache-control判斷是否命中強緩存,是則直接從緩存讀取資源,不會發請求到服務器。

如果沒有命中強緩存,瀏覽器一定會發送一個請求到服務器,通過last-modified或者etag驗證資源是否命中協商緩存,如果命中,服務器會將這個請求返回,但是不會返回這個資源的數據,依然是從緩存中讀取資源

如果前面兩者都沒有命中,直接從服務器加載資源

強制緩存(不發送請求)

如何設置
通常我們會同時設置expires和cache-control兩種,保證無論在http1還是1.1的情況下都有效

expires
過期時間,如果設置了時間,則瀏覽器會在設置的時間內直接讀取緩存,不再請求

cache-control

http1.1新標準,包括這些屬性:

(1)max-age:用來設置資源(representations)可以被緩存多長時間,單位為秒;
(2)s-maxage:和max-age是一樣的,不過它只針對代理服務器緩存而言;
(3)public:指示響應可被任何緩存區緩存;
(4)private:只能針對個人用戶,而不能被代理服務器緩存;
(5)no-cache:強制客戶端直接向服務器發送請求,也就是說每次請求都必須向服務器發送。服務器接收到請求,然后判斷資源是否變更,是則返回新內容,否則返回304,未變更。這個很容易讓人產生誤解,使人誤以為是響應不被緩存。實際上Cache-Control:no-cache是會被緩存的,只不過每次在向客戶端(瀏覽器)提供響應數據時,緩存都要向服務器評估緩存響應的有效性。
(6)no-store:禁止一切緩存(這個才是響應不被緩存的意思)。

緩存的兩種表現形式

memory cache

來自于內存的數據,會隨著進程的結束而清除,讀取速度相對快(0ms)
一般存放腳本,圖片,字體等文件

disk cache

來自于硬盤的數據,不會隨著進程的結束而清除,讀取速度慢于memory cache(2-10ms 硬盤讀寫的IO操作)
一般存放css文件

根據經驗情況來看:瀏覽器的實際處理邏輯是這樣的

首次加載資源 -> 200 -> 關閉標簽頁
再次進入 -> 200 from disk cache -> 刷新 -> 200 from memory cache
(不過好像css都是from disk cache, base64都是from memory cache)

協商緩存(發送請求)

客戶端向服務端發送請求時候(沒有命中強制緩存),服務端會檢查是否有對應的標識,沒有則返回200并生成一個新的標識帶到header,下次在請求的時候服務端檢查到對應的這個標識并做相應的校驗,通過則返回304,讀取緩存。

Last-modify / If-modify-since

瀏覽器首次請求資源的時候,服務器會返回一個last-Modify到header中. Last-Modify 含義是最后的修改時間。
當瀏覽器再次請求的時候,request header會帶上 if-Modify-Since,該值為之前返回的 Last-Modify。服務器收到if-Modify-Since后,根據資源的最后修改時間(last-Modify)和該值(if-Modify-Since)進行比較,如果相等的話,則命中緩存,返回304,否則, 則會給出200響應,并且更新Last-Modify為新的值

Etag / If-none-match(http1.1規范)
ETag的原理和上面的last-modified是類似的。ETag對當前請求的資源做一個唯一的標識。該標識可以是一個字符串,文件的size,hash等。只要能夠合理標識資源的唯一性并能驗證是否修改過就可以了。ETag在服務器響應請求的時候,返回當前資源的唯一標識(它是由服務器生成的)。但是只要資源有變化,ETag會重新生成的。瀏覽器再下一次加載的時候會向服務器發送請求,會將上一次返回的ETag值放到request header 里的 if-None-Match里面去,服務器端只要比較客戶端傳來的if-None-Match值是否和自己服務器上的ETag是否一致,如果一致說明資源未修改過,因此返回304,如果不一致,說明修改過,因此返回200。并且把新的Etag賦值給if-None-Match來更新該值。

協商緩存兩種方式對比

在精度上,ETag要優先于 last-modified。

last-modified這種方式精度差在哪里:
a. 一些文件也許會周期性的更改,但是他的內容并不改變(僅僅改變的修改時間),這個時候我們并不希望客戶端認為這個文件被修改了
b. 某些文件修改非常頻繁,比如在秒以下的時間內進行修改,(比方說1s內修改了N次),If-Modified-Since能檢查到的粒度是s級的,這種修改無法判斷(或者說UNIX記錄MTIME只能精確到秒);

在性能上,Etag要遜于Last-Modified,Last-Modified需要記錄時間,而Etag需要服務器通過算法來計算出一個hash值。

在優先級上,服務器校驗優先考慮Etag。

如何設置index.html不被緩存
  
  

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104306.html

相關文章

  • 覽器緩存那些

    摘要:瀏覽器讀取資源的流程瀏覽器在加載資源時,根據請求頭的和判斷是否命中強緩存,是則直接從緩存讀取資源,不會發請求到服務器。實際上是會被緩存的,只不過每次在向客戶端瀏覽器提供響應數據時,緩存都要向服務器評估緩存響應的有效性。 瀏覽器讀取資源的流程 瀏覽器在加載資源時,根據請求頭的expires和cache-control判斷是否命中強緩存,是則直接從緩存讀取資源,不會發請求到服務器。 如果...

    muzhuyu 評論0 收藏0
  • 關于CDN那些

    摘要:對于前端性能優化我們不得不了解的幾個知識點信息今天我就來談談我對的理解是什么全稱是即內容分發網絡。將網站內容發布到接近用戶的服務器上。用戶訪問網站時,用戶訪問就近服務器,然后加載這些資源。 對于前端性能優化我們不得不了解的幾個知識點:CDN、HTTP header信息 今天我就來談談我對cdn的理解 1、CDN是什么:CDN全稱是Content Delivery Network,即內容...

    muddyway 評論0 收藏0
  • 關于CDN那些

    摘要:對于前端性能優化我們不得不了解的幾個知識點信息今天我就來談談我對的理解是什么全稱是即內容分發網絡。將網站內容發布到接近用戶的服務器上。用戶訪問網站時,用戶訪問就近服務器,然后加載這些資源。 對于前端性能優化我們不得不了解的幾個知識點:CDN、HTTP header信息 今天我就來談談我對cdn的理解 1、CDN是什么:CDN全稱是Content Delivery Network,即內容...

    韓冰 評論0 收藏0
  • 關于CDN那些

    摘要:對于前端性能優化我們不得不了解的幾個知識點信息今天我就來談談我對的理解是什么全稱是即內容分發網絡。將網站內容發布到接近用戶的服務器上。用戶訪問網站時,用戶訪問就近服務器,然后加載這些資源。 對于前端性能優化我們不得不了解的幾個知識點:CDN、HTTP header信息 今天我就來談談我對cdn的理解 1、CDN是什么:CDN全稱是Content Delivery Network,即內容...

    Astrian 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<