HTTPのキャッシュ制御ヘッダーの最大値


80

私はAmazonS3を使用して、自分のWebサイトの静的アセットを提供しています。ブラウザにこれらのアセットをできるだけ長くキャッシュさせたいです。アセットに含める必要のあるメタデータヘッダー

Cache-Control: max-age=???

可能な最大年齢の値は、ブラウザ/バージョンとプロキシによって異なります... AFAIKには実際の標準/仕様がないため、値は推測になります...
Yahia

回答:


120

通常、標準の最大値として1年をお勧めします。RFC2616を参照してください。

応答を「無期限」としてマークするために、オリジンサーバーは応答が送信されてから約1年後に有効期限を送信します。HTTP / 1.1サーバーは、1年以上先の有効期限を送信しないでください。

これは古いexpires標準にcache-controlも当てはまりますが、明確な標準ガイダンスがない場合にも適用するのは理にかなっています。とにかく一般的に必要である限り、任意に長い値を選択すると、一部のユーザーエージェントが破損する可能性があります。そう:

Cache-Control: max-age=31536000

22

「できるだけ長く」保管するのではなく、妥当な期間だけ保管することを検討してください。たとえば、10年以上キャッシュする必要はほとんどありません...そうですか?

RFCはここでmax-ageについて説明しています:http//www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

Eric Lawrenceによると、IE9より前は、Internet Explorerはキャッシュコントロールを備えたすべてのリソースを失効として扱います。最大経過時間の値は2147483648(2 ^ 31)秒、約68年です(http://blogs.msdn.com/b /ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx)。

もちろん、他のユーザーエージェントはさまざまなので、オーバーフローを引き起こす可能性が低い(可能性が高いというよりも)数を選択してみてください。31536000(1年)を超える最大年齢はほとんど意味がなく、非公式にはこれは妥当な最大値と見なされます。


私は実際に送信する特定のヘッダーを探しています。変更を加えて訪問者に表示させる必要がある場合に、ファイルのURLを変更して別のファイル名を指すようにするメカニズムがWebサイトに組み込まれています。ブラウザにこれらのアセットを無期限にキャッシュさせるために送信する特定のヘッダーの例が必要です。
ケーシーフリン

12
Cache-Control:max-age = 31536000は、それを1年間キャッシュします。これは、最大推奨値です。
EricLaw 2011

2
@Geoffrey:ケーシーが何を作っているのか混乱していると思います。彼は、バージョンが変更されたときに、マークアップで参照するURLを変更すると言っているだけです。これは、ほとんどのトップサイトで使用されているベストプラクティスです。
EricLaw 2011

@Geoffrey「2147483648以上」でよろしいですか?「2147483647以上」だと思いましたか?
Pacerier 2012年

4

最大1年のキャッシュの推奨を作成した人々はそれを適切に考えていませんでした。

まず、訪問者に古いキャッシュファイルが提供されている場合、1年後に突然新しいバージョンをロードすることでメリットが得られるのはなぜですか?ファイルのTTLが1年の場合、機能の観点からは、ファイルがまったく変更されることを意図していないことを意味します。

では、なぜ1年以上かかるのでしょうか。

1)どうしてですか?訪問者のブラウザに「このファイルは1年前のものです。更新されているかどうかを確認することをお勧めします」と伝えることは、何の目的もありません。

2)CDNサービス。ほとんどのコンテンツ配信ネットワークは、キャッシュヘッダーを使用して、エッジサーバーからファイルを効率的に提供する期間を決定します。ファイルのキャッシュ制御が1年間ある場合、ある時点で元のサーバーから変更されていないファイルの再要求が開始され、エッジキャッシュを完全に再入力する必要があるため、クライアントの読み込みが遅くなり、不要になります。オリジンへの呼び出し。

最大1年のポイントは何ですか?31536000を超える量を設定すると、どのブラウザがチョークしますか?


3
1年はインターネット時代の永遠です。さらに、キャッシュを真剣に受け止めれば、(キャッシュ制御に加えて)最後に変更されたメカニズムやetagメカニズムを処理することになります。したがって、1年後の再リクエストでも、帯域幅に悪影響を与えることはありません(304は変更されていません)
redben 2015

2
画像が変更されない場合(インターネット上のほとんどの画像のように)、およびCDNが元のファイルを更新したくない場合(これは無意味です)、1年は永遠ではありません。最終変更/ etagについては、もちろん、クライアントとサーバー間のリクエストとダイアログを開始します。これは、「うん、キャッシュされたファイルを提供しても問題ない」ということを私たちがすでに知っていることを確認するためです。あなたの議論は基本的に「1年はインターネット上で永遠である」であり、それは何の生産性にも役立たない。私は画像に10年の有効期限を設定しましたが、これは単により良い最終結果をもたらします。
suncat100 2015

3
ああ、デフォルトのブラウザキャッシュサイズもあります。キャッシュされたアセットは、ブラウザのキャッシュで1年存続しますか?知りません。
redben 2015

非常にありそうもない。さらに、「可能な限りとして」「永遠に」それがアイテムをキャッシュしようとするよりも、他の目的を果たしていないと、「1年」設定の無意味さを証明しているか、何か...
suncat100

それはブラウザがそれをキャッシュすることではありません。これは、などアカマイとワニスとGoogleのモバイルプロキシとしてそれをキャッシュする中間プロキシについてです
イライジャ・リン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.