web-dev-qa-db-ja.com

Cache-ControlがAWS S3オブジェクトのメタデータで機能しない

私の元の質問のフォローアップ: S3 Originを使用するAWS CloudFrontからのファイルのキャッシュ制御ヘッダーなし

AWS CloudFrontとAWS S3をオリジンとして使用して静的ファイルを提供しています。元の質問の回答(上記のリンク)の指示に従って、AWSウェブコンソールを使用してオブジェクトのCache-Controlヘッダーを設定しようとしました。そして、AWS S3リンクを使用してファイルにアクセスすると、追加したヘッダーがすでに表示されています:Cache-Control:public、max-age = 315360 =。

問題は、ブラウザ尊重しないヘッダーであることです。同じリンクをリロード/リフレッシュすると、200(Cached)応答ではなく4-Not Modified応答が返されます。

max-age = 3(noPublic)の値も試しました""の値も試しましたが、常に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==

編集:リロードすると2が返され、アドレスバーのURLでEnterキーを押すと4 Not Modifiedが返されます。また、同じページロード内のGoogleアセットは、304ではなく200(キャッシュから)で応答されます。

更新:

ファイルは既にキャッシュされているであることを現在検出しているオンラインテスト。 http://www.webpagetest.org/ および http://tools.pingdom.com/ でテストを行いました。また、Google Page Speedを使用します。ファイルをEdgeの場所に配布するには時間が必要だったと思います。変更がすぐに反映されるように編集するたびにファイル名を変更していたので、これは奇妙です。ただし、キャッシュに関する限り、キャッシュをEdgeの場所に配布するのに時間がかかる場合があります。まだいくつかのテストを行っています。

3
jarvis

200はok応答です。これは、サーバーが要求されたリソースを送信したことを意味します。 304が変更されていないということは、オブジェクトがブラウザのキャッシュにあることを意味し、ブラウザがチェックしています。

リロードをクリックした場合、サーバーの問題ではなく、ブラウザーの問題が発生している可能性があります。リロードするように指示したので、サーバーに送信されます。 URLに移動して「リロード」ではなく「Enter」を押して、リソースをロードしてみてください。

Firefoxの「ライブhttpヘッダー」プラグインを試してみてください。何がうまくいっているかがわかります。

あなたが言ったことに基づいて、実際には問題はないと思いますが、確実にするには、ライブHTTPヘッダーからの出力を投稿する必要があります。これを行う場合は、1つのリソースだけを使用するのではなく、静的なHTMLページをロードして、CDNのjpgを参照するようにしてください。

1
Tim