0

我的設置的Cache-Control最大年齡價值的理解是,瀏覽器被指令高速緩存中的文件。瀏覽器不能與200響應(從高速緩存),併發送304不修改

然後我期望的是,如果我點擊地址欄上的「輸入」爲相同的鏈接,瀏覽器將返回一個200(從緩存)響應。

我的問題是,爲什麼它返回一個304 Not Modified響應?

我看到它的方式是使用200(來自緩存)瀏覽器不再與服務器建立連接來驗證文件,並立即提供緩存的內容。但對於304,儘管瀏覽器不會再次下載文件,只會指示瀏覽器爲緩存文件提供服務,但仍需發送請求以驗證內容的新鮮度。

此處的資產由Amazon的CloudFront CDN以Amazon S3存儲桶爲原點提供。那裏的Cache-Header(在S3中)已經被設置。這對於所有其他自託管資產都不是問題。

感謝您的幫助!

編輯:我發現這個What is the difference between HTTP status code 200 (cache) vs status code 304?。其他問題:我已經有緩存控制設置爲max-age = 31536000,s-maxage = 2592000,無變換,公開仍然我得到一個304,是否需要設置到期也?只需使用Cache-Control,我就可以在自行託管的網站上緩存。

回答

0

你期望看到一個200的內容,而不是304說「沒有修改」。這是瀏覽器詢問內容是否比緩存更新的內容。 304的意思是「不,不要浪費你的帶寬,你的內容是最新的」。它可以通過幾個方法來實現 - etag和if-modified-since。

作爲一個例子,我們可以使用your stackoverflow avatar image。當我在Chrome中加載並查看開發人員工具時,可以看到它有一個304響應,並且正在傳遞這兩個標頭:

if-modified-since:Thu, 28 Jan 2016 13:16:24 GMT 
if-none-match:"484ab25da1294b24f8d9d13afb913afd" 
相關問題