かなり奇妙です。
私のWebアプリケーションでは、S3に保存されているスプレッドシートへのリンクがあります。 私は以前にそのファイルをダウンロードしました。さて、私はs3でそのファイルを更新しました。
同じリンクから再度ダウンロードしようとしたときに、以前のバージョンがまだ取得されています。
キャッシュをクリアすると、新しいバージョンがダウンロードされます。
かなり奇妙です。
私のWebアプリケーションでは、S3に保存されているスプレッドシートへのリンクがあります。 私は以前にそのファイルをダウンロードしました。さて、私はs3でそのファイルを更新しました。
同じリンクから再度ダウンロードしようとしたときに、以前のバージョンがまだ取得されています。
キャッシュをクリアすると、新しいバージョンがダウンロードされます。
回答:
これを回避するには2つの選択肢があります。
設定方法をAmazonに伝えることができます Cache-Control URLが取得されたときのヘッダー。あなたが指定するのと同じ方法 Content-Type ヘッダ、他のヘッダも制御できます。あなたはもっと短い時間間隔にキャッシュを下げることができます。
S3上のファイルにリンクするWebページのキャッシュを制御し、ファイルが変更されたときにその内容がキャッシュから使用されないようにS3ファイルへのリンクを変更することができます。基本的には、あなただけを置くことができます ?version=1 URLの末尾に。に変更すると ?version=2 (など)、URLが正確に一致しないため、ブラウザはキャッシュされたバージョンのファイルを使用しません。
この2番目の方法では、S3ファイルで積極的なキャッシュを使用し、無駄な転送を回避できます。ただし、ファイルの内容を変更するたびに、ファイルにリンクしているすべてのWebページを変更する必要があります。
見る Amazon S3の請求書を引き下げる 両方の手法の詳細については、反対の効果を得ようとしていますが。
はい、そうです。 S3をストレージとして使用していなくても、同じ問題が発生します。私はダウンロードのためにローカルファイルの内容を提供するSymfony2アプリを持っています。私はPHPでファイルの内容を取得してブラウザに送信しているので、URLは常に同じです。ローカルファイルの内容を変更した場合、FirefoxとIEには最新のファイルバージョンが表示されますが、chromeには含まれません。キャッシュコントロールヘッダーを設定しようとしましたが、無駄です、Chromeは無視します。
私が使用しているヘッダのいくつかのアイデア:
$response->headers->addCacheControlDirective('no-cache', true);
$response->headers->addCacheControlDirective('max-age', 0);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('no-store', true);
ランダムなバージョン番号をURLに追加すると(?version = randomIntByTime)、Chromeはついにファイルの最新バージョンを保存します。 Chrome用の特別なコードを書くのはいらいらします。
いいえ、しかしあなたとS3の間に別のキャッシングデバイスがある可能性があります。 WebトラフィックをキャッシュするMicrosoftのISAサーバーのように、私はそれがこの種のことを何度もしているのを見ました。