web-dev-qa-db-ja.com

さまざまなタイプのリソースに最適なHTTPキャッシュ制御ヘッダー

「すべて」のキャッシュとブラウザで機能する最小限のヘッダーセットを見つけたい([〜#〜] https [〜#〜]!)

私のWebサイトには、3種類のリソースがあります。

(1)永遠にキャッシュ可能(パブリック/すべてのユーザーに等しい)

例:0A470E87CC58EE133616F402B5DDFE1C.cache.html( GWTにより自動生成

  • これらのファイルは、コンテンツを変更すると(MD5に基づいて)新しい名前が自動的に割り当てられます。

  • HTTPSを使用している場合でも、可能な限りキャッシュする必要があります(したがって、Cache-Control: public、特にFirefoxの場合?

  • コンテンツが変更された場合、検証のためにクライアントにサーバーへの往復を要求するべきではありません。

(2)時々変更(パブリック/すべてのユーザーに等しい)

例:index.html、mymodule.nocache.js

  • これらのファイルは、新しいバージョンのサイトが展開されると、URLを変更せずにコンテンツを変更します。

  • それらはキャッシュできますが、おそらく毎回再検証するために往復が必要になるでしょう。

(3)各リクエストの個人(プライベート/ユーザー固有)

例:JSONレスポンス

  • これらのリソースは、いかなる状況でも暗号化されずにディスクにキャッシュされることはありません。 (ただし、キャッシュできる特定のリクエストがいくつかある場合を除きます。)

各タイプにどのヘッダーを使用するかについての一般的な考えはありますが、欠落している可能性のあるものが常にあります。

81
Chris Lercher

私はおそらくこれらの設定を使用します:

  1. Cache-Control: max-age=31556926 –リプレゼンテーションはどのキャッシュでもキャッシュできます。キャッシュされた表現は、1年間新鮮であると見なされます:

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

  2. Cache-Control: no-cache –リプレゼンテーションはどのキャッシュでもキャッシュできます。ただし、キャッシュは、キャッシュされたコピーをリリースする前に、検証のためにリクエストをOriginサーバーに送信する必要があります。
  3. Cache-Control: no-store –キャッシュは、どのような条件下でも表現をキャッシュしてはいけません。

詳細については、 Mark Nottingham’sCaching Tutorial を参照してください。

89
Gumbo