1. Introduction (はじめに)
ハイパーテキスト転送プロトコル (Hypertext Transfer Protocol, HTTP) は、ネットワークベースのハイパーテキスト情報システムとの柔軟な相互作用を実現するために、拡張可能なセマンティクスと自己記述型メッセージを使用するステートレスなアプリケーション層のリクエスト/レスポンスプロトコルです。HTTPは通常、分散情報システムで使用され、これらのシステムでは、レスポンスキャッシュ (Response Caches) の使用によってパフォーマンスを向上させることができます。本文書は、メッセージのキャッシングと再利用に関連するHTTPの側面を定義します。
HTTPの「キャッシュ (Cache)」は、レスポンスメッセージのローカルストアと、その中のメッセージの保存、取得、削除を制御するサブシステムです。キャッシュは、将来の同等のリクエストに対するレスポンス時間とネットワーク帯域幅の消費を削減するために、キャッシュ可能なレスポンスを保存します。トンネル (Tunnel) として動作する場合を除き ([HTTP]のセクション3.7を参照)、任意のクライアントまたはサーバーはキャッシュを使用してもよい (MAY) です。
「共有キャッシュ (Shared Cache)」は、複数のユーザーによる再利用のためにレスポンスを保存するキャッシュです。共有キャッシュは通常 (ただし常にではない)、中間装置 (Intermediary) の一部として展開されます。対照的に、「プライベートキャッシュ (Private Cache)」は単一のユーザー専用です。通常、これらはユーザーエージェント (User Agent) のコンポーネントとして展開されます。
HTTPキャッシングの目標は、以前のレスポンスメッセージを再利用して現在のリクエストを満たすことにより、パフォーマンスを大幅に向上させることです。セクション4.2で定義されているように、キャッシュは、「検証 (Validation)」(つまり、キャッシュされたレスポンスがこのリクエストに対してまだ有効かどうかを確認するためにオリジンサーバーに確認すること) なしで保存されたレスポンスを再利用できる場合、そのレスポンスを「新鮮 (Fresh)」であると見なします。したがって、キャッシュが新鮮なレスポンスを再利用するたびに、レイテンシとネットワークオーバーヘッドを削減できます。キャッシュされたレスポンスが新鮮でない場合でも、検証によって更新できる場合 (セクション4.3) またはオリジンサーバーが利用できない場合 (セクション4.2.4) は、再利用可能である可能性があります。
本文書はRFC 7234を廃止し、変更の概要は付録Bに記載されています。
1.1 Requirements Notation (要求表記法)
本文書のキーワード「しなければならない (MUST)」、「してはならない (MUST NOT)」、「必須である (REQUIRED)」、「しなければならない (SHALL)」、「してはならない (SHALL NOT)」、「すべきである (SHOULD)」、「すべきでない (SHOULD NOT)」、「推奨される (RECOMMENDED)」、「推奨されない (NOT RECOMMENDED)」、「してもよい (MAY)」、「任意である (OPTIONAL)」は、BCP 14 [RFC2119] [RFC8174] に記載されているように解釈されるものとします。ただし、ここに示すように、すべて大文字で表示される場合に限ります。
[HTTP] のセクション2は、適合性基準を定義し、エラー処理に関する考慮事項を含んでいます。
1.2 Syntax Notation (構文表記法)
本仕様は、[RFC5234] の拡張バッカス・ナウア記法 (Augmented Backus-Naur Form, ABNF) を使用し、[RFC7405] で定義された大文字小文字を区別する文字列表記で拡張されています。
また、[HTTP] のセクション5.6.1で定義されたリスト拡張を使用しており、"#" 演算子を使用してカンマ区切りのリストをコンパクトに定義できます ("*" 演算子が繰り返しを示すのと同様)。付録Aは、すべてのリスト演算子を標準ABNF表記に展開した完全な文法を示しています。
1.2.1 Imported Rules (インポートされたルール)
以下のコアルールは、[RFC5234] の付録B.1で定義されているように、参照によって含まれています: DIGIT (10進数0-9)。
[HTTP] は以下のルールを定義しています:
HTTP-date = <HTTP-date, see [HTTP], Section 5.6.7>
OWS = <OWS, see [HTTP], Section 5.6.3>
field-name = <field-name, see [HTTP], Section 5.1>
quoted-string = <quoted-string, see [HTTP], Section 5.6.4>
token = <token, see [HTTP], Section 5.6.2>
1.2.2 Delta Seconds (デルタ秒)
delta-seconds ルールは、秒単位の時間を表す非負整数を指定します。
delta-seconds = 1*DIGIT
delta-seconds 値を解析してバイナリ形式に変換する受信者は、少なくとも31ビットの非負整数範囲の算術型を使用すべきです (ought to)。キャッシュが、表現できる最大整数よりも大きいdelta-seconds値を受信した場合、または後続の計算のいずれかがオーバーフローした場合、キャッシュはその値を2147483648 (2^31) または便利に表現できる最大の正の整数として扱わなければなりません (MUST)。
注意: 値2147483648は歴史的な理由で存在し、無限 (68年以上) を表し、バイナリ形式で保存する必要はありません。つまり、計算がその数値を直接表現できない算術型を使用する場合でも、実装はそれを文字列として生成できます。ここで重要なのは、オーバーフローが検出されることであり、後続の計算で負の値として扱われないことです。