Amazon-Web-Services

Cache-Control 在 AWS S3 對像元數據中不起作用

  • April 16, 2016

我最初的問題的後續行動:來自 AWS CloudFront 和 S3 Origin 的文件沒有記憶體控制標頭

我使用 AWS CloudFront 以 AWS S3 作為源來提供靜態文件。我嘗試使用 AWS Web 控制台為我的對象設置 Cache-Control 標頭,如我原始問題(上面的連結)中的答案中所述。當我使用 AWS S3 連結訪問文件時,我已經可以看到我添加的標題: Cache-Control: public, max-age=31536000

問題是瀏覽器不尊重標題。當我重新載入/刷新同一個連結時,我得到一個304 - Not Modified響應而不是**200(記憶體)**響應。

我還嘗試了值max-age=300(沒有Public),還嘗試了**" “中的值,但我總是得到 304 響應。我還嘗試從 S3添加Expires標頭,但結果相同。**

如何讓瀏覽器尊重記憶體標頭?我想利用瀏覽器記憶體並節省使用 AWS 的成本。

附加說明:我的 S3 儲存桶未設置為靜態網站託管。以防萬一這與此有關。

編輯:以下是實時 HTTP 標頭

https://cdn.example.com/path/logo.png

GET /path/logo.png HTTP/1.1
Host: cdn.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://www.example.com/
Connection: keep-alive
If-Modified-Since: Tue, 12 Apr 2016 10:29:24 GMT
If-None-Match: "xxxxxxxxxxxxxxxxxxxxxxxxxxx"

HTTP/1.1 304 Not Modified
Connection: keep-alive
Date: Sat, 16 Apr 2016 09:33:08 GMT
Etag: "xxxxxxxxxxxxxxxxxxxxxxx"
Server: AmazonS3
Age: 67885
X-Cache: Hit from cloudfront
Via: 1.1 xxxxxxxxxxxxxxx.cloudfront.net (CloudFront)
X-Amz-Cf-Id: xxxxxxxxxxxxxxxxxxxxxxxxxxxx==

編輯:如果我重新載入,我會收到200響應,如果我在地址欄 URL 上按 Enter,我會收到**304 Not Modified 。此外,同一頁面載入中的 Google 資產會以200(來自記憶體)**而不是 304 響應。

更新:

目前檢測文件已被記憶體的線上測試。在http://www.webpagetest.org/http://tools.pingdom.com/上進行了測試。也與穀歌頁面速度。我認為將文件分發到邊緣位置需要時間。這很奇怪,因為我每次編輯都會更改文件名,以便立即發生更改。但就記憶體而言,將記憶體分發到邊緣位置可能需要時間。還在做一些更多的測試。

200 是 ok 響應,表示伺服器已經發送了請求的資源。304 not modified 表示對像在瀏覽器記憶體中,瀏覽器已檢查。

如果您點擊了重新載入,您可能會遇到瀏覽器問題,而不是伺服器問題。您已經告訴它重新載入,所以它會轉到伺服器。嘗試通過進入 URL 並點擊“輸入”而不是“重新載入”來載入該資源。

試試 Firefox 的“live http headers”外掛,它顯示了正在發生的事情。

根據您所說的,我認為實際上沒有問題,但是您需要發布 Live HTTP Headers 的輸出以確保我們確定。如果你這樣做,不要只使用一個資源,載入一個靜態 html 頁面並讓它引用 CDN 上的 jpg。

引用自:https://serverfault.com/questions/770801