web-dev-qa-db-ja.com

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

Amazon S3を使用して、ウェブサイトの静的アセットを提供しています。ブラウザにこれらのアセットをできるだけ長くキャッシュしてもらいたい。アセットに含めるメタデータヘッダー

Cache-Control: max-age=???
66
Casey Flynn

通常、標準の最大値として1年が推奨されます。 RFC 2616 を参照してください:

応答を「期限切れにならない」とマークするために、Originサーバーは、応答が送信されてから約1年後に有効期限を送信します。 HTTP/1.1サーバーは、1年以上後のExpires日付を送信すべきではありません。

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

Cache-Control: max-age=31536000
95
mahemoff

「できるだけ長く」保存せず、代わりに妥当な限り安定させることを検討してください。たとえば、10年以上もキャッシュする必要があるとは考えにくい...そうですね。

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

Eric Lawrenceによれば、Internet ExplorerはIE9より前はCache-Control:max-age値が2147483648(2 ^ 31)秒、約68年( http://blogs.msdn .com/b/ie/archive/2010/07/14/caching-improvements-in-internet-Explorer-9.aspx )。

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

21

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

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

だから1年以上必要なのはなぜですか?

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

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

最長1年のポイントは何ですか? 31536000を超える値に設定すると、どのブラウザーが窒息しますか?

1
suncat100