最近回顧HTTP緩存知識的時候發現了一個問題,設置了強緩存和協商緩存的文件,刷新的時候在chrome和firefox中的表現不一樣。具體表現爲chrome走強緩存沒有再次發起請求。firefox卻在強緩存沒有失效的情況下發了請求,返回了304走了協商緩存。
chrome請求截圖:
firefox請求截圖:
上面兩種表現截然相反,但是並沒有錯誤。主要原因在於瀏覽器點擊刷新按鈕時是否使用強緩存的實現各個瀏覽器不同。參考盜圖如下:
通過測試發現firefox的http緩存完全符合上圖描述,所以不是firefox的強緩存失效,而是本來刷新就應該忽略強緩存。而chrome刷新也使用強緩存是對http緩存的一種優化。所以兩者應該都是對的。
去除304的驗證在目前來說還是很有用的,現在大部分網頁都是工程化的結果,打包出來的文件名稱都帶上了hash,只要內容變了那麼文件名一定會變化,反過來說文件名沒有變那麼內容一定沒有改變,再去驗證304就少了很多必要。
關於304的非必要性,詳情可查參考1。
#參考
[譯] 這項瀏覽器調整使 Facebook 收到的網絡請求減少了 60%
[徹底理解瀏覽器緩存機制](https://www.cnblogs.com/shixiaomiao1122/p/7591556.html)