回答

3

Amazon S3已經支持If-Modified-Since標題以及相關的If-None-Match(它使用ETag代替日期)。

因此,只有在更改時才加載圖像的方法是,如果您有Etag,則實際使用If-Modified-SinceIf-None-Match。但是,由於您正在討論將其加載到瀏覽器,所以大多數瀏覽器都會這樣做,除非您做了一些時髦的事情來禁用瀏覽器緩存。

有關支持的標題的詳細信息,請參閱http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html#RESTObjectGET-requests-request-headers

您是否遇到瀏覽器仍在從S3加載圖像的情況,即使它們尚未更改?如果是這樣,你有更多的細節,例如瀏覽器,版本和類似Chrome network tab HAR file的東西說明症狀?

默認情況下,它應該只在雙方都沒有自定義更改。我只是通過上傳一個新的PNG圖像文件複製到S3。在全新的瀏覽器窗口中,我打開了開發工具並加載了網絡選項卡。我確保「禁用緩存」未被取消,並且「保留日誌」被勾選(以保留多次F5刷新的日誌)。

我加載了圖像,然後按F5重新加載兩次。其結果是:

Network tab screenshot

正如你所看到的,第一負荷爲200種狀態,其他請求收到304

+0

感謝您的答覆。其實我讀了第一個谷歌的所有信息,但我找不到實施指南。我正在向PHP/apache的瀏覽器提供html,並且在具有導向S3存儲圖像的src路徑的html中有圖像標記,所以我不控制瀏覽器對S3的請求標頭。我如何啓用它們?或者,如果它們默認啓用,那麼我應該在S3端啓用什麼(圖像的元數據等)? – Kainax

+0

它應該默認在雙方(客戶端和服務器)上工作。我編輯了評論以顯示您應該看到的屏幕截圖以及如何複製的說明。你看到的是什麼症狀,使你認爲它*不是*返回304? –

+0

有一個進一步的想法 - 如編輯中所述,瀏覽器仍然會向If發出If-Modified-Since標題的請求。只是S3會以沒有內容的304響應,瀏覽器將使用它的本地副本。如果你真的想讓瀏覽器根本不向S3發送任何消息,你需要爲S3中的每個對象添加一個自定義頭文件 - –