1. ホーム
  2. http

[解決済み] リソースの種類に応じた理想的なHTTPキャッシュコントロールヘッダ

2023-07-10 15:38:27

質問

すべてのキャッシュとブラウザで動作する、最小限のヘッダを見つけたいのです。 HTTPS !)

私のWebサイトでは、3種類のリソースを用意することにしています。

(1) 永遠にキャッシュ可能なもの(公開/全ユーザに等しい)

例:0A470E87CC58EE133616F402B5DDFE1C.cache.html ( GWTによって自動生成される )

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

  • HTTPS を使用しているときでも、できるだけキャッシュされるべきです (ですから、私が想定しているのは Cache-Control: public を設定する必要があります(特にFirefoxの場合?)。

  • コンテンツが変更された場合、クライアントが検証のためにサーバーに往復することを要求すべきではないでしょう。

(2) たまに変更する(公開/全ユーザーに等しい)

例:index.html、mymodule.nocache.js

  • これらのファイルは、サイトの新しいバージョンがデプロイされたときに、URLを変更することなくその内容を変更します。

  • これらはキャッシュすることができますが、おそらく毎回再バリデーションのためのラウンドトリップが必要です。

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

例 JSONレスポンス

  • これらのリソースは、いかなる状況下でも暗号化されていないディスクにキャッシュされるべきではありません。(キャッシュされる可能性のある、いくつかの特定の要求がある場合を除きます)。

それぞれのタイプでどのヘッダーを使うか、だいたいの見当はつきますが、常に何か見落としている可能性があります。

どのように解決するのですか?

私なら、この設定を使うと思います。

  1. Cache-Control: max-age=31556926 - 表現は,どのキャッシュによってもキャッシュされることができる。キャッシュされた表現は1年間新鮮であるとみなされる。

    レスポンスに "期限なし "とマークするために、オリジンサーバは 期限切れ を送信します。 を送信します。HTTP/1.1 サーバーは 期限切れ を送信してはなりません。 を送信してはなりません。

  2. Cache-Control: no-cache - Representation はどのキャッシュにもキャッシュされることが許されています。しかし、キャッシュはキャッシュされたコピーを解放する前に、検証のためにオリジンサーバにリクエストを提出しなければなりません。
  3. Cache-Control: no-store - キャッシュはいかなる状況下でも表現をキャッシュしてはいけません。

参照 マーク・ノッティンガムの キャッシュチュートリアル を参照してください。