http 304 淺析

http 304

很久沒寫了。感受荒廢了很久。恰好今天有朋友問我關於靜態資源緩存問題。忽然喚起個人學習興趣了。
發現好多同窗對靜態資源都不是很清楚。小弟我恰好有一點心得。和你們分享一下。其實就是看成個人筆記。歡迎指正。css

原理

http 304 Not Modified瀏覽器

意思是:Not Modified 客戶端有緩衝的文檔併發出了一個條件性的請求(通常是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩衝的文檔還能夠繼續使用。緩存

HTTP/1.1 304 Not Modified不是服務器發出的錯誤提示。而是服務器所承載的業務系統在開發時爲了節省鏈路帶寬和提高瀏覽器的體驗對GET/js、css、image等執行了緩存機制。服務器

HTTP/1.1 304 Not Modified不是服務器發出的錯誤提示。而是服務器所承載的業務系統在開發時爲了節省鏈路帶寬和提高瀏覽器的體驗對GET/js、css、image等執行了緩存機制。客戶端在第一次對服務器業務發出GET請求後,客戶端瀏覽器緩存了該頁面,當客戶端第二次對服務器發出一樣的GET請求時,若客戶端緩存中的If-Modified-Since過時,客戶端將向服務器發出GET請求,驗證If-Modified-Since和If-None-Match是否與WEB-server中信息一致,若是GET頁面未作任何修改,服務器對客戶端返回HTTP/1.1 304 Not Modified,客戶端則直接從本地緩存中將頁面調取併發

在作http請求分析以前,必定要了解這個參數

requset請求學習

(1)If-Modified-Since:發送請求時與服務器
(2)If-None-Match:spa

response返回server

(1)Last-Modified:資源被修改的最後時間
(2)ETag:對資源的索引節(INode),大小(Size)和最後修改時間(MTime)進行Hash後獲得的,是資源的惟一標識索引

特別注意:圖片

(1)該兩項參數將存儲在客戶端的瀏覽器cache中,Last-Modified值存儲爲 If-Modified-Since,ETag值存儲爲If-None-Match.

(2)ETag的優先級高於Last-Modified.

請求過程發生了什麼

第一次請求:

客服端發送請求-》本地無緩存-》向服務發送請求-》返回靜態資源,而且緩存到本地

這個是樂視網首頁第一次請求時的截包,會發現靜態資源的返回都是200

圖片描述

第二次請求:

圖片描述

  • 再此次請求中,http請求頭部包括了If-Modified-Since,If-None-Match這兩個參數與服務器作對比。若是相同,則獲取本地的緩存信息,反之服務器返回新的資源。而且Last-Modified,ETag數據重置。

  • 服務器靜態資源修改了,response返回的Last-Modified,ETag也會修改

這個是樂視網首頁第二次請求時的截包,會發現靜態資源的返回基本都是304

圖片描述

相關文章
相關標籤/搜索