私はAmazonS3を使用して、自分のWebサイトの静的アセットを提供しています。ブラウザにこれらのアセットをできるだけ長くキャッシュさせたいです。アセットに含める必要のあるメタデータヘッダー
Cache-Control: max-age=???
回答:
通常、標準の最大値として1年をお勧めします。RFC2616を参照してください。
応答を「無期限」としてマークするために、オリジンサーバーは応答が送信されてから約1年後に有効期限を送信します。HTTP / 1.1サーバーは、1年以上先の有効期限を送信しないでください。
これは古いexpires
標準にcache-control
も当てはまりますが、明確な標準ガイダンスがない場合にも適用するのは理にかなっています。とにかく一般的に必要である限り、任意に長い値を選択すると、一部のユーザーエージェントが破損する可能性があります。そう:
Cache-Control: max-age=31536000
「できるだけ長く」保管するのではなく、妥当な期間だけ保管することを検討してください。たとえば、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年)を超える最大年齢はほとんど意味がなく、非公式にはこれは妥当な最大値と見なされます。
最大1年のキャッシュの推奨を作成した人々はそれを適切に考えていませんでした。
まず、訪問者に古いキャッシュファイルが提供されている場合、1年後に突然新しいバージョンをロードすることでメリットが得られるのはなぜですか?ファイルのTTLが1年の場合、機能の観点からは、ファイルがまったく変更されることを意図していないことを意味します。
では、なぜ1年以上かかるのでしょうか。
1)どうしてですか?訪問者のブラウザに「このファイルは1年前のものです。更新されているかどうかを確認することをお勧めします」と伝えることは、何の目的もありません。
2)CDNサービス。ほとんどのコンテンツ配信ネットワークは、キャッシュヘッダーを使用して、エッジサーバーからファイルを効率的に提供する期間を決定します。ファイルのキャッシュ制御が1年間ある場合、ある時点で元のサーバーから変更されていないファイルの再要求が開始され、エッジキャッシュを完全に再入力する必要があるため、クライアントの読み込みが遅くなり、不要になります。オリジンへの呼び出し。
最大1年のポイントは何ですか?31536000を超える量を設定すると、どのブラウザがチョークしますか?