在網上看到一篇關于解釋瀏覽器緩存更新機制304狀態碼的文章,里面說如果請求頭中的If-Modified-Since字段和If-None-Match字段的值分別和響應頭中的Last-Modified字段和Etag字段值一致,服務器就會返回304狀態碼(無響應體),瀏覽器就從本地讀取緩存數據。
但實際上,服務器是否返回304只根據請求頭中的If-None-Match字段和響應頭中的ETag字段值做比較判斷,如果兩者的值一致則返回304,否則返回200
?原理:請求頭中If-None-Match字段存儲的值是服務器上一次返回的ETag字段的值,當請求的資源有更新服務器返回響應頭中的ETag值就會更新,如果當前返回的ETag值與請求的If-None-Match字段值不一致,則返回200,否則返回304。