HTTPキャッシュ - nagutabby/senior-thesis GitHub Wiki

HTTPキャッシュ

  • RFC 9111, HTTP Cachingで定義されている

プライベートキャッシュ

  • 特定のクライアントに結びついたキャッシュ
  • 他のクライアントとは共有されないため、特定のユーザーにパーソナライズされたレスポンスを格納できる
  • Cache-Control: privateというヘッダー(privateディレクティブ)を渡すことでプライベートキャッシュにのみデータを格納できる
  • ネットワークリクエストにCache-Control: privateを含めたとしても、ネットワークレスポンスにAuthorizationヘッダーがある場合はプライベートキャッシュには格納されない

共有キャッシュ

  • ユーザー間で共有できるネットワークレスポンスを格納するために使用される
  • プロキシーキャッシュとマネージドキャッシュに分類される

プロキシーキャッシュ

フォワードプロキシーサーバーがネットワークのトラフィックを削減するために使用するキャッシュ

マネージドキャッシュ

  • サービスの開発者がオリジンサーバーの負荷を分散し、コンテンツを効率的に開発するために明示的に展開するキャッシュ
  • マネージドキャッシュを使用しているものの例としては以下のようなものがある
    • リバースプロキシーサーバー
    • CDN(Content Delivery Network)
    • Cache APIと組み合わせたService Worker
  • マネージドキャッシュはAPI呼び出しなどによって格納されたネットワークレスポンスをいつでも削除できるため、より積極的なキャッシュ戦略を取れる
    • 例えば、Service Workerは、サーバーで更新が発生したときにCache APIのコンテンツを削除できる
  • Cache-Control: no-storeヘッダーを渡すことでマネージドキャッシュにのみキャッシュできる

ヒューリスティックキャッシュ

  • Cache-ControlヘッダーやExpiresヘッダーが指定されていない状況で、特定の情報に基づいて生成されるキャッシュ
  • RFC 7234, Hypertext Transfer Protocol(HTTP/1.1): Cachingで定義されている
  • 明示的に有効期限が与えられておらず、かつHTTPレスポンスのステータスコードが200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501である場合に、Last-Modifiedヘッダーの値などの情報から有効期限を算出してネットワークレスポンスをキャッシュ

参考