fiddler關於緩存問題解釋


HTTP緩存是WEB性能優化的重要手段

也是WEB工程師的必備知識技能

 

1. 緩存作用?

降低網絡帶寬消耗;

降低服務器壓力;

降低資源下載延遲,加快頁面響應速度;

2. 本文重點...

瀏覽器緩存一些東西(CSS、JS、圖片),那么...

緩存哪些?不緩存哪些?

緩存多長時間?何時過期?

緩存何時更新?

如何不用緩存?

F5、Ctrl+F5有何異同?

....

 

3. F5、Ctrl+F5有何異同?

先來感受一波瀏覽器緩存機制;

測試環境:IE11、Firefox、Chrome、Opera

分析工具:Fiddler

測試代碼:

 

測試場景:

 

下面直接曬測試結果...

 

場景1:首次加載資源(瀏覽器無緩存)

各瀏覽器表現一致,從服務器端下載完整資源,響應碼200。

 

場景2:地址欄按ENTER重新加載

各瀏覽器會向服務器確認自身緩存是否過期,服務器若發現資源未改變,則響應304,指示瀏覽器可繼續使用自身緩存,無需重新下載資源。

注:IE/Firefox的請求頭一樣;Chrome/Opera的請求頭一樣;

 

場景3、場景4:按F5、刷新按鈕

與在地址欄按ENTER類似,各瀏覽器會向服務器確認自身緩存是否還可以繼續使用。

 

場景5:按Ctrl+F5

按Ctrl+F5,瀏覽器會放棄自身緩存,重新從服務器下載資源。

 

 

4. HTTP緩存體系

下面展開講解

If-Modified-Since、ETag、304、412

等內容

4.1. 瀏覽器緩存使用流程

 

注:GET請求才會涉及緩存問題,瀏覽器不會緩存POST請求;

 

 

4.2. 三大緩存策略

 

1. 緩存存儲策略:

用於決定 HTTP 響應內容是否可被瀏覽器緩存。

響應首部:

Cache-Control:no-store,禁止瀏覽器緩存響應內容

 

示例:禁止瀏覽器緩存CSS、JS、PNG、HTML文件

 

2. “新鮮度檢驗”策略:

HTTP可以指定緩存的過期時間,未過期的緩存是“新鮮的”,可以在不聯系服務器的情況下,直接使用緩存。

響應首部:

Cache-Control:max-age=,HTTP1.1,定義緩存的最大有效期(秒);

Expires:, HTTP1.0,定義緩存過期的絕對日期;

 

注1:建議給JS、CSS、PNG等靜態資源設定一個較大的緩存過期時間,最大限度利用緩存,減少HTTP請求量;

注2:若響應中含有Cache-Control:max-age=0或Cache-Control:no-cache或Pragma:no-cache,可使瀏覽器在每次使用緩存前,都去跟服務器確認緩存的可用性;

注3:請求中也可攜帶Cache-Control:no-cache或Pragma:no-cache,這樣會迫使服務器不返回緩存文件;(瀏覽器的Ctrl+F5原理)

Cache-Control

HTTP1.1引入了Cathe-Control,它使用max-age指定組件被緩存多久(時間相對請求的時間),從請求開始在max-age時間內瀏覽器使用緩存,之外的使用請求,這樣就可以消除Expires的限制。但有個缺點就是,用戶不能第一時間拿到最新修改的文件。請求過程如下:

 

示例:使瀏覽器使用緩存前,必須去確認有效性;

 

3. “服務器再驗證”策略:

“不新鮮”的緩存並不一定意味着它和服務器上的文件有差異,只意味着需要同服務器確認一下緩存是否有更新的必要。

響應首部:

Last-Modified:,文件上次修改時間;

ETag:,文件的指紋信息;

請求首部:

If-Modified-Since:,若文件從指定日期后被改過,就返回新的文件;否則只響應304,指示瀏覽器緩存仍可繼續使用;與Last-Modified配合使用;

If-None-Match:,若與服務器端文件指紋不匹配,就返回新的文件;否則只響應304,指示瀏覽器緩存仍可繼續使用;與ETag配合使用;

 

5. 412響應代表什么?

412

Precondition Failed

先決條件失敗

響應示例:

 

響應時機:

會在緩存條件檢測失敗時返回412響應碼,例如:

 

注:如何清理各瀏覽器緩存?

各瀏覽器都可通過[Ctrl+Shift+Delete]快捷鍵完成緩存清理。

 

參考:

本頁來源網絡,具體查看以下鏈接,我只是個搬運工~~

https://cloud.tencent.com/developer/news/103470

https://www.cnblogs.com/shuimuzhushui/p/9689550.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM