1. 序論
~HTTP( `Hypertext Transfer Protocol^en )は、[ ~networkに基づく,~hypertext情報~system ]と柔軟にヤリトリするために[ 拡張-可能な意味論, および自己-記述的な~message ]を利用する,`~stateless$な応用~levelの[ 要請, 応答 ]~protocolである。 ~HTTPは、 概して,分散型の情報~system用に利用される — 応答~cacheをそこで利用すれば、 処理能を改善できる。 この文書は、 ~HTTPに関係する,応答~messageの~cache法と再利用-法を成す側面を定義する。 ◎ The Hypertext Transfer Protocol (HTTP) is a stateless application-level request/response protocol that uses extensible semantics and self-descriptive messages for flexible interaction with network-based hypertext information systems. It is typically used for distributed information systems, where the use of response caches can improve performance. This document defines aspects of HTTP related to caching and reusing response messages.
~HTTP `~cache@ ( `cache^en )は、 応答~messageの局所的な格納域であり, その中に格納される~messageたちの[ 格納, 検索取得, 削除 ]を制御する下位systemである。 ~cacheは、未来の等価な要請に対する[ 応答~時間や~network帯域幅の消費 ]を抑制するために,~cache可能な応答を格納する。 どの[ `~client$/`~server$ ]も,~cacheを利用してヨイ — `~tunnel$として動作しているときは、 利用し得ないが。 ◎ An HTTP "cache" is a local store of response messages and the subsystem that controls storage, retrieval, and deletion of messages in it. A cache stores cacheable responses to reduce the response time and network bandwidth consumption on future equivalent requests. Any client or server MAY use a cache, though not when acting as a tunnel (Section 3.7 of [HTTP]).
`共用~cache@ ( `shared cache^en )は、[ 複数の利用者が再利用するための応答 ]を格納する~cacheである — それは、 (常にではないが)通例的に,`媒介者$の一部分として配備される。 対照的に, `私用~cache@ ( `private cache^en )は、 単独の利用者ごとに専用であり,~UAの~componentとして配備されることが多い。 ◎ A "shared cache" is a cache that stores responses for reuse by more than one user; shared caches are usually (but not always) deployed as a part of an intermediary. A "private cache", in contrast, is dedicated to a single user; often, they are deployed as a component of a user agent.
~HTTP~cachingの目標は、 先立つ応答~messageを再利用して現在の要請を満足することにより,処理能を有意に改善することである。 ~cacheは、 自身に格納-済みな応答を — `鮮度§にて定義されるように — `検証$(`生成元~server$による[ この要請~用の~cache済み応答が有効であり続ける ]かどうかの検査ng )を伴わずに再利用できるならば,`新鮮$であると見なす。 したがって,`新鮮$な応答は、 ~cacheがそれを再利用する度に,遅延, ~network~overheadの両者を抑制し得る。 ~cache済み応答は、 `新鮮$でないときでも,[ `検証$により新鮮~化できる/生成元~serverが可用でない ]ときは再利用できることもある ( `4.2.4§ )。 ◎ The goal of HTTP caching is significantly improving performance by reusing a prior response message to satisfy a current request. A cache considers a stored response "fresh", as defined in Section 4.2, if it can be reused without "validation" (checking with the origin server to see if the cached response remains valid for this request). A fresh response can therefore reduce both latency and network overhead each time the cache reuses it. When a cached response is not fresh, it might still be reusable if validation can freshen it (Section 4.3) or if the origin is unavailable (Section 4.2.4).
【 この仕様の語 “格納-済み( `stored^en )” は、 “~cacheに格納-済み” の略記として用いられている。 “~cache済み( `cached^en )” も同義と見受けられる。 】
この文書は、 `RFC7234$r を廃用にする — 変更点は、 `B§ に要約されている。 ◎ This document obsoletes RFC 7234, with the changes being summarized in Appendix B.
1.1. 要件の表記法
この文書~内の~keyword "MUST" … 【以下、この段落の内容は`~IETF日本語訳 共通~page@~IETFcommon#requirements-notation$に移譲。】 ◎ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
適合性の判定基準, ~errorの取扱いに関する考慮点は、 `適合性§ `HTTP$r に定義される。 ◎ Section 2 of [HTTP] defines conformance criteria and contains considerations regarding error handling.
1.2. 構文の表記法
【 この節の他の内容は、 `~HTTP日本語訳 共通~page@~HTTPcommon#syntax-notation$に移譲。 】
`A§ にて、 すべての~list演算子を標準な~ABNF表記法に展開した,総集的な文法を示す。 ◎ This specification uses the Augmented Backus-Naur Form (ABNF) notation of [RFC5234], extended with the notation for case-sensitivity in strings defined in [RFC7405]. ◎ It also uses a list extension, defined in Section 5.6.1 of [HTTP], that allows for compact definition of comma-separated lists using a "#" operator (similar to how the "*" operator indicates repetition). Appendix A shows the collected grammar with all list operators expanded to standard ABNF notation.
1.2.1. 取込まれた規則
次に挙げる規則は、 `HTTP$r にて定義される ⇒# `HTTP-date$p, `OWS$p, `field-name$p, `quoted-string$p, `token$p, ◎ ↑The following core rule is included by reference, as defined in [RFC5234], Appendix B.1: DIGIT (decimal 0-9). ◎ [HTTP] defines the following rules: 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秒
`delta-seconds$p 規則は、 秒数を表現する,負でない整数を指定する。 ◎ The delta-seconds rule specifies a non-negative integer, representing time in seconds.
`delta-seconds@p = 1*`DIGIT$P
`受信者$は、[ `delta-seconds$p 値を構文解析して~binary形に変換する ]際には,[ 少なくとも 31~bit以上, かつ負でない整数の範囲をとる,算術-型 ]を利用する~OUGHT。 `delta-seconds$p 値を受信した~cacheは、 その値が[ 自身が表現できる最~大な整数より大きい場合/ 自身による後続な計算にて桁溢れする場合 ]には,[ 2147483648( 2 の 31 乗), または 都合よく表現できる最~大な正な整数 ]と見なさなければナラナイ。 ◎ A recipient parsing a delta-seconds value and converting it to binary form ought to use an arithmetic type of at least 31 bits of non-negative integer range. If a cache receives a delta-seconds value greater than the greatest integer it can represent, or if any of its subsequent calculations overflows, the cache MUST consider the value to be 2147483648 (2^31) or the greatest positive integer it can conveniently represent.
注記: ここでの値 2147483648 は、 歴史的な理由による — それは無限( 68 年~以上)を表現する。 この値は~binary形として格納される必要はない — 実装は、[ その数を直に表現できないような算術-型により計算が遂行される ]ときでも、 桁溢れが生じた場合には,文字列として生産できる。 ここで問われるのは、 桁溢れが検出され,今後の計算において負な値に扱われないことである。 ◎ Note: The value 2147483648 is here for historical reasons, represents infinity (over 68 years), and does not need to be stored in binary form; an implementation could produce it as a string if any overflow occurs, even if the calculations are performed with an arithmetic type incapable of directly representing that number. What matters here is that an overflow be detected and not treated as a negative value in later calculations.
2. ~cache運用の概観
~cacheを適正に運用することで、 ~HTTP転送の意味論を保全しつつ,すでに~cache内に保持されている情報の伝送を抑制できるようになる。 ~HTTPの一般的な各種用語と中核~概念は、 `HTTP$r `3@~HTTPinfra#terminology§ を見よ。 ◎ Proper cache operation preserves the semantics of HTTP transfers while reducing the transmission of information already held in the cache. See Section 3 of [HTTP] for the general terminology and core concepts of HTTP.
~HTTPにおける~cachingは,全面的に`任意選択^2119な特能であるが、[ ~cache済み応答を再利用することは望ましいものであり、 そのような再利用は,それを防止する[ 要件や局所的な環境設定 ]が無ければ,既定の挙動である ]ものと見做せる。 したがって,~HTTP~cacheに課される要件は、 ~cacheに対し,[ 特定0の応答を,常に格納して再利用する ]ことを義務付けるのではなく,[ 再利用できない応答を格納すること / 格納-済み応答を不適切に再利用すること ]を防止することに注力される。 ◎ Although caching is an entirely OPTIONAL feature of HTTP, it can be assumed that reusing a cached response is desirable and that such reuse is the default behavior when no requirement or local configuration prevents it. Therefore, HTTP cache requirements are focused on preventing a cache from either storing a non-reusable response or reusing a stored response inappropriately, rather than mandating that caches always store and reuse particular responses.
`~cache~key@ ( `cache key^en )は,格納-済み応答を選ぶために~cacheが利用する情報であり、 最小でも,格納-済み応答を検索取得するために利用される[ `要請~method$, `~target~URI$ ]から構成される — ~methodは、[ 格納-済み応答は,どの状況下で後続な要請を満足するために利用できるか ]を決定する。 しかしながら, 今日における多くの~HTTP~cacheの共通的な利用では、 `GET$m に対する応答しか~cacheしていないので, ~cache~keyとして~URIしか利用していない。 ◎ The "cache key" is the information a cache uses to choose a response and is composed from, at a minimum, the request method and target URI used to retrieve the stored response; the method determines under which circumstances that response can be used to satisfy a subsequent request. However, many HTTP caches in common use today only cache GET responses and therefore only use the URI as the cache key.
~cacheは、[ `内容~折衝$の~subjectである`要請~target$ ]用に複数の応答を格納するかもしれない。 ~cacheは、 元の要請~内の~headerのうち一部を — `4.1§ に従って, `Vary$h 応答~header内の情報を利用して — ~cache~keyの中へ組入れることにより,これらの応答を相違化する。 ◎ A cache might store multiple responses for a request target that is subject to content negotiation. Caches differentiate these responses by incorporating some of the original request's header fields into the cache key as well, using information in the Vary response header field, as per Section 4.1.
~cacheは、 ~cache~keyの中に追加的な素材を組入れるかもしれない。 例えば,~UA~cacheは、 ある種の~privacy~riskを避けるため,参照元~siteの同一性も内包して~cache~keyを “二重化する” かもしれない ( `7.2§ を見よ)。 ◎ Caches might incorporate additional material into the cache key. For example, user agent caches might include the referring site's identity, thereby "double keying" the cache to avoid some privacy risks (see Section 7.2).
~cacheが最も共通的に格納するものは、 検索取得~要請に対する成功裡な結果 — すなわち、 `GET$m 要請に対する `200$st 応答であって,`~target資源$の`表現$を包含するもの — である。 しかしながら,[ ~redirect/ 否定的な結果(例: `404$st )/ `不完全$【または部分的】な結果(例: `206$st )/ `GET$m 以外の~methodに対する応答 ]を格納することもアリである — 当の~methodの定義が、 そのような~cache法を許容していて,~cache~key用の利用に相応しい何かを定義するならば。 ◎ Most commonly, caches store the successful result of a retrieval request: i.e., a 200 (OK) response to a GET request, which contains a representation of the target resource (Section 9.3.1 of [HTTP]). However, it is also possible to store redirects, negative results (e.g., 404 (Not Found)), incomplete results (e.g., 206 (Partial Content)), and responses to methods other than GET if the method's definition allows such caching and defines something suitable for use as a cache key.
~cacheは、[ `生成元~server$に接触できないか, 要請を回送する経路を見出せなくなった ]とき, `切断されて@ いる( `disconnected^en )とされる。 `切断されて$いる~cacheであっても、 一部の状況下では`非新鮮$な応答を~serveし得る ( `4.2.4§ )。 ◎ A cache is "disconnected" when it cannot contact the origin server or otherwise find a forward path for a request. A disconnected cache can serve stale responses in some circumstances (Section 4.2.4).
3. ~cache内への応答の格納-法
~cacheが[ ある要請に対する応答 ]を格納し得るのは、 ~AND↓ が満たされる場合に限られる — 他の応答は格納してはナラナイ: ◎ A cache MUST NOT store a response to a request unless:
- ~cacheは、 `要請~method$を解する。† ◎ the request method is understood by the cache;
- 応答は`最終-応答$である。 ◎ the response status code is final (see Section 15 of [HTTP]);
- 応答の`状態s~code$は[ `206$st0 / `304$st0 ]であるか, 応答~内に `must-understand$sdir ~cache指令が在る場合に限り ⇒ ~cacheは、 応答の状態s~codeを解する。† ◎ if the response status code is 206 or 304, or the must-understand cache directive (see Section 5.2.2.3) is present: the cache understands the response status code;
- 応答~内に `no-store$sdir `~cache指令$は無い。 ◎ the no-store cache directive is not present in the response (see Section 5.2.2.5);
-
~cacheが`共用~cache$である場合に限り, ~AND↓ が満たされる: ◎ ↓
-
~OR↓:
- 応答~内に `private$sdir ~cache指令は無い。
- 応答~内に 【引数を伴う】 `private$sdir ~cache指令が在って, 【引数に基づいて】改変された応答を`共用~cache$に格納することは許容される。
-
~OR↓:
- 要請~内に `Authorization$h ~headerは無い。
- 応答~内に`共用~cache$に~cacheすることを明示的に許容する~cache指令が在る ( `3.5§ を見よ)。
-
-
応答は、 次に挙げるいずれかを包含する: ◎ the response contains at least one of the following:
- `public$sdir ~cache指令 ◎ a public response directive (see Section 5.2.2.9);
- `共用~cache$でない場合に限り ⇒ `private$sdir ~cache指令 ◎ a private response directive, if the cache is not shared (see Section 5.2.2.7);
- `Expires$h ~header ◎ an Expires header field (see Section 5.3);
- `max-age$sdir ~cache指令 ◎ a max-age response directive (see Section 5.2.2.1);
- `共用~cache$である場合に限り ⇒ `s-maxage$sdir ~cache指令 ◎ if the cache is shared: an s-maxage response directive (see Section 5.2.2.10);
- ~cacheされることを許容する,`拡張~cache指令$ ◎ a cache extension that allows it to be cached (see Section 5.2.3); or
- `経験的に~cache可能$であるものと定義された`状態s~code$ ◎ a status code that is defined as heuristically cacheable (see Section 4.2.2).
注記: `拡張~cache指令$は、 上に挙げた どの要件も上書きし得る。 ◎ Note that a cache extension can override any of the requirements listed; see Section 5.2.3.
† この文脈において,~cacheが[ `要請~method$/`応答~状態s~code$ ]を “解する” とは、 ~cacheは,それを認識した上で[ 指定された,~cache法に関係する挙動 ]すべてを実装することをいう。 ◎ In this context, a cache has "understood" a request method or a response status code if it recognizes it and implements all specified caching-related behavior.
注記: 通常の運用においては、 一部の~cacheは,[ ~cache検証子も`明示的な失効~時刻$も無い応答 ]を格納しない — そのような応答は、 通例的に,格納しても有用にならないので。 しかしながら、 ~cacheがそのような応答を格納することも,禁制されない。 ◎ Note that, in normal operation, some caches will not store a response that has neither a cache validator nor an explicit expiration time, as such responses are not usually useful to store. However, caches are not prohibited from storing such responses.
3.1. ~header/~trailerの格納-法
~cacheは、 応答を格納するときには,応答~内に受信した~header — 自身が認識しないものも含む — も含めて格納しなければナラナイ。 これは、 新たな~HTTP~headerが成功裡に配備できることを確約する。 しかしながら,次に挙げる例外がある: ◎ Caches MUST include all received response header fields -- including unrecognized ones -- when storing a response; this assures that new HTTP header fields can be successfully deployed. However, the following exceptions are made:
-
次に挙げる~fieldは、 ~messageを回送する前に除去することが要求される。 これは、 格納する前にそうするよう実装してもヨイ:
- `Connection$h ~header。
- その`~field名$が `Connection$h ~headerの`~field値$に~listされたもの。
- その意味論にて,除去するよう要求されるもの — 例えば, `Connection§h に挙げられたものなど。
- [ `no-cache$sdir / `private$sdir ]~cache指令は、[ すべての~cache/`共用~cache$ ]による~headerの格納を防止する引数をとり得る。 ◎ The no-cache (Section 5.2.2.4) and private (Section 5.2.2.7) cache directives can have arguments that prevent storage of header fields by all caches and shared caches, respectively.
- `~proxy$に特有な~headerのうち,要請を回送するときに~cacheが利用するものは、 ~cacheが当の~proxyの識別情報を~cache~keyの中に組入れる場合を除き, 格納してはナラナイ。 該当するものは、 実質的に,次に挙げるものに制限される ⇒# `Proxy-Authenticate$h, `Proxy-Authentication-Info$h, `Proxy-Authorization$h ◎ Header fields that are specific to the proxy that a cache uses when forwarding a request MUST NOT be stored, unless the cache incorporates the identity of the proxy into the cache key. Effectively, this is limited to Proxy-Authenticate (Section 11.7.1 of [HTTP]), Proxy-Authentication-Info (Section 11.7.3 of [HTTP]), and Proxy-Authorization (Section 11.7.2 of [HTTP]).
~cacheは、 `~trailer$に対しては ⇒# ~headerとは別々に格納しても,破棄してもヨイ。 ~headerと`結合-$してはナラナイ。 ◎ Caches MAY either store trailer fields separate from header fields or discard them. Caches MUST NOT combine trailer fields with header fields.
3.2. 格納-済み~headerの更新-法
~cacheには、 いくつかの状況において,格納-済み応答の~headerたちを別の(概して,より新たな)応答で更新することが要求される。 例えば、[ `3.4§/`4.3.4§/`4.3.5§ ]を見よ。 ◎ Caches are required to update a stored response's header fields from another (typically newer) response in several situations; for example, see Sections 3.4, 4.3.4, and 4.3.5.
~cacheは,そうするときは、 供された応答~内の各~headerを格納-済み応答に追加しなければナラナイ — すでに在るものは,その`~field値$を置換して。 ただし、 次に挙げる例外に該当する~headerは除く: ◎ When doing so, the cache MUST add each header field in the provided response to the stored response, replacing field values that are already present, with the following exceptions:
- `3.1§ により,格納しないものとされるもの。 ◎ Header fields excepted from storage in Section 3.1,
- 下で述べるとおり、 ~cacheに格納-済みな応答が依存しているもの。 ◎ Header fields that the cache's stored response depends upon, as described below,
- 下で述べるとおり、 受信者により,自動的に処理されて除去されるもの。 ◎ Header fields that are automatically processed and removed by the recipient, as described below, and
- `Content-Length$h ~header。 ◎ The Content-Length header field.
一部の事例では,(とりわけ~UAにおける)~cacheは、 受信した応答に代えて,それを処理した結果を格納する — その処理に影響する~headerを更新すると,一貫しない挙動や~securityの課題をもたらし得る。 ~cacheは,この状況においては、 格納-済みな応答を更新するときに,該当する~headerを例外的に省略してもヨイ — ただし,そのような省略は、[ 格納-済みな応答の完全性を確約するために必要yな~field ]に制限するベキである。 ◎ In some cases, caches (especially in user agents) store the results of processing the received response, rather than the response itself, and updating header fields that affect that processing can result in inconsistent behavior and security issues. Caches in this situation MAY omit these header fields from updating stored responses on an exceptional basis but SHOULD limit such omission to those fields necessary to assure integrity of the stored response.
例えば,ある~browserは、 応答を受信している間に その`内容~符号法$を復号して,自身が格納した~dataと応答の元の~metadataとの繋がりを断つかもしれない。 その格納-済み~metadataを異なる `Content-Encoding$h ~headerで更新すると,問題になり得る。 同様に,ある~browserは、 応答~内に受信した`内容$に代えて,それを構文解析した結果の~HTML~treeを格納するかもしれない。 この事例で `Content-Type$h ~headerを更新すると、 作業-不能になる — 構文解析において為された形式についての前提は、 今や無効になるので。 ◎ For example, a browser might decode the content coding of a response while it is being received, creating a disconnect between the data it has stored and the response's original metadata. Updating that stored metadata with a different Content-Encoding header field would be problematic. Likewise, a browser might store a post-parse HTML tree rather than the content received in the response; updating the Content-Type header field would not be workable in this case because any assumptions about the format made in parsing would now be invalid.
さらには,一部の~field — `Content-Range$h ~headerなど — は、 ~HTTP実装により自動的に処理され,除去される。 実装は、 そのような~headerを — その処理が実際には生じないときでも — 更新から自動的に省略してもヨイ。 ◎ Furthermore, some fields are automatically processed and removed by the HTTP implementation, such as the Content-Range header field. Implementations MAY automatically omit such header fields from updates, even when the processing does not actually occur.
接頭辞 `Content-^c は、[ それを伴う~headerを更新から省略するよう通達するもの ]ではないことに注意。 この接頭辞は、 ~HTTPではなく~MIME~header用の慣例である。 ◎ Note that the Content-* prefix is not a signal that a header field is omitted from update; it is a convention for MIME header fields, not HTTP.
3.3. 不完全な応答の格納-法
~cacheは、 `完全$でない応答【![HTTP] § 6.1】であっても,[ それが応対した要請の`~method$は `GET$m ]かつ[ 応答の`状態s~code$は `200$st ]かつ[ 応答の`~header節$全体を受信した ]場合には、 それを`不完全$であるものと記録する限りにおいて,格納してもヨイ。 同様に, `206$st 応答についても、 それが`不完全$な `200$st 応答であったかのように格納してヨイ。 しかしながら,~cacheは、[ `Range$h, `Content-Range$h ]~headerを~supportしない, または[ それらの~headerに利用された`範囲~単位$を解さない ]ならば,内容が[ `不完全$/`部分的$ ]な応答を格納してはナラナイ。 ◎ If the request method is GET, the response status code is 200 (OK), and the entire response header section has been received, a cache MAY store a response that is not complete (Section 6.1 of [HTTP]) provided that the stored response is recorded as being incomplete. Likewise, a 206 (Partial Content) response MAY be stored as if it were an incomplete 200 (OK) response. However, a cache MUST NOT store incomplete or partial-content responses if it does not support the Range and Content-Range header fields or if it does not understand the range units used in those fields.
【 すなわち、 格納-済み応答においては,`不完全$か`部分的$かは区別されず、 いずれにせよ(`部分的な応答$であるかのように)範囲を記録することになる。 】
~cacheは、[ 後続な`範囲~要請$を為すこと( `Range§h `HTTP$r )により得られた成功裡な応答 ]を[ `3.4§ に従って,格納-済み応答たちと結合する ]ことにより,`不完全$な格納-済み応答を`完全$なものにしてもヨイ。 ◎ A cache MAY complete a stored incomplete response by making a subsequent range request (Section 14.2 of [HTTP]) and combining the successful response with the stored response, as defined in Section 3.4.\
~cacheは、 次のいずれかに該当する場合を除き,`不完全$な応答を要請に対する回答に利用してはナラナイ: ◎ A cache MUST NOT use an incomplete response to answer requests unless\
- 当の応答は【前~段落に述べたとおり】完全なものにされた。 ◎ the response has been made complete, or\
-
当の要請は、 部分的【`範囲~要請$】であって,それが指定している範囲は`不完全$な応答の中に収まる。 ◎ the request is partial and specifies a range wholly within the incomplete response.\
この場合に`~client$へ送信する`不完全$な応答は、 状態s~code `206$st を利用して,明示的に`部分的な応答$であるものと~markしなければナラナイ。 ◎ A cache MUST NOT send a partial response to a client without explicitly marking it using the 206 (Partial Content) status code.
3.4. 部分的な内容の結合-法
応答は、[ 接続が尚早に~closeされた ]または[ 当の要請が `Range$h にて 1 個~以上の範囲~指定子( `range-spec$p )を利用した ]場合に,`部分的$な表現のみを転送することがある。 そのような転送が何度か行われたとき、 ~cacheは,同じ表現の各部を成す いくつかの範囲を受信し得る。 ~cacheは、 これらの範囲を — [ それらすべてが同じ`強い検証子$を共有する ]かつ[ 当の~cacheは、 `HTTP$r `範囲の結合-法@~HTTPsem#combining.byte.ranges§ に与える~client要件に準拠する ]ならば — 単独の格納-済み応答の中へ結合して,結果の応答を今後の要請を満足するために再利用してもヨイ。 ◎ A response might transfer only a partial representation if the connection closed prematurely or if the request used one or more Range specifiers (Section 14.2 of [HTTP]). After several such transfers, a cache might have received several ranges of the same representation. A cache MAY combine these ranges into a single stored response, and reuse that response to satisfy later requests, if they all share the same strong validator and the cache complies with the client requirements in Section 15.3.7.3 of [HTTP].
~cacheは,[ 新たな応答と 1 個~以上の格納-済み応答とを結合する ]ときは、 `3.2§ に従う下で,[ 新たな応答~内に供された各~header ]を利用して[ 格納-済み応答~内の各~header ]を更新しなければナラナイ。 ◎ When combining the new response with one or more stored responses, a cache MUST update the stored response header fields using the header fields provided in the new response, as per Section 3.2.
3.5. 認証-済み要請に対する応答の格納-法
`共用~cache$は、[ `Authorization$h ~headerを伴う要請に対する~cache済み応答 ]を利用して,後続な要請を満足してはナラナイ — ただし、 ~AND↓ が満たされる場合は除く:
- 当の応答は `Cache-Control$h ~fieldを包含していて、 その`~field値$は[ 当の応答を格納することを許容する`応答~指令$ ]を伴う
- 当の~cacheは、 前項に該当する どの指令に対しても,[ その指令による,当の応答~用の要件 ]に適合する
この仕様においては、 次に挙げる`応答~指令$に,そのような効果がある ⇒# `must-revalidate$sdir, `public$sdir, `s-maxage$sdir ◎ In this specification, the following response directives have such an effect: must-revalidate (Section 5.2.2.2), public (Section 5.2.2.9), and s-maxage (Section 5.2.2.10).
4. ~cacheからの応答の構築-法
受信した【!the presented】 %要請 に対し,~cacheが自身に格納-済みな応答(以下,単に %応答 )を再利用できるためには、 ~AND↓ が満たされなければナラナイ: ◎ When presented with a request, a cache MUST NOT reuse a stored response unless:
- %応答 の`~target~URI$と %要請 内に提示されたそれは合致する ◎ the presented target URI (Section 7.1 of [HTTP]) and that of the stored response match, and
- %応答 が応対した要請の~methodは、 %応答 を %要請 用に利用することを許容している ◎ the request method associated with the stored response allows it to be used for the presented request, and
- %応答 の `Vary$h 内に挙げられた【!nominated】どの要請~header(もしあれば)も, %要請 に提示されたそれに合致する ( `4.1§ を見よ) ◎ request header fields nominated by the stored response (if any) match those presented (see Section 4.1), and
-
~OR↓:
- %応答 は成功裡に`検証-$された
- %応答 は `no-cache$sdir `応答~指令$を包含しない
-
~OR↓:
- %応答 は`新鮮$である
- %応答 は`非新鮮$であっても~serveすることが許容されている( `4.2.4§ )
- %応答 は成功裡に`検証-$された
注記: `拡張~cache指令$は、 上に挙げた どの要件も上書きし得る。 ◎ Note that a cache extension can override any of the requirements listed; see Section 5.2.3.
~cacheは:
- 格納-済み応答 %応答 を[ `検証$を伴わずに,要請を満足するために利用する ]ときは、 %応答 内に[ %応答 の `現在の齢$V に等しい値を伴う `Age$h ~header ]を`生成-$しなければナラナイ — その~headerが %応答 内に在る場合は,それを置換して。 `4.2.3§ を見よ。 ◎ When a stored response is used to satisfy a request without validation, a cache MUST generate an Age header field (Section 5.1), replacing any present in the response with a value equal to the stored response's current_age; see Section 4.2.3.
-
`安全$でない~methodを伴う要請 %要請 に対しては、 `生成元~server$に向けて,そのまま書き出さなければナラナイ — すなわち、 ~cacheには,[ %要請 が回送され,対する応答が受信される ]までは[ %要請 に対する返信を`生成-$すること ]は許容されない。 ◎ A cache MUST write through requests with methods that are unsafe (Section 9.2.1 of [HTTP]) to the origin server; i.e., a cache is not allowed to generate a reply to such a request before having forwarded the request and having received a corresponding response.
`安全$でない要請は、 すでに格納-済みな応答を無効化し得ることに注意 — `4.4§ を見よ。 ◎ Also, note that unsafe requests might invalidate already-stored responses; see Section 4.4.
-
[ 格納-済み/格納-可能 ]な応答を[ 複数の要請を満足する ]ために利用できる — それらに再利用することが許容される限りにおいて。 ◎ A cache can use a response that is stored or storable to satisfy multiple requests, provided that it is allowed to reuse that response for the requests in question.\
これは、 ~cacheが複数個の要請を `縮約する@ — ~cache~missに際して,受信した複数個の要請を 1 個の回送~要請に結合する — ことにより,[ `生成元~server$/~network ]の負荷を抑制することを可能化する。 しかしながら,[ 縮約される要請のうち,返された応答を当の~cacheが利用し得ないもの ]がある場合、 それを満足するためには回送する必要があるので, 追加的な待時間を導入することになり得ることに注意。 ◎ This enables a cache to "collapse requests" -- or combine multiple incoming requests into a single forward request upon a cache miss -- thereby reducing load on the origin server and network. Note, however, that if the cache cannot use the returned response for some or all of the "collapsed" requests, it will need to forward the requests in order to satisfy them, potentially introducing additional latency.
- 相応しい格納-済み応答が複数ある場合、 ( `Date$h ~headerにより決定される)最も近過去なものを利用しなければナラナイ。 また、要請を — 次のいずれかを伴わせた上で — 回送することにより,利用する応答を一義化できる ⇒# "`Cache-Control: max-age=0^c" / "`Cache-Control: no-cache^c" ◎ When more than one suitable response is stored, a cache MUST use the most recent one (as determined by the Date header field). It can also forward the request with "Cache-Control: max-age=0" or "Cache-Control: no-cache" to disambiguate which response to use.
- `時計$を備えていない~cacheは、 格納-済み応答を — どの利用に際しても — `再検証-$しなければナラナイ。 ◎ A cache without a clock (Section 5.6.7 of [HTTP]) MUST revalidate stored responses upon every use.
4.1. `Vary^h ~headerによる~cache~keyの計算-法
~cacheは、 受信した要請が[ ある格納-済み応答 %格納-済み応答 により満足できる場合 ]でも,[ %格納-済み応答 が `Vary$h ~headerを包含する場合 ]には[ `再検証$を伴うことなく %格納-済み応答 を利用して ]はナラナイ — ただし、[ %格納-済み応答 の `Vary$h `~field値$に挙げられた【!nominated】,すべての要請~header ]に関して,[ 当の要請~内の それらの~field, 元の要請(すなわち,%格納-済み応答 を~cacheに格納させた要請)内の それらの~field ]が以下に述べるように合致する場合は除く: ◎ When a cache receives a request that can be satisfied by a stored response and that stored response contains a Vary header field (Section 12.5.5 of [HTTP]), the cache MUST NOT use that stored response without revalidation unless all the presented request header fields nominated by that Vary field value match those fields in the original request (i.e., the request that caused the cached response to be stored).
-
所与の~headerに対し, 2 つの要請における それらが互いに合致するための必要十分条件は、[ それぞれの要請に,次に挙げるいくつかを適用することにより、 一方の要請の`~field値$を他方のそれに変形できるとき ]と定義される: ◎ The header fields from two requests are defined to match if and only if those in the first request can be transformed to those in the second request by applying any of the following:
- ~headerの構文にて許容される所で,空白を追加する/除去する。 ◎ adding or removing whitespace, where allowed in the header field's syntax
- 同じ`~field名$を伴う複数の`~field行l$を`結合-$する ( `HTTP$r `5.2@~HTTPinfra#field.lines§ )。 ◎ combining multiple header field lines with the same field name (see Section 5.2 of [HTTP])
- 各`~field値$を[ ~headerの仕様に則って,意味論が一致することが既知である ]ような仕方で正規化する (例:[ 順序が有意でない所では,`~field値$を並替える ], [ 文字大小無視と定義されている所では,小文字(または大文字)のみに正規化する ], 等々)。 ◎ normalizing both header field values in a way that is known to have identical semantics, according to the header field's specification (e.g., reordering field values when order is not significant; case-normalization, where values are defined to be case-insensitive)
- (正規化を終えた後に,†)当の~headerが[ 片方の要請にしか無い場合は合致しない/ どちらの要請にも無い場合は合致する ]とする。 【† 前項により、要請の意味論が~headerの有無に応じて変化しない場合も,合致すると解釈できよう。】 ◎ If (after any normalization that might take place) a header field is absent from a request, it can only match another request if it is also absent there.
- %格納-済み応答 の `Vary$h `~field値$を成す ある~memberが "`*^c" の場合、 この合致-は常に失敗するとする。 ◎ A stored response with a Vary header field value containing a member "*" always fails to match.
【`~cache~key$に】合致する格納-済み応答が複数ある場合、 ~cacheは,利用する 1 つを選ぶ必要がある。 応答の `Vary$h 内に挙げられた【!nominated】要請~headerには[ 順位付け選好~用の既知な仕組み ]がある場合 (例:[ `Accept$h や それに類する要請~header ]内の`品質値$)、 その仕組みを利用して,選好される応答を選んでもヨイ。 そのような仕組みは可用でないか,等しく選好される複数個の応答が導かれる場合、 `4§ に従って,( `Date$h ~headerにより決定される)最も近過去な応答が選ばれる。 ◎ If multiple stored responses match, the cache will need to choose one to use. When a nominated request header field has a known mechanism for ranking preference (e.g., qvalues on Accept and similar request header fields), that mechanism MAY be used to choose a preferred response. If such a mechanism is not available, or leads to equally preferred responses, the most recent response (as determined by the Date header field) is chosen, as per Section 4.
一部の資源は、 既定の応答 (すなわち,当の要請が選好を何も表出しなかったとき送信されるもの) から `Vary$h ~headerを誤って省略する — その結果、 後続な要請に対し,[ より選好-可能な他の応答が可用なとき ]でも既定の応答を選ぶことになる。 ~cacheは,ある`~target~URI$用に複数の格納-済み応答を有している場合には、 それらのうち[ `Vary$h ~headerは省略されていない, かつ その`~field値$は妥当であるもの ]から最も近過去なものを選ぶベキである ( `4.2.3§ を見よ)。 ◎ Some resources mistakenly omit the Vary header field from their default response (i.e., the one sent when the request does not express any preferences), with the effect of choosing it for subsequent requests to that resource even when more preferable responses are available. When a cache has multiple stored responses for a target URI and one or more omits the Vary header field, the cache SHOULD choose the most recent (see Section 4.2.3) stored response with a valid Vary field value.
合致する格納-済み応答は無い場合、 ~cacheは,受信した【!the presented】要請を満足できない。 その場合,当の要請は、 概して,`生成元~server$へ回送される — それには、[ 当の~cacheがすでに格納した応答は何であるかを述べる`事前条件$ ]も追加され得る (`検証§を見よ)。 ◎ If no stored response matches, the cache cannot satisfy the presented request. Typically, the request is forwarded to the origin server, potentially with preconditions added to describe what responses the cache has already stored (Section 4.3).
4.2. 鮮度
`齢$が`鮮度~維持期間$を超過していない応答は、 `新鮮@ ( `fresh^en )であるとされる。 逆に,それを超過した応答は、 `非新鮮@ ( `stale^en )とされる。 ◎ A "fresh" response is one whose age has not yet exceeded its freshness lifetime. Conversely, a "stale" response is one where it has.
【 この定義は,超過したかどうか計算できることが前提にある。 ( `4.2.4§ の記述に従うなら、 計算できない場合は,新鮮と見なされる?) 】
応答の `鮮度~維持期間@ ( `freshness lifetime^en )とは、[ それが`生成元~server$により`生成-$された時刻から,その`失効~時刻$まで ]の~~期間である。 `失効~時刻@ ( `expiration time^en )とは、 それを過ぎて以降は,[ 格納-済み応答は、 更なる`検証$を伴わない限り,~cacheにより利用できない ]とされる時刻である。 `明示的な失効~時刻@ ( `explicit expiration time^en )とは、 `生成元~server$が意図する`失効~時刻$である。 一方で, `経験的な失効~時刻@ ( `heuristic expiration time^en )とは、 `明示的な失効~時刻$が可用でないときに,~cacheによりアテガわれる`失効~時刻$である。 ◎ A response's "freshness lifetime" is the length of time between its generation by the origin server and its expiration time. An "explicit expiration time" is the time at which the origin server intends that a stored response can no longer be used by a cache without further validation, whereas a "heuristic expiration time" is assigned by a cache when no explicit expiration time is available.
応答の `齢@ ( `age^en )とは、 `生成元~server$により[ それが`生成-$された, もしくは 成功裡に`検証-$された ]ときから,経過した時間である。 ◎ A response's "age" is the time that has passed since it was generated by, or successfully validated with, the origin server.
~cache内の応答は、 `新鮮$である間は[ `生成元~server$に接触することなく,後続な要請を満足する ]ために利用でき、 それにより,効率を改善する。 ◎ When a response is fresh, it can be used to satisfy subsequent requests without contacting the origin server, thereby improving efficiency.
`生成元~server$にとり,`鮮度$を決定するための首な仕組みは、[ `Expires$h ~header/ `max-age$sdir 応答~指令 ]を利用して,未来の`明示的な失効~時刻$を供することである。 一般に,`生成元~server$は、 未来の`失効~時刻$ — およそ,それまでは[ `表現$が意味論的に有意な仕方で変化しない ]と見込まれる時刻 — を`明示的な失効~時刻$として応答にアテガうことになる。 ◎ The primary mechanism for determining freshness is for an origin server to provide an explicit expiration time in the future, using either the Expires header field (Section 5.3) or the max-age response directive (Section 5.2.2.1). Generally, origin servers will assign future explicit expiration times to responses in the belief that the representation is not likely to change in a semantically significant way before the expiration time is reached.
`生成元~server$は、 ~cacheに対し,【ある資源への】各~要請に毎回`検証$を強制したいときには、 過去を~~指す`明示的な失効~時刻$をアテガって, 応答がすでに`非新鮮$であることを指示できる。 準拠~cacheは、 通常は,`非新鮮$な~cache済み応答を — 後続な要請~用に再利用する前に — `検証-$することになる ( `4.2.4§ を見よ)。 ◎ If an origin server wishes to force a cache to validate every request, it can assign an explicit expiration time in the past to indicate that the response is already stale. Compliant caches will normally validate a stale cached response before reusing it for subsequent requests (see Section 4.2.4).
`生成元~server$は,`明示的な失効~時刻$を常に供するとは限らないので、 ~cacheには,一定の状況下において[ `失効~時刻$を決定する経験則を利用する ]ことも許容される ( `4.2.2§ を見よ)。 ◎ Since origin servers do not always provide explicit expiration times, caches are also allowed to use a heuristic to determine an expiration time under certain circumstances (see Section 4.2.2).
応答は、[ `現在の齢$V ~LT `鮮度~維持期間$V ]が満たされる間は, `新鮮$である ものと決定される。 ◎ The calculation to determine if a response is fresh is: ◎ response_is_fresh = (freshness_lifetime > current_age) ◎ freshness_lifetime is defined in Section 4.2.1; current_age is defined in Section 4.2.3.
`~client$は、[ `max-age$qdir / `min-fresh$qdir ]要請~指令を送信して,[ 対応する応答~用の`鮮度$の計算 ]に対する制限sを示唆できる。 しかしながら、 ~cacheには,それらを尊守することは要求されない。 ◎ Clients can send the max-age or min-fresh request directives (Section 5.2.1) to suggest limits on the freshness calculations for the corresponding response. However, caches are not required to honor them.
日時( `HTTP-date$p )の構文解析-法に共通的にある問題を避けるため、 ~cache`受信者$は,鮮度を計算するときには: ◎ When calculating freshness, to avoid common problems in date parsing:
- すべての日時~形式は,文字大小区別として指定されているが、 当の`~field値$を文字大小無視で照合するベキである。 ◎ Although all date formats are specified to be case-sensitive, a cache recipient SHOULD match the field value case-insensitively.
- 自身の内部~実装による時刻の分解能が `HTTP-date$p 値のそれより粗い場合、 構文解析した `Expires$h 日時を[ 受信した値を超えない最も近い時刻 ]として内部的に表現しなければナラナイ。【!*】 ◎ If a cache recipient's internal implementation of time has less resolution than the value of an HTTP-date, the recipient MUST internally represent a parsed Expires date as the nearest time equal to or earlier than the received value.
- 地域的な時間帯を[ `齢$や`失効~時刻$ ]の[ 計算, 比較 ]に波及させてはナラナイ。 ◎ A cache recipient MUST NOT allow local time zones to influence the calculation or comparison of an age or expiration time.
- 失効~時刻の計算-時には、[ "`GMT^c" 以外を時間帯 略語として伴う日時 ]を無効と見なすベキである。 ◎ A cache recipient SHOULD consider a date with a zone abbreviation other than "GMT" to be invalid for calculating expiration.
注記: 鮮度が適用されるのは、 ~cache運用に限られる — 表示の~refreshや, `資源$の~reloadを~UAに強制する用途には利用できない。 ~cacheと履歴の仕組みとの相違点は、 `6§ に説明される。 ◎ Note that freshness applies only to cache operation; it cannot be used to force a user agent to refresh its display or reload a resource. See Section 6 for an explanation of the difference between caches and history mechanisms.
4.2.1. 鮮度~維持期間の計算
~cacheは、 次に挙げる規則を順に評価して,[ 最初に合致する項目にて与える値 ]を利用して,応答の`鮮度~維持期間$を計算できる (その計算結果は、 `鮮度~維持期間@V と称される): ◎ A cache can calculate the freshness lifetime (denoted as freshness_lifetime) of a response by evaluating the following rules and using the first match:
- ~cacheは`共有-$されている, かつ `s-maxage$sdir 応答~指令が在る場合 ⇒ その値 ◎ If the cache is shared and the s-maxage response directive (Section 5.2.2.10) is present, use its value, or
- `max-age$sdir 応答~指令が在る場合 ⇒ その値 ◎ If the max-age response directive (Section 5.2.2.1) is present, use its value, or
- `Expires$h 応答~headerが在る場合 ⇒ その値 ~MINUS `Date$h 応答~headerの値 ( `Date^h が無い場合、 `Date§h に従って,~messageを受信した時刻を利用する) ◎ If the Expires response header field (Section 5.3) is present, use its value minus the value of the Date response header field (using the time the message was received if it is not present, as per Section 6.6.1 of [HTTP]), or
- 他の場合 ⇒ 応答~内には`明示的な失効~時刻$は無い。 `経験的$な`鮮度~維持期間$が適用-可能になり得る。 ◎ Otherwise, no explicit expiration time is present in the response. A heuristic freshness lifetime might be applicable; see Section 4.2.2.
注記: この計算には、 次が意図される ⇒ アリなときは、 `生成元~server$から供された時計~情報を利用して,時計~同期調整を抑制する。 ◎ Note that this calculation is intended to reduce clock skew by using the clock information provided by the origin server whenever possible.
所与の指令~用の値が複数個~在る場合 (例: `Expires$h ~header`~field行l$が複数個 / "`Cache-Control: max-age^c" 指令が複数個)、[ 最初に生じたものを利用するか,応答は`非新鮮$と見なす ]べきである。 複数個の指令が競合する場合 (例: `max-age$sdir, `no-cache$sdir どちらも在る)、 最も制約的な指令が尊守されるべきである。 ~cacheには、 無効な鮮度~情報を伴う応答 (例: `max-age^dir 指令の内容は整数でない) を`非新鮮$と見なすことが奨励される。 ◎ When there is more than one value present for a given directive (e.g., two Expires header field lines or multiple Cache-Control: max-age directives), either the first occurrence should be used or the response should be considered stale. If directives conflict (e.g., both max-age and no-cache are present), the most restrictive directive should be honored. Caches are encouraged to consider responses that have invalid freshness information (e.g., a max-age directive with non-integer content) to be stale.
4.2.2. 鮮度の経験的な計算-法
`生成元~server$は,常に`明示的な失効~時刻$を供するとは限らない。 したがって,時刻が明示的に指定されていないときは、 ~cacheは,[ 確からしい`失効~時刻$を見積もる ]ために[ 他の`~field値$( `Last-Modified$h による時刻など)を利用する~algo ]を使役して,`経験的な失効~時刻$をアテガってもヨイ。 この仕様は、 特定の~algoは供さないが, それらの結果に対する~~最低限の拘束を課す。 ◎ Since origin servers do not always provide explicit expiration times, a cache MAY assign a heuristic expiration time when an explicit time is not specified, employing algorithms that use other field values (such as the Last-Modified time) to estimate a plausible expiration time. This specification does not provide specific algorithms, but it does impose worst-case constraints on their results.
~cacheは、 格納-済み応答~内に`明示的な失効~時刻$が在るときには, `鮮度$を決定する経験則を利用してはナラナイ。 何故なら、 `3§ による要件により,経験則を利用し得るのは[ 明示的な鮮度を伴わない応答のうち,次のいずれかに該当するもの ]に限られるので: ◎ A cache MUST NOT use heuristics to determine freshness when an explicit expiration time is present in the stored response. Because of the requirements in Section 3, heuristics can only be used\
- `状態s~code$は `経験的に~cache可能@ ( `heuristically cacheable^en )であると定義されたもの (例: `HTTP$r `状態s~codeの概観@~HTTPsem#overview.of.status.codes§に挙げられたもの)。 ◎ on responses without explicit freshness whose status codes are defined as "heuristically cacheable" (e.g., see Section 15.1 of [HTTP]) and\
- 明示的に`~cache可能$であると~markされたもの (例: `public$sdir 応答~指令により)。 ◎ on responses without explicit freshness that have been marked as explicitly cacheable (e.g., with a public response directive).
以前までの仕様は、 “`経験的に~cache可能$” な`状態s~code$を “既定で~cache可能” と称していたことに注意。 ◎ Note that in previous specifications, heuristically cacheable response status codes were called "cacheable by default".
応答に `Last-Modified$h ~headerが在る場合、 ~cacheには,[ その時刻から現在時までの時区間に対する ある割合 ]を超えないものを経験的な失効~値として利用することが奨励される。 この割合の代表的な設定は `10%^ 程度になるであろう。 ◎ If the response has a Last-Modified header field (Section 8.8.2 of [HTTP]), caches are encouraged to use a heuristic expiration value that is no more than some fraction of the interval since that time. A typical setting of this fraction might be 10%.
注記: ~HTTP仕様の以前の~version( `2616/13.9$rfc )では、[ ~query成分を伴う~URI(すなわち, "`?^c" を包含する~URI) ]に対しては,~cacheによる`経験的$な鮮度の計算-法を禁制していたが、 実施においては,これは広く実装されていない。 したがって,`生成元~server$には、 ~cachingを防止したいと望む場合には,明示的な指令を送信することが奨励される (例: `Cache-Control: no-cache^c )。 ◎ Note: A previous version of the HTTP specification (Section 13.9 of [RFC2616]) prohibited caches from calculating heuristic freshness for URIs with query components (i.e., those containing "?"). In practice, this has not been widely implemented. Therefore, origin servers are encouraged to send explicit directives (e.g., Cache-Control: no-cache) if they wish to prevent caching.
4.2.3. 齢の計算-法
`Age$h ~headerは、[ 応答~messageが~cacheから得されるときに見積もられた`齢$ ]を伝達するために利用される。 その`~field値$は、 ~cacheにより見積もられた,[ `生成元~server$が,当の応答を[ `生成-$した, または`検証-$した ]ときからの秒~数 ]である。 したがって `Age^h 値は、 応答が[ `生成元~server$からの経路~沿いにある,各~cache ]に滞在していた時間の総和と[ ~network経路に沿って通過中の時間 ]を足したものになる。 ◎ The Age header field is used to convey an estimated age of the response message when obtained from a cache. The Age field value is the cache's estimate of the number of seconds since the origin server generated or validated the response. The Age value is therefore the sum of the time that the response has been resident in each of the caches along the path from the origin server, plus the time it has been in transit along network paths.
`齢$の計算には、 以下に挙げる~dataが利用される — まず,以下の記述に利用される語の意味を与える:
- %応答 ⇒ 齢を計算する対象である,格納-済み応答。
- %要請 ⇒ %応答 が応対した( %応答 を格納-済みにさせた)要請。 【原文の記述からは,はっきりしないが、成功裡に再検証させた要請があれば,それを指すようにも思われる。】
- %時計 ⇒ 当の~cache実装の`時計$。
- `齢~値@V ◎ "age_value"
- %応答 の `Age$h ~headerの値を,算術-演算に適切な形で表す値 — 可用でない場合†は 0。 【† 例えば、最も`上流$にある~cacheが,その応答の再利用を初めて試みるとき】 ◎ The term "age_value" denotes the value of the Age header field (Section 5.1), in a form appropriate for arithmetic operation; or 0, if not available.
- `日時~値@V ◎ "date_value"
- %応答 の `Date$h ~headerの値を,算術-演算に適切な形で表す値。 この~headerの定義, および それを伴わない応答に関する要件は、 `Date§h を見よ。 ◎ The term "date_value" denotes the value of the Date header field, in a form appropriate for arithmetic operations. See Section 6.6.1 of [HTTP] for the definition of the Date header field and for requirements regarding responses without it.
- `現在時@V ◎ "now"
- %時計 の現在の値。 ◎ The term "now" means the current value of this implementation's clock (Section 5.6.7 of [HTTP]).
- `要請~時刻@V ◎ "request_time"
- %要請 を受信した時点における, %時計 の値。 ◎ The value of the clock at the time of the request that resulted in the stored response.
- `応答~時刻@V ◎ "response_time"
- %応答 を受信した時点における, %時計 の値。 ◎ The value of the clock at the time the response was received.
%応答 の`齢$は、 まったく独立な 2 つの仕方で計算できる: ◎ A response's age can be calculated in two entirely independent ways:
- `見かけ齢@V ⇒ %時計 と`生成元~server$の`時計$とが,適度にきちんと同期されている場合に限り、 次で与えられる ⇒ `max^op( 0, `応答~時刻$V ~MINUS `日時~値$V ) ◎ the "apparent_age": response_time minus date_value, if the implementation's clock is reasonably well synchronized to the origin server's clock. If the result is negative, the result is replaced by zero.
-
`補正済み齢~値@V ⇒ %応答 の経路~沿いにある どの~cacheも `~HTTP11$ 以上を実装する場合に限り、 次で与えられる ⇒ `齢~値$V ~PLUS %応答~遅延; %応答~遅延 = ( `応答~時刻$V ~MINUS `要請~時刻$V )
~cacheは、 この値を[ %応答 を受信した時刻ではなく, %要請 が起動された時刻 ]から相対的に解釈しなければナラナイ。 ◎ the "corrected_age_value", if all of the caches along the response path implement HTTP/1.1 or greater. A cache MUST interpret this value relative to the time the request was initiated, not the time that the response was received. • apparent_age = max(0, response_time - date_value); • response_delay = response_time - request_time; • corrected_age_value = age_value + response_delay;
`補正済み齢~値$V を【下の,結果を与える式に利用される】 `補正済み初期~齢$V に代えて利用してもヨイ。 [ `Age$h を正しく挿入しないかもしれない,ひどく旧い~cache実装 ]が在る状況下では、 次のように,より保守的に `補正済み初期~齢$V を計算できる ⇒ `補正済み初期~齢@V = `max^op( `見かけ齢$V, `補正済み齢~値$V ) ◎ The corrected_age_value MAY be used as the corrected_initial_age. In circumstances where very old cache implementations that might not correctly insert Age are present, corrected_initial_age can be calculated more conservatively as • corrected_initial_age = max(apparent_age, corrected_age_value);
以上により, %応答 の現在の`齢$( `現在の齢$V )を計算できる — [ %応答 が`生成元~server$により最後に`検証-$されたとき ]から `補正済み初期~齢$V までの時間(秒)を加算して ⇒# `滞在~時間@V = `現在時$V ~MINUS `応答~時刻$V; `現在の齢@V = `補正済み初期~齢$V ~PLUS `滞在~時間$V ◎ The current_age of a stored response can then be calculated by adding the time (in seconds) since the stored response was last validated by the origin server to the corrected_initial_age. • resident_time = now - response_time; • current_age = corrected_initial_age + resident_time;
4.2.4. 非新鮮な応答の~serve法
応答が`非新鮮$であるとは、[ 明示的な失効時期~情報が在る, または 失効時期の`経験的$な計算が許容されている ]ものであって,`鮮度$の計算に則って`新鮮$でないとされたものになる。 ◎ A "stale" response is one that either has explicit expiry information or is allowed to have heuristic expiry calculated, but is not fresh according to the calculations in Section 4.2.
~cacheは、 ~protocol内の明示的な`~cache指令$ — 例えば,次に挙げる`応答~指令$ — により禁制されている場合は, `非新鮮$な応答を`生成-$してはナラナイ ⇒# `no-cache$sdir / `must-revalidate$sdir / 適用-可能な `s-maxage$sdir / 適用-可能な `proxy-revalidate$sdir ◎ A cache MUST NOT generate a stale response if it is prohibited by an explicit in-protocol directive (e.g., by a no-cache response directive, a must-revalidate response directive, or an applicable s-maxage or proxy-revalidate response directive; see Section 5.2.2).
~cacheは、 次のいずれかに該当する場合を除き, `非新鮮$な応答を生成してはナラナイ: ◎ A cache MUST NOT generate a stale response unless\
- `切断されて$いる ◎ it is disconnected or\
- そうすることが[ `~client$, `生成元~server$ ]いずれかにより明示的に許可されている — 例 ⇒# `max-stale$qdir 要請~指令により/ `拡張~cache指令$により( `RFC5861$r に定義されるものなど)/ 帯域外の契約に則った環境設定により ◎ doing so is explicitly permitted by the client or origin server (e.g., by the max-stale request directive in Section 5.2.1, extension directives such as those defined in [RFC5861], or configuration in accordance with an out-of-band contract).
4.3. 検証
~cacheは、[ 要請された~URI用の格納-済み応答は 1 個以上~在る ]が,そのどれも~serveできないときは (例:それらが`新鮮$でないとき, または 1 つに選べないとき( `4.1§ を見よ))、 要請を回送するときに`条件付き要請$の仕組みを利用して, `内方$にある次の~serverに次を行う機会を与えることができる: ◎ When a cache has one or more stored responses for a requested URI, but cannot serve any of them (e.g., because they are not fresh, or one cannot be chosen; see Section 4.1), it can use the conditional request mechanism (Section 13 of [HTTP]) in the forwarded request to give the next inbound server an opportunity\
- 利用する有効な格納-済み応答を選ぶ。 ◎ to choose a valid stored response to use,\
- その処理nにおいて格納-済み~metadataを更新する。 ◎ updating the stored metadata in the process, or\
- 格納-済み応答(たち)を新たな応答で置換する。 ◎ to replace the stored response(s) with a new response.\
この処理nは、 格納-済み応答の[ `検証ng^dfn( `validating^en ) / `再検証ng^dfn( `revalidating^en ) ]として知られている。 ◎ This process is known as "validating" or "revalidating" the stored response.
4.3.1. 検証~要請の送信-法
~cacheは,`検証$用に`条件付き要請$を`生成-$するときは、 満足しようと試みている要請から開始するか, あるいは要請を独立に起動している場合は、 格納-済み応答を利用して要請を合成する — [ `~method$, `~target~URI$, `Vary$h ~headerにより識別される要請~headerたち( `4.1§ ) ]を複製することにより。 ◎ When generating a conditional request for validation, a cache either starts with a request it is attempting to satisfy or -- if it is initiating the request independently -- synthesizes a request using a stored response by copying the method, target URI, and request header fields identified by the Vary header field (Section 4.1).
次に、 1 つ以上の`事前条件~header$で,その要請を更新する。 これらは、 同じ~URIを持つ格納-済み応答(たち)を~sourceとする`検証子$~metadataを包含する。 これは概して、 同じ`~cache~key$を伴う格納-済み応答に限り含むことになる — ~cacheには、[ 自身が送信している要請~headerでは選べない応答 ]を検証することも許容されるが ( `4.1§ を見よ)。 ◎ It then updates that request with one or more precondition header fields. These contain validator metadata sourced from a stored response(s) that has the same URI. Typically, this will include only the stored response(s) that has the same cache key, although a cache is allowed to validate a response that it cannot choose with the request header fields it is sending (see Section 4.1).
次に,`事前条件~header$は、 各`受信者$により[ `資源$の現在の`表現$に等価な格納-済み応答は在るかどうか ]を決定するために比較される。 ◎ The precondition header fields are then compared by recipients to determine whether any stored response is equivalent to a current representation of the resource.
そのような`検証子$の一つは、 `Last-Modified$h ~headerにて与えられる時刻印である — それは、 次に挙げる所で利用できる: ◎ One such validator is the timestamp given in a Last-Modified header field (Section 8.8.2 of [HTTP]),\
- 応答を`検証-$するためとして, `If-Modified-Since$h ~header内で。 ◎ which can be used in an If-Modified-Since header field for response validation,\
- `表現$を選定するためとして,[ `If-Unmodified-Since$h / `If-Range$h ]~header内で (すなわち,`~client$は、 以前に得した[ その時刻印を伴う`表現$ ]を特定的に指している)。 ◎ or in an If-Unmodified-Since or If-Range header field for representation selection (i.e., the client is referring specifically to a previously obtained representation with that timestamp).
`検証子$には、 `ETag$h ~field内に与えられる`実体~tag$もある。 [ 1 個~以上の格納-済み応答を指示する 1 個~以上の`実体~tag$ ]は、 次に挙げる所で利用できる: ◎ Another validator is the entity tag given in an ETag field (Section 8.8.3 of [HTTP]). One or more entity tags, indicating one or more stored responses, can be used\
- 応答を`検証-$するためとして, `If-None-Match$h ~header内で。 ◎ in an If-None-Match header field for response validation,\
- `表現$を選定するためとして,[ `If-Match$h / `If-Range$h ]~header内で (すなわち,~clientは、 以前に得した[ ~listされた`実体~tag$を伴う, 1 個~以上の`表現$ ]を特定的に指している)。 ◎ or in an If-Match or If-Range header field for representation selection (i.e., the client is referring specifically to one or more previously obtained representations with the listed entity tags).
~cacheは、 格納-済み応答の検証~用に`条件付き要請$を`生成-$するときは: ◎ When generating a conditional request for validation, a cache:
- [ 当の`実体~tag$を供している 1 個以上の格納-済み応答 ]を検証しているならば ⇒ 関連な`実体~tag$を ( `If-Match$h, `If-None-Match$h, `If-Range$h いずれかを利用して) 送信しなければナラナイ。 ◎ MUST send the relevant entity tags (using If-Match, If-None-Match, or If-Range) if the entity tags were provided in the stored response(s) being validated.
- [ 当の要請は下位範囲~用ではない【`範囲~要請$ではない】 ]かつ[ 検証している格納-済み応答は 1 個だけであり、 それは `Last-Modified$h 値を包含する ]ならば ⇒ `Last-Modified$h 値を ( `If-Modified-Since$h を利用して) 送信するベキである。 ◎ SHOULD send the Last-Modified value (using If-Modified-Since) if the request is not for a subrange, a single stored response is being validated, and that response contains a Last-Modified value.
- [ 当の要請は下位範囲~用である ]かつ[ 検証している格納-済み応答は 1 個だけであり、 それは `Last-Modified$h 値を包含するが`実体~tag$は包含しない ]ならば ⇒ `Last-Modified$h 値を ( `If-Unmodified-Since$h, `If-Range$h いずれかを利用して) 送信してもヨイ。 ◎ MAY send the Last-Modified value (using If-Unmodified-Since or If-Range) if the request is for a subrange, a single stored response is being validated, and that response contains only a Last-Modified value (not an entity tag).
ほとんどの事例では、 ~cache検証~要請~内には,両~検証子とも`生成-$される — `実体~tag$の方が明瞭に優れるときでも、[ `実体~tag$による事前条件を解さない旧い`媒介者$が適切に応答する ]ことを許容するため。 ◎ In most cases, both validators are generated in cache validation requests, even when entity tags are clearly superior, to allow old intermediaries that do not understand entity tag preconditions to respond appropriately.
4.3.2. 受信した検証~要請の取扱い
要請の`連鎖$沿いにある 各`~client$は,自前の~cacheを備えることもあるので、 `媒介者$における~cacheが[ 他の(`外方$にある)~cacheから`条件付き要請$を受信する ]ことは,共通的にある。 同様に,一部の~UAは、 `条件付き要請$を次のために用立てる ⇒# 近過去に改変された`表現$に対しては,その~data転送を制限する/ `部分的$に検索取得された表現の転送を完了する ◎ Each client in the request chain may have its own cache, so it is common for a cache at an intermediary to receive conditional requests from other (outbound) caches. Likewise, some user agents make use of conditional requests to limit data transfers to recently modified representations or to complete the transfer of a partially retrieved representation.
要請 %要請 を受信した~cacheは、[ 自身に格納-済みな[ `200$st / `206$st ]応答 %応答 を `4§ に従って再利用すること ]で %要請 を満足できるならば、[ %要請 内に見出された各 `条件付き要請~header$による`事前条件$のうち,自身に適用-可能なもの ]を[ %応答 が包含している対応する`検証子$ ]に対し評価するベキである。 ◎ If a cache receives a request that can be satisfied by reusing a stored 200 (OK) or 206 (Partial Content) response, as per Section 4, the cache SHOULD evaluate any applicable conditional header field preconditions received in that request with respect to the corresponding validators contained within the stored response.
~cacheは、 次のいずれかに該当する事前条件は,評価してはナラナイ: ◎ A cache MUST NOT evaluate conditional header fields that\
- `生成元~server$に限り適用されるもの ◎ only apply to an origin server,\
- 当の要請は、 次のいずれかに該当する ⇒# その意味論は、~cache済み応答では満足し得ない/ その`~target資源$用の格納-済み応答は無い ◎ occur in a request with semantics that cannot be satisfied with a cached response,\ or occur in a request with a target resource for which it has no stored responses;\
これらの事前条件は、 他の何らかの(`内方$にある)`~server$用に意図されている見込みが高いので。 ◎ such preconditions are likely intended for some other (inbound) server.
~cacheによる`条件付き要請$の適正な評価は、[ 受信された`事前条件~header$たち, それらの優先順 ]に依存する。 要約すると,条件付き~headerのうち[ `If-Match$h, `If-Unmodified-Since$h ]は、 ~cacheには適用-可能でなく, `If-None-Match$h は `If-Modified-Since$h より優先される。 事前条件の優先順についての完全な仕様は、 `HTTP$r `事前条件の優先順@~HTTPsem#precedence§を見よ。 ◎ The proper evaluation of conditional requests by a cache depends on the received precondition header fields and their precedence. In summary, the If-Match and If-Unmodified-Since conditional header fields are not applicable to a cache, and If-None-Match takes precedence over If-Modified-Since. See Section 13.2.2 of [HTTP] for a complete specification of precondition precedence.
`If-None-Match$h ~headerを包含する要請は、 次を指示する ⇒ `~client$は、 自前の格納-済み応答(たち)と~cacheにより( `4§ に従って)選ばれる格納-済み応答(たち)とを — 後者が何であれ — 比較して`検証-$するよう求めている。 ◎ A request containing an If-None-Match header field (Section 13.1.2 of [HTTP]) indicates that the client wants to validate one or more of its own stored responses in comparison to the stored response chosen by the cache (as per Section 4).
`If-None-Match$h ~headerは無いが `If-Modified-Since$h ~headerを包含する要請は、 次を指示する ⇒ `~client$は、 自前の格納-済み応答(たち)について,その改変~日時を`検証-$するよう求めている。 ◎ If an If-None-Match header field is not present, a request containing an If-Modified-Since header field (Section 13.1.3 of [HTTP]) indicates that the client wants to validate one or more of its own stored responses by modification date.
要請は `If-Modified-Since$h ~headerを包含するが,格納-済み応答 %応答 内に `Last-Modified$h ~headerは無い場合、 ~cacheは, %応答 の `Date$h ~field値 ( `Date^h が無い場合は %応答 を受信した時刻) を利用して,その`事前条件~header$【!条件付き】を評価するベキである。 ◎ If a request contains an If-Modified-Since header field and the Last-Modified header field is not present in a stored response, a cache SHOULD use the stored response's Date field value (or, if no Date field is present, the time that the stored response was received) to evaluate the conditional.
`範囲~要請$に対する`部分的な応答$を実装する~cacheは、 `Range§h `HTTP$r にて定義されるとおり, 受信した `If-Range$h ~headerを自身が選んだ格納-済み応答に関して評価する必要もある。 ◎ A cache that implements partial responses to range requests, as defined in Section 14.2 of [HTTP], also needs to evaluate a received If-Range header field (Section 13.1.5 of [HTTP]) with respect to the cache's chosen response.
~cacheは、[ `If-None-Match$h による`実体~tag$の~list %~tag~list を包含する要請 ]用に,[ 自前の格納-済み応答たち %応答~群 を`再検証-$する ]ために要請を回送するものと裁定したときは: ◎ When a cache decides to forward a request to revalidate its own stored responses for a request that contains an If-None-Match list of entity tags,\
- 回送する要請の `If-None-Match$h ~headerの`~field値$を次に置換して送信してもヨイ ⇒ %~tag~list と[ %応答~群 を成す各~応答(`新鮮$か否かは問わない)の`実体~tag$からなる~list ]とを結合した結果の和集合 — ただし ⇒ [ 各~応答のうち,`部分的$な内容を包含するもの ]の`実体~tag$は、 この和集合から除外しなければナラナイ — ただし ⇒ 要請が`範囲~要請$であり,そのような部分的な応答で全部的に満足されることになる場合は除く ◎ the cache MAY combine the received list with a list of entity tags from its own stored set of responses (fresh or stale) and send the union of the two lists as a replacement If-None-Match header field value in the forwarded request.\ If a stored response contains only partial content, the cache MUST NOT include its entity tag in the union\ unless the request is for a range that would be fully satisfied by that partial stored response.\
- 回送した要請に対する応答 %応答 が[ `304$st である ]かつ[ `ETag$h ~headerを伴う ]かつ[ その`~field値$は %~tag~list 内に無い`実体~tag$を含む ]場合 ⇒ その`実体~tag$に対応する格納-済み応答を再利用しつつ, %応答 の~metadataでそれを更新した上で( `4.3.4§ )、 ~clientに対し `200$st 応答を`生成-$しなければナラナイ ◎ If the response to the forwarded request is 304 (Not Modified) and has an ETag field value with an entity tag that is not in the client's list,\ the cache MUST generate a 200 (OK) response for the client by reusing its corresponding stored response, as updated by the 304 response metadata (Section 4.3.4).
4.3.3. 検証~応答【検証~要請に対する応答】の取扱い
~cacheによる[ `条件付き要請$に対する応答 ]の取扱いは、 その`状態s~code$に依存する: ◎ Cache handling of a response to a conditional request depends upon its status code:
- 状態s~code `304$st は、 格納-済み応答を[ 更新できる/再利用できる ]ことを指示する。 ◎ A 304 (Not Modified) response status code indicates that the stored response can be updated and reused; see Section 4.3.4.
- 全部的な応答(すなわち,`内容$を伴うもの)は、[ `条件付き要請$内に `nominate^en された【?】,どの格納-済み応答 ]も相応でないことを指示する。 代わりに,~cacheは、 要請を満足するためには,その全部的な応答を利用しなければナラナイ。 ~cacheは、 そのような全部的な応答を — `3§ による拘束に従う下で — 格納してもヨイ。 ◎ A full response (i.e., one containing content) indicates that none of the stored responses nominated in the conditional request are suitable. Instead, the cache MUST use the full response to satisfy the request. The cache MAY store such a full response, subject to its constraints (see Section 3).
-
しかしながら,~cacheは、[ 応答の`検証$を試みている間に `5xx$st 応答を受信した ]ときには,次のいずれかを行える: ◎ However, if a cache receives a 5xx (Server Error) response while attempting to validate a response, it can either\
- 要請している~clientへ,この `5xx^st0 応答を回送する。 ◎ forward this response to the requesting client\
-
~serverが応答-に失敗したかのように動作する。 この場合、 次のいずれかを行える:
- 以前に格納-済みな応答を — `4.2.4§ による拘束に従う下で — 送信する。
- 検証~要請を試行する。
4.3.4. 検証に際しての,格納-済み応答の新鮮~化法
`304$st 応答 — 以下,この節を通して `304 応答^V と記す — を受信した~cacheは、 格納-済み応答のうち[ `304 応答^V から供される新たな情報 ]で更新するのに相応しいものを識別して,それを行う必要がある — そのような格納-済み応答たちが成す集合は、 次に従って決定される: ◎ When a cache receives a 304 (Not Modified) response, it needs to identify stored responses that are suitable for updating with the new information provided, and then do so.
- %初期~集合 ~LET 格納-済み応答のうち[ `4§ の冒頭に与えた要件~listのうち`最後の要件@#_ecxluded-condition-for-freshening$以外は すべて満たすもの (すなわち,【最後の要件も満たすならば】 `304 応答^V が応対した要請~用に選ばれ得たもの) ]たちが成す集合 ◎ The initial set of stored responses to update are those that could have been chosen for that request -- i.e., those that meet the requirements in Section 4, except the last requirement to be fresh, able to be served stale, or just validated. ◎ Then, that initial set of stored responses is further filtered by the first match of:
-
~IF[ `304 応答^V は 1 個以上の `強い検証子$ を包含する (これらの各~検証子は、[ 更新-対象になる,ある`選定された表現$ ]を識別する) ] ⇒ ~RET %初期~集合 を成す応答のうち[ `304 応答^V が包含する いずれかの`強い検証子$と同じ`強い検証子$を伴うもの ]たちが成す集合 ◎ If the new response contains one or more "strong validators" (see Section 8.8.1 of [HTTP]), then each of those strong validators identifies a selected representation for update.\ All the stored responses in the initial set with one of those same strong validators are identified for update.\
該当するものが無い場合(すなわち、空~集合を返す)、 `304 応答^V を格納-済み応答の更新に利用してはナラナイ。 【この要件は、以下において空~集合を返す段には指定されていない。】 ◎ If none of the initial set contains at least one of the same strong validators, then the cache MUST NOT use the new response to update any stored responses.
- ~IF[ `304 応答^V は 1 個以上の `弱い検証子$ を包含する ] ⇒ ~IF[ %初期~集合 を成す応答として[ `304 応答^V が包含する いずれかの`弱い検証子$に合致するもの ]は在る ] ⇒ ~RET [ 該当する応答のうち,最も近過去なもの ]たちが成す集合 ◎ If the new response contains no strong validators but does contain one or more "weak validators", and those validators correspond to one of the initial set's stored responses, then the most recent of those matching stored responses is identified for update.
- ~ELSE ( `304 応答^V は`検証子$を内包しない — 例: `304 応答^V が応対した要請は、 `~client$が `Last-Modified$h 応答~header以外の~sourceから`生成-$した `If-Modified-Since$h 要請である) ⇒ ~IF[ %初期~集合 を成す【!格納-済み】応答は 1 個だけであり,それも`検証子$を欠如する ] ⇒ ~RET %初期~集合 ◎ If the new response does not include any form of validator (such as where a client generates an If-Modified-Since request from a source other than the Last-Modified response header field),\ and there is only one stored response in the initial set,\ and that stored response also lacks a validator,\ then that stored response is identified for update.
- ~RET 空~集合 ◎ ↑
~cacheは、 上で決定した[ 更新-対象として識別された格納-済み応答たちが成す集合 ]を成す各 %応答 に対し ⇒ `3.2§ に従う下で,[ `304 応答^V 内に供された各~header ]を利用して[ %応答 内の各~header ]を更新しなければナラナイ。 ◎ For each stored response identified, the cache MUST update its header fields with the header fields provided in the 304 (Not Modified) response, as per Section 3.2.
4.3.5. `HEAD^m による応答の新鮮~化法
`HEAD$m ~methodに対する応答は、 `内容$を送信しないことを除き,[ `GET$m を伴って為される等価な要請 ]に対する応答と一致する。 この `HEAD$m 応答の特質を、 次の場合に[ ~cacheされた `GET$m 応答を無効化したり更新する ]ことに利用できる: ◎ A response to the HEAD method is identical to what an equivalent request made with a GET would have been, without sending the content. This property of HEAD responses can be used to invalidate or update a cached GET response\
- より効率的な条件付き `GET$m 要請の仕組みが (格納-済み応答~内に`検証子$が無いことに因り) 可用でない場合。 ◎ if the more efficient conditional GET request mechanism is not available (due to no validators being present in the stored response) or\
- `内容$が変化したときでも,その伝送は欲されない場合。 ◎ if transmission of the content is not desired even if it has changed.
~cacheは、 ある`~target~URI$用に`内方$へ `HEAD$m 要請を為したとき, それに対し `200$st 応答 — 以下 `HEAD 応答^V と記す — を受信したときは、 自身に格納-済みな[ 当の要請~用に選ばれ得た ( `4.1§ を見よ),各[ `GET$m に対する応答 ] %応答 ]を以下に従って[ 更新するか, 無効化する ]ベキである: ◎ When a cache makes an inbound HEAD request for a target URI and receives a 200 (OK) response, the cache SHOULD update or invalidate each of its stored GET responses that could have been chosen for that request (see Section 4.1). ◎ For each of the stored responses that could have been chosen,\
-
~AND↓ が満たされるならば、 下に述べるとおりに %応答 を更新するベキである:
- 受信したどの`検証子~field$ ( `ETag$h, `Last-Modified$h ) に対しても, %応答, `HEAD 応答^V には その~headerが在って, 両者の値は合致する。
- `HEAD 応答^V, %応答 には `Content-Length$h ~headerが在って, 両者の値は合致する。
- 他の場合、 %応答 は`非新鮮$であると見なすベキである。 ◎ otherwise, the cache SHOULD consider the stored response to be stale.
~cacheは, %応答 を `HEAD 応答^V 内に供された~metadataで更新する場合には、 `3.2§ に従う下で,[ `HEAD 応答^V 内に供された各~header ]を利用して[ %応答 内の各~header ]を更新しなければナラナイ。 ◎ If a cache updates a stored response with the metadata provided in a HEAD response, the cache MUST use the header fields provided in the HEAD response to update the stored response (see Section 3.2).
4.4. 格納-済み応答の無効化-法
[ `PUT$m, `POST$m, `DELETE$m ]などの`安全$でない要請~methodは, `生成元~server$上の【資源の】状態を変更する~~可能性があるので、 介在している~cacheは,格納-済みな応答を無効化して自身の内容を最新状態に保つことが要求される。 ◎ Because unsafe request methods (Section 9.2.1 of [HTTP]) such as PUT, POST, or DELETE have the potential for changing state on the origin server, intervening caches are required to invalidate stored responses to keep their contents up to date.
~cacheは、[ `安全$でない/安全かどうか未知である ]要請~methodに対し,`~errorでない応答$を受信したときには: ◎ ↓
- その`~target~URI$を`無効化-$しなければナラナイ。 ◎ A cache MUST invalidate the target URI (Section 7.1 of [HTTP]) when it receives a non-error status code in response to an unsafe request method (including methods whose safety is unknown).
-
他の~URIに対しても、 その`生成元$が`~target~URI$のそれと:
- 一致するならば、 `無効化-$してもヨイ。 特に,[ `Location$h / `Content-Location$h ]応答~header(もし在れば)内の~URIは、 無効化の候補になる — 他の~URIも、 この文書に指定されない仕組みを通して発見されるかもしれない。
- 一致しないならば、 `無効化-$してはナラナイ。 これは、 ~DoS攻撃を防止する一助になる。
所与の~URIを `無効化-@ ( `invalidate^en )するとは、 ~cacheは,[ 格納-済み応答のうち,その`~target~URI$が所与の~URIに合致するもの ]を[ すべて除去する ]か[ すべて “無効” と~markして、 後続な要請に対する応答として送信できるようになる前に,`検証$を義務付ける ]ことを意味する。 ◎ "Invalidate" means that the cache will either remove all stored responses whose target URI matches the given URI or mark them as "invalid" and in need of a mandatory validation before they can be sent in response to a subsequent request.
`~errorでない応答@ ( `non-error response^en )とは、 その`状態s~code$は[ `2xx$st / `3xx$st ]である応答をいう。 ◎ A "non-error response" is one with a 2xx (Successful) or 3xx (Redirection) status code.
注記: これは、 ~~該当するすべての応答を大域的に無効化することは保証しない。 状態変更~要請が無効化するのは、 それが渡り歩く~cache内の応答に限られることになろう。 ◎ Note that this does not guarantee that all appropriate responses are invalidated globally; a state-changing request would only invalidate responses in the caches it travels through.
5. ~field定義
この節では、[ ~cache法に関係する各種~HTTP`~field$ ]の構文と意味論を定義する。 ◎ This section defines the syntax and semantics of HTTP fields related to caching.
5.1. `Age^h
`Age$h 応答~headerは、 応答の`齢$を伝達する。 それは、 送信者により `4.2.3§ に従って見積もられた[ 当の応答が`生成元~server$にて,`生成-$されたか, 成功裡に`検証-$された ]ときからの時間を与える。 ◎ The "Age" response header field conveys the sender's estimate of the time since the response was generated or successfully validated at the origin server. Age values are calculated as specified in Section 4.2.3.
`Age@p = `delta-seconds$p
`Age^h `~field値$は、 秒数を表現する負でない整数である ( `1.2.2§ を見よ)。 ◎ The Age field value is a non-negative integer, representing time in seconds (see Section 1.2.2).
`Age^h は`単数~field$として定義されているが、 ~cacheは,次に従うベキである: ◎ Although it is defined as a singleton header field,\
- ~messageに伴われる `Age^h の`~field値$が`~listに基づいて$いる場合、 最初の~memberだけを利用して,後続なものは破棄する。 ◎ a cache encountering a message with a list-based Age field value SHOULD use the first member of the field value, discarding subsequent ones.
- 前項を適用した結果の`~field値$が妥当でない (例:負でない整数~以外の何かを包含する) 場合、 当の `Age^h ~fieldを無視する。 ◎ If the field value (after discarding additional members, as per above) is invalid (e.g., it contains something other than a non-negative integer), a cache SHOULD ignore the field.
【応答の受信者にとっては,】 `Age$h ~headerが在ることは、 この要請に対する応答が,`生成元~server$により[ `生成-$されなかった/`検証-$されなかった ]ことを含意する。 しかしながら、[ `Age$h ~headerの欠如が,生成元に接触したことを含意する ]ことにはならない。 ◎ The presence of an Age header field implies that the response was not generated or validated by the origin server for this request. However, lack of an Age header field does not imply the origin was contacted.
5.2. `Cache-Control^h
`Cache-Control^h ~headerは、 `~cache指令@ ( `cache directive^en )† — [ 要請/応答 ]の`連鎖$沿いにある~cacheたちの挙動を制御するための指令 — を~listするために利用される。 指令は,単方向であり、 要請~内にそれが在っても,対する応答~内に同じ指令が[ 在る/複製される ]ことは含意しない。 ◎ The "Cache-Control" header field is used to list directives for caches along the request/response chain. Cache directives are unidirectional, in that the presence of a directive in a request does not imply that the same directive is present or copied in the response.
【 単に “指令” とも略称される。 あるいは “`Cache-Control^en 指令” ( “~cache制御~指令” )と称される箇所もあるが、 この訳では, “~cache指令” と表記する。 [ 要請/応答 ]内に指定される~cache指令は、[ “`要請~指令$” / “`応答~指令$” ]とも称される。 】
他所で定義される`~cache指令$の取扱い法についての情報は、 `拡張~cache指令§を見よ。 ◎ See Section 5.2.3 for information about how Cache-Control directives defined elsewhere are handled.
`~proxy$は、 自身が回送する~message内にある どの`~cache指令$も — 自身が[ ~cacheを実装するかどうか, その指令を有意に~cacheに適用できるかどうか ]に関わらず — 通過させなければナラナイ。 指令は、[ 要請/応答 ]の`連鎖$沿いにある すべての`受信者$に適用されるかもしれず, 特定の~cacheのみを~targetにできないので。 ◎ A proxy, whether or not it implements a cache, MUST pass cache directives through in forwarded messages, regardless of their significance to that application, since the directives might apply to all recipients along the request/response chain. It is not possible to target a directive to a specific cache.
`~cache指令$は、 文字大小無視 `token$p により識別され,省略可能な引数もとり得る。 引数には,[ `token$p, `quoted-string$p ]どちらの構文も利用し得る。 `受信者$は、 この仕様が定義する指令に対しては, (引数を定義するものであれば)両~構文とも受容する~OUGHT — 生成においては片方だけが要求されるものもあるが。 ◎ Cache directives are identified by a token, to be compared case-insensitively, and have an optional argument that can use both token and quoted-string syntax. For the directives defined below that define arguments, recipients ought to accept both forms, even if a specific form is required for generation.
`Cache-Control@p = #`cache-directive$p `cache-directive@p = `token$p [ "=" ( `token$p / `quoted-string$p ) ]
以下に定義される各種`~cache指令$に対しては、 他が言明されない限り,これらの引数は定義されない(許容されない): ◎ For the cache directives defined below, no argument is defined (nor allowed) unless stated otherwise.
5.2.1. 要請~指令
この節は、 各種~cache要請~指令を定義する。 これらは助言的である — ~cacheは、 これらを実装してもヨイが,要求されてはいない。 ◎ This section defines cache request directives. They are advisory; caches MAY implement them, but are not required to.
5.2.1.1. `max-age^qdir
引数の構文: ◎ Argument syntax:
`delta-seconds$p
`max-age^qdir 要請~指令は、 次を指示する ⇒ `~client$は、 `齢$が指定された秒~数~以下の応答を選好する。 `max-stale^qdir 要請~指令も在る場合を除き、 ~clientは,`非新鮮$な応答は受信したくないと望んでいる。 ◎ The max-age request directive indicates that the client prefers a response whose age is less than or equal to the specified number of seconds. Unless the max-stale request directive is also present, the client does not wish to receive a stale response.
この指令は、 引数~構文として `token$p 形 (例: `max-age^dir=5 ) を利用する。 送信者は、 `quoted-string$p 形 (例: `max-age^dir="5" ) を`生成-$してはナラナイ。 ◎ This directive uses the token form of the argument syntax: e.g., 'max-age=5' not 'max-age="5"'. A sender MUST NOT generate the quoted-string form.
5.2.1.2. `max-stale^qdir
引数の構文: ◎ Argument syntax:
`delta-seconds$p
`max-stale^qdir 要請~指令は、 次を指示する ⇒ `~client$は、 `鮮度~維持期間$を超過した`非新鮮$な応答を ⇒# 引数に値が在るならば それに指定された秒~数までは受容する用意がある / ~ELSE_ `齢$を問わず 受容する ◎ The max-stale request directive indicates that the client will accept a response that has exceeded its freshness lifetime. If a value is present, then the client is willing to accept a response that has exceeded its freshness lifetime by no more than the specified number of seconds. If no value is assigned to max-stale, then the client will accept a stale response of any age.
この指令は、 引数~構文として `token$p 形 (例: `max-stale^dir=10 ) を利用する。 送信者は、 `quoted-string$p 形 (例: `max-stale^dir="10" ) を`生成-$してはナラナイ。 ◎ This directive uses the token form of the argument syntax: e.g., 'max-stale=10' not 'max-stale="10"'. A sender MUST NOT generate the quoted-string form.
5.2.1.3. `min-fresh^qdir
引数の構文: ◎ Argument syntax:
`delta-seconds$p
`min-fresh^qdir 要請~指令は、 次を指示する ⇒ `~client$は,[ `鮮度~維持期間$が,指定された秒数を応答の現在の`齢$に足した結果~以上 ]である応答を選好する。 すなわち,~clientは、 少なくとも指定された秒~数までは,応答が`新鮮$であり続けるよう求めている。 ◎ The min-fresh request directive indicates that the client prefers a response whose freshness lifetime is no less than its current age plus the specified time in seconds. That is, the client wants a response that will still be fresh for at least the specified number of seconds.
この指令は、 引数~構文として `token$p 形 (例: `max-fresh^dir=20 ) を利用する。 送信者は、 `quoted-string$p 形 (例: `max-fresh^dir="20" ) を`生成-$してはナラナイ。 ◎ This directive uses the token form of the argument syntax: e.g., 'min-fresh=20' not 'min-fresh="20"'. A sender MUST NOT generate the quoted-string form.
5.2.1.4. `no-cache^qdir
`no-cache^qdir 要請~指令は、 次を指示する ⇒ `~client$は、[ 格納-済み応答は、 `生成元~server$上で成功裡に`検証-$されない限り,要請を満足するために利用しない ]ことを選好する。 ◎ The no-cache request directive indicates that the client prefers a stored response not be used to satisfy the request without successful validation on the origin server.
5.2.1.5. `no-store^qdir
`no-store^qdir 要請~指令は、[ `私用~cache$, `共用~cache$ ]どちらにも適用され,次を指示する ⇒ ~cacheは、[ この要請, 対する応答 ]を成す どの部分も “格納してはナラナイ”。 ◎ The no-store request directive indicates that a cache MUST NOT store any part of either this request or any response to it. This directive applies to both private and shared caches.\
“格納してはナラナイ” とは、 ~cacheは: ◎ "MUST NOT store" in this context means that the cache\
- 不揮発 記憶域に意図的にその情報を格納してはナラナイ。 ◎ MUST NOT intentionally store the information in non-volatile storage and\
- 応答を回送したならば、[ アリな限り迅速に,その情報を揮発 記憶域から除去する ]ことに極力努めなければナラナイ。 ◎ MUST make a best-effort attempt to remove the information from volatile storage as promptly as possible after forwarding it.
この指令は、 ~privacyを確保するための仕組みとして,依拠-可能でも, 足るものでもない。 特に、[ 悪意的な~cache/弱体化された~cache ]は,この指令を認識しなかったり順守しないかもしれず、 通信~networkは盗聴に対し脆弱になるかもしれない。 ◎ This directive is not a reliable or sufficient mechanism for ensuring privacy. In particular, malicious or compromised caches might not recognize or obey this directive, and communications networks might be vulnerable to eavesdropping.
注記: この指令を包含する要請が,~cacheに格納-済みな応答により満足された場合、 `no-store^qdir 要請~指令は,その格納-済み応答には適用されない。 ◎ Note that if a request containing this directive is satisfied from a cache, the no-store request directive does not apply to the already stored response.
5.2.1.6. `no-transform^qdir
`no-transform^qdir 要請~指令は、 次を指示する ⇒ `~client$は、 `内容$を`形式変換-$するのは避けるよう,`媒介者$たちに依頼している。 ◎ The no-transform request directive indicates that the client is asking for intermediaries to avoid transforming the content, as defined in Section 7.7 of [HTTP].
5.2.1.7. `only-if-cached^qdir
`only-if-cached^qdir 要請~指令は、 次を指示する ⇒ `~client$は、 格納-済み応答を得することのみを望む。 ◎ The only-if-cached request directive indicates that the client only wishes to obtain a stored response.\
この要請を尊守する~cacheは、 その受信に際して,次のいずれかで応答するベキである ⇒ 要請による他の拘束に整合な格納-済み応答/ `504$st ◎ Caches that honor this request directive SHOULD, upon receiving it, respond with either a stored response consistent with the other constraints of the request or a 504 (Gateway Timeout) status code.
5.2.2. 応答~指令
この節は、 各種 ~cache応答~指令を定義する。 ~cacheは、 この節に定義される`~cache指令$を順守しなければナラナイ。 ◎ This section defines cache response directives. A cache MUST obey the Cache-Control directives defined in this section.
5.2.2.1. `max-age^sdir
引数の構文: ◎ Argument syntax:
`delta-seconds$p
`max-age$sdir 応答~指令は、 次を指示する ⇒ この応答は、 その`齢$が指定された秒~数を超えた後は,`非新鮮$になると見なされる。 ◎ The max-age response directive indicates that the response is to be considered stale after its age is greater than the specified number of seconds.
この指令は、 引数~構文として `token$p 形 (例: `max-age^dir=5 ) を利用する。 送信者は、 `quoted-string$p 形 (例: `max-age^dir="5" ) を`生成-$してはナラナイ。 ◎ This directive uses the token form of the argument syntax: e.g., 'max-age=5' not 'max-age="5"'. A sender MUST NOT generate the quoted-string form.
5.2.2.2. `must-revalidate^sdir
`must-revalidate^sdir 応答~指令は、 次を指示する ⇒ ~cacheは、 この応答が`非新鮮$になったなら — それが`生成元~server$により成功裡に`検証-$されるまでは — 別の要請を満足するために再利用してはナラナイ。 ◎ The must-revalidate response directive indicates that once the response has become stale, a cache MUST NOT reuse that response to satisfy another request until it has been successfully validated by the origin, as defined by Section 4.3.
`must-revalidate^sdir 指令は、 ある種の~protocol特能~用に依拠-可能な運用を~supportするために,必要yである。 ~cacheは、 どのような状況下でも, `must-revalidate^sdir 指令を無視してはナラナイ。 特に,~cacheは、 `切断されて$いる場合には — `非新鮮$になった応答は再利用せずに — ~error応答を`生成-$しなければナラナイ。 `生成-$する`状態s~code$は、 他の~error状態s~codeの方が適切になる場合を除き, `504$st にするベキである。 ◎ The must-revalidate directive is necessary to support reliable operation for certain protocol features. In all circumstances, a cache MUST NOT ignore the must-revalidate directive; in particular, if a cache is disconnected, the cache MUST generate an error response rather than reuse the stale response. The generated status code SHOULD be 504 (Gateway Timeout) unless another error status code is more applicable.
`~server$が `must-revalidate^sdir 指令を利用するのは、 次のときに限る~OUGHT ⇒ 要請の`検証$に失敗した結果が,不正な運用を生じさせ得るとき — ~~報告もなく実行されなかった金融取引など。 ◎ The must-revalidate directive ought to be used by servers if and only if failure to validate a request could cause incorrect operation, such as a silently unexecuted financial transaction.
`must-revalidate^sdir 指令は、 `共用~cache$が[ `Authorization$h ~headerを包含している要請に対し,応答を再利用する ]ことを許可する — それは、 再検証に対する要件( `3.5§ )の~subjectになる。 ◎ The must-revalidate directive also permits a shared cache to reuse a response to a request containing an Authorization header field (Section 11.6.2 of [HTTP]), subject to the above requirement on revalidation (Section 3.5).
5.2.2.3. `must-understand^sdir
`must-understand^sdir 応答~指令は、 次を指示する ⇒ この応答を格納できる~cacheは、[ その`状態s~code$用の要件を解する, かつ それに適合するもの ]に制限される。 ◎ The must-understand response directive limits caching of the response to a cache that understands and conforms to the requirements for that response's status code.
`must-understand^sdir を包含する応答は、 `no-store$sdir 指令も包含するベキである。 `must-understand^sdir を実装する~cacheは、 それを内包する応答を受信したときは,[ 応答の状態s~codeによる~cache法の要件 ]を[ 解する,かつ実装する ]ならば `no-store^sdir 指令を無視するベキである。 ◎ A response that contains the must-understand directive SHOULD also contain the no-store directive. When a cache that implements the must-understand directive receives a response that includes it, the cache SHOULD ignore the no-store directive if it understands and implements the status code's caching requirements.
5.2.2.4. `no-cache^sdir
引数の構文: ◎ Argument syntax:
#`field-name$p
引数を伴わない `no-cache^sdir 応答~指令は、 次を指示する ⇒ この応答は、 `検証$用に回送して成功裡に応答を受信しない限り, 他の要請を満足するために利用してはナラナイ。 ◎ The no-cache response directive, in its unqualified form (without an argument), indicates that the response MUST NOT be used to satisfy any other request without forwarding it for validation and receiving a successful response; see Section 4.3.
これにより,`生成元~server$は、[ ~cacheが`非新鮮$な応答を送信するよう環境設定されていた ]としても,[ ~cacheが~serverに接触しないまま, その種の応答を要請を満足するために利用する ]ことを防止できるようになる。 ◎ This allows an origin server to prevent a cache from using the response to satisfy a request without contacting it, even by caches that have been configured to send stale responses.
`no-cache^sdir 応答~指令が,引数に 1 個~以上の`~field名$を~listしている場合、 次を指示する ⇒ ~cacheは、 当の応答に次のいずれかを施したならば,それを — ~cache法に対する他の制約に従う下で — 後続な要請を満足するために利用してもヨイ:
- 送信する【!subsequent】応答からは、 ~listされた~headerすべてを除外する
- 当の応答は、 `生成元~server$により成功裡に`再検証-$された (それらの~fieldは、更新されるか除去された)
これにより,`生成元~server$は、 応答~内における一定の~headerの再利用を — 応答を成す残りの部分を~cacheするのは許容しつつ — 防止できるようになる。 ◎ This allows an origin server to prevent the reuse of certain header fields in a response, while still allowing caching of the rest of the response.
引数に与え得る`~field名$は、 この仕様が定義するものに制限されない。 ~field名は、 文字大小無視である。 ◎ The field names given are not limited to the set of header fields defined by this specification. Field names are case-insensitive.
この指令は、 引数の構文として `quoted-string$p を利用する — 送信者は、 `token$p 形を`生成-$するベキでない (引用符が不要に見える,単独の~entryからなる~listであっても)。 ◎ This directive uses the quoted-string form of the argument syntax. A sender SHOULD NOT generate the token form (even if quoting appears not to be needed for single-entry lists).
注記: 引数を伴う `no-cache^sdir 応答~指令は、 ~cacheからは,引数を伴わずに受信したかのように取扱われることが多い — すなわち,引数を伴うものに対する特別な取扱いは、 広く実装されていない。 ◎ Note: The qualified form of the directive is often handled by caches as if an unqualified no-cache directive was received; that is, the special handling for the qualified form is not widely implemented.
5.2.2.5. `no-store^sdir
`no-store^sdir 応答~指令は、[ `私用~cache$, `共用~cache$ ]どちらにも適用され,次を指示する: ◎ The no-store response directive indicates that a cache\
- ~cacheは、[ 直の†要請, この応答 ]を成す どの部分も格納してはナラナイ。 【† 当の応答が応対した要請が記憶域に残っている場合、それも抹消することと見受けられる。】 ◎ MUST NOT store any part of either the immediate request or the response\
- ~cacheは、 この応答を利用して他の要請を満足してはナラナイ ◎ and MUST NOT use the response to satisfy any other request.
格納してはナラナイとは、 ~cacheは: ◎ ↑This directive applies to both private and shared caches. ◎ "MUST NOT store" in this context means that the cache\
- 不揮発 記憶域に意図的にその情報を格納してはナラナイ。 ◎ MUST NOT intentionally store the information in non-volatile storage and\
- 応答を回送したなら、[ アリな限り迅速に,その情報を揮発 記憶域から除去する ]ことに極力努めなければナラナイ。 ◎ MUST make a best-effort attempt to remove the information from volatile storage as promptly as possible after forwarding it.
この指令は、 ~privacyを確保するための仕組みとして,依拠-可能でも, 足るものでもない。 特に、[ 悪意的な~cache/弱体化された~cache ]は,この指令を認識しなかったり順守しないかもしれず、 通信~networkは盗聴に対し脆弱になるかもしれない。 ◎ This directive is not a reliable or sufficient mechanism for ensuring privacy. In particular, malicious or compromised caches might not recognize or obey this directive, and communications networks might be vulnerable to eavesdropping.
`must-understand$sdir ~cache指令は、 一定の状況下においては `no-store^sdir を上書きすることに注意 — `must-understand§sdir を見よ。 ◎ Note that the must-understand cache directive overrides no-store in certain circumstances; see Section 5.2.2.3.
5.2.2.6. `no-transform^sdir
`no-transform^sdir 応答~指令は、 次を指示する ⇒ `媒介者$は(~cacheを実装するかどうかに関わらず)、 この応答の`内容$を`形式変換-$してはナラナイ。 ◎ The no-transform response directive indicates that an intermediary (regardless of whether it implements a cache) MUST NOT transform the content, as defined in Section 7.7 of [HTTP].
5.2.2.7. `private^sdir
引数の構文: ◎ Argument syntax:
#`field-name$p
引数を伴わない `private^sdir 応答~指令は、 次を指示する: ◎ The unqualified private response directive\
- `共用~cache$は、 この応答を格納してはナラナイ (すなわち、当の応答は,単独の利用者~用に意図されている)。 ◎ indicates that a shared cache MUST NOT store the response (i.e., the response is intended for a single user).\
- `私用~cache$は、 この応答を — `3§ に定義される拘束に従う下で — 格納してもヨイ — 他により,[ この応答は、 `私用~cache$により`経験的に~cache可能$でない ]とされていても。 ◎ It also indicates that a private cache MAY store the response, subject to the constraints defined in Section 3, even if the response would not otherwise be heuristically cacheable by a private cache.
`private^sdir 応答~指令が,引数に 1 個~以上の`~field名$を~listしている場合、 次を指示する ⇒ 単独の利用者に制限されるのは、 ~listされた~headerに限られる。 `共用~cache$は、 ~listされた~headerを — それらが元の応答に在っても — 格納してはナラナイが,[ それら以外の,応答~messageを成す残りの部分 ]は — `3§ に定義される拘束に従う下で — 格納してもヨイ。 ◎ If a qualified private response directive is present, with an argument that lists one or more field names, then only the listed header fields are limited to a single user: a shared cache MUST NOT store the listed header fields if they are present in the original response but MAY store the remainder of the response message without those header fields, subject the constraints defined in Section 3.
引数に与え得る`~field名$は、 この仕様が定義する それらに制限されない。 ~field名は、 文字大小無視である。 ◎ The field names given are not limited to the set of header fields defined by this specification. Field names are case-insensitive.
この指令は、 引数の構文として `quoted-string$p を利用する: 送信者は `token$p 形を`生成-$するベキでない (引用符が不要に見える,単独の~entryからなる~listであっても)。 ◎ This directive uses the quoted-string form of the argument syntax. A sender SHOULD NOT generate the token form (even if quoting appears not to be needed for single-entry lists).
注記: この単語 “私用( `private^en )” の用法は、 応答を格納できるかどうかを制御するだけであり, ~message内容の~privacyを確保するものではない。 また,引数を伴う `private^sdir 応答~指令は、 ~cacheからは,引数を伴わずに受信したかのように取扱われることが多い — すなわち,引数を伴うものに対する特別な取扱いは、 広く実装されていない。 ◎ Note: This usage of the word "private" only controls where the response can be stored; it cannot ensure the privacy of the message content. Also, the qualified form of the directive is often handled by caches as if an unqualified private directive was received; that is, the special handling for the qualified form is not widely implemented.
5.2.2.8. `proxy-revalidate^sdir
`proxy-revalidate^sdir 応答~指令は、 次を指示する ⇒ `共用~cache$は、 この応答が`非新鮮$になったなら — それが`生成元~server$により成功裡に`検証-$されるまでは — 別の要請を満足するために再利用してはナラナイ。 ◎ The proxy-revalidate response directive indicates that once the response has become stale, a shared cache MUST NOT reuse that response to satisfy another request until it has been successfully validated by the origin, as defined by Section 4.3.\
これは、 `私用~cache$には適用されないことを除いて, `must-revalidate$sdir 応答~指令に相似的である。 ◎ This is analogous to must-revalidate (Section 5.2.2.2), except that proxy-revalidate does not apply to private caches.
注記: `proxy-revalidate^dir それ自体は、 応答は~cache可能であることは含意しない。 例えば, `public$sdir 指令と組合せることで、 応答を~cacheすることは許容しつつ,`共用~cache$に限り[ `非新鮮$なったそれを`再検証-$する ]よう要求することもできる。 ◎ Note that proxy-revalidate on its own does not imply that a response is cacheable. For example, it might be combined with the public directive (Section 5.2.2.9), allowing the response to be cached while requiring only a shared cache to revalidate when stale.
5.2.2.9. `public^sdir
`public^sdir 応答~指令は、 次を指示する ⇒ ~cacheは、 この応答を — `3§ に定義される拘束に従う下で — 格納してもヨイ — 他により,そうすることは禁制されていても。 ◎ The public response directive indicates that a cache MAY store the response even if it would otherwise be prohibited, subject to the constraints defined in Section 3.\
言い換えれば, `public^sdir は、 応答は`~cache可能$であるものと明示的に~markする — 例えば、 `共用~cache$が[ `Authorization$h ~headerを包含している要請に対する応答 ]を再利用すること( `3.5§ )も許可する。 ◎ In other words, public explicitly marks the response as cacheable. For example, public permits a shared cache to reuse a response to a request containing an Authorization header field (Section 3.5).
注記: `3§ に則って~cache可能になる応答には、 `public^sdir 指令が無くても, 【~cache可能にする目的で】 `public^sdir 指令を追加することは必要yでない。 ◎ Note that it is unnecessary to add the public directive to a response that is already cacheable according to Section 3.
`public^sdir 指令を伴う応答は、 明示的な鮮度~情報が無いならば,`経験的に~cache可能$になる。 ◎ If a response with the public directive has no explicit freshness information, it is heuristically cacheable (Section 4.2.2).
5.2.2.10. `s-maxage^sdir
引数の構文: ◎ Argument syntax:
`delta-seconds$p
`s-maxage^sdir 応答~指令は、 `共用~cache$に対し,次を指示する ⇒ この指令が指定する最大~齢は、[ `max-age$sdir 指令/ `Expires$h ~header ]により指定された最大~齢を上書きする ◎ The s-maxage response directive indicates that, for a shared cache, the maximum age specified by this directive overrides the maximum age specified by either the max-age directive or the Expires header field.
`s-maxage^sdir 応答~指令は、 `共用~cache$に対しては, `proxy-revalidate$sdir 応答~指令の意味論を組入れる。 すなわち,`共用~cache$は、 `s-maxage^dir を伴う`非新鮮$になった応答を — それが`生成元~server$により成功裡に`検証-$されるまでは — 別の要請を満足するために再利用してはナラナイ。 この指令はまた、 `共用~cache$が[ `Authorization$h ~headerを包含している要請に対し,応答を再利用する ]ことも許可する — それは、[ 上述した最大~齢に対する要件, 再検証に対する要件( `3.5§ ) ]の~subjectになる。 ◎ The s-maxage directive incorporates the semantics of the proxy‑revalidate response directive (Section 5.2.2.8) for a shared cache. A shared cache MUST NOT reuse a stale response with s-maxage to satisfy another request until it has been successfully validated by the origin, as defined by Section 4.3. This directive also permits a shared cache to reuse a response to a request containing an Authorization header field, subject to the above requirements on maximum age and revalidation (Section 3.5).
この指令は、 引数~構文として `token$p 形 (例: `s-maxage^dir=10 ) を利用する。 送信者は、 `quoted-string$p 形 (例: `s-maxage^dir="10" ) を`生成-$してはナラナイ。 ◎ This directive uses the token form of the argument syntax: e.g., 's-maxage=10' not 's-maxage="10"'. A sender MUST NOT generate the quoted-string form.
5.2.3. 拡張~cache指令
`Cache-Control$h ~headerは、 1 個~以上の拡張`~cache指令$の利用を通して拡張できる。 ~cacheは、 認識できない`~cache指令$を無視しなければナラナイ。 ◎ The Cache-Control header field can be extended through the use of one or more extension cache directives. A cache MUST ignore unrecognized cache directives.
拡張のうち,~cacheの挙動における変更を要求しないもの( “`informational^en” 拡張)は、 他の指令の意味論を変更することなく,追加できる。 ◎ Informational extensions (those that do not require a change in cache behavior) can be added without changing the semantics of other directives.
挙動を変更する拡張( “`behavioral^en” 拡張)は、 既存の`~cache指令$に基づく挙動に対する改変子として動作するように設計されている — すなわち,新旧 両~指令が給されたときは、 次のようになる: ◎ Behavioral extensions are designed to work by acting as modifiers to the existing base of cache directives. Both the new directive and the old directive are supplied, such that\
- 新~指令を解さない応用は、 既定で,旧~指令により指定される挙動になる。 ◎ applications that do not understand the new directive will default to the behavior specified by the old directive, and\
- 新~指令を解する応用は、 それを,旧~指令に結付けられた要件を改変するものとして認識する。 ◎ those that understand the new directive will recognize it as modifying the requirements associated with the old directive.\
このようにして、 配備-済みな~cacheを非互換化することなく,既存の~cache指令を拡張できるようになる。 ◎ In this way, extensions to the existing cache directives can be made without breaking deployed caches.
例えば、 `community^dir と呼ばれる,新たな応答~指令を仮に考える。 それは,[ `private$sdir 指令に対する改変子 ]として動作し、 `私用~cache$に加えて,[ ある “community” の~memberたちに`共有-$される~cache ]に限り[ 応答を~cacheすることが許容される ]とする。 `生成元~server$は、[ “UCI” community が,彼らの`共用~cache$において[ さもなければ `private$sdir になるような応答 ]を利用する ]ことを許容したいと望むなら、 次のように[ `UCI^c を値にとる `community^dir ]を含ませる: ◎ For example, consider a hypothetical new response directive called "community" that acts as a modifier to the private directive: in addition to private caches, only a cache that is shared by members of the named community is allowed to cache the response. An origin server wishing to allow the UCI community to use an otherwise private response in their shared cache(s) could do so by including
Cache-Control: private, community="UCI"
そのような拡張`~cache指令$ `community^dir を認識する~cacheは、 それに則って,自身の挙動を広げられる。 `community^dir ~cache指令を認識しない~cacheは、 それを無視して, `private$sdir 指令を固守することになる。 ◎ A cache that recognizes such a community cache directive could broaden its behavior in accordance with that extension. A cache that does not recognize the community cache directive would ignore it and adhere to the private directive.
新たな拡張~cache指令は、 次を定義することを考慮する~OUGHT: ◎ New extension directives ought to consider defining:
- その指令が複数~個 指定されたとき,何を意味するか? ◎ What it means for a directive to be specified multiple times,
- その指令が引数をとらないのは いつか? 引数が在るときは何を意味するか? ◎ When the directive does not take an argument, what it means when an argument is present,
- その指令が引数を要求するのは いつか? 引数を欠くときは何を意味するか? ◎ When the directive requires an argument, what it means when it is missing, and
- その指令は[ 要請, 応答 ]どちらかのみに特有か? あるいは どちらにも利用-可能か? ◎ Whether the directive is specific to requests, specific to responses, or able to be used in either.
5.2.4. ~cache指令~registry
`~cache指令$用の名前空間を定義するための `~HTTP~cache指令~registry$cite が、 新たに作成され,保守されている。 ◎ The "Hypertext Transfer Protocol (HTTP) Cache Directive Registry" defines the namespace for the cache directives. It has been created and is now maintained at <https://www.iana.org/assignments/http-cache-directives>.
登録にあたっては,次の~fieldを含めなければナラナイ: ◎ A registration MUST include the following fields:
- 当の`~cache指令$の名前 ◎ Cache Directive Name
- 仕様~textへの~pointer ◎ Pointer to specification text
この名前空間に追加される値は `~IETFによる考査$を要する。 ◎ Values to be added to this namespace require IETF Review (see [RFC8126], Section 4.8).
5.3. `Expires^h
`Expires^h 応答~headerは、[ 当の応答は,それ以降は`非新鮮$になる ]と見なされる[ 日時/時刻 ]を与える。 鮮度~modelについての更なる論点は、 `鮮度§を見よ。 ◎ The "Expires" response header field gives the date/time after which the response is considered stale. See Section 4.2 for further discussion of the freshness model.
`Expires^h ~headerが在っても、 元の`資源$が,その時刻を境に[ 変化する/それまでは存在する/その後には存在しなくなる ]ことは含意しない。 ◎ The presence of an Expires header field does not imply that the original resource will change or cease to exist at, before, or after that time.
`Expires^h `~field値$は、 `HTTP-date$p による時刻印をとる。 ~cacheに特有な構文解析~要件については、 `鮮度§も見よ。 ◎ The Expires field value is an HTTP-date timestamp, as defined in Section 5.6.7 of [HTTP]. See also Section 4.2 for parsing requirements specific to caches.
【! Errata ID: 4479 Rejected 】`Expires@p = `HTTP-date$p
例: ◎ For example
Expires: Thu, 01 Dec 1994 16:00:00 GMT
~cache`受信者$は、 形式が無効な日時を,値 "`0^c" に解釈しなければナラナイ — これは、 過去の時刻を表現する (すなわち, “すでに失効した”)。 ◎ A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired").
応答が `max-age$sdir 指令を伴う `Cache-Control$h ~headerを内包する場合、 `受信者$は `Expires^h ~headerを無視しなければナラナイ。 同様に,応答が `s-maxage$sdir 指令を内包する場合、 `共用~cache$受信者は, `Expires^h ~headerを無視しなければナラナイ。 いずれの場合も、 `Expires^h の値は,もっぱら[ `Cache-Control$h ~headerをまだ実装していない`受信者$ ]用に意図されたものである。 ◎ If a response includes a Cache-Control header field with the max-age directive (Section 5.2.2.1), a recipient MUST ignore the Expires header field. Likewise, if a response includes the s-maxage directive (Section 5.2.2.10), a shared cache recipient MUST ignore the Expires header field. In both these cases, the value in Expires is only intended for recipients that have not yet implemented the Cache-Control header field.
`時計$を備えていない`生成元~server$は、 `Expires^h ~headerを`生成-$してはナラナイ — ただし、 それが次に挙げるいずれかの値をとる場合は除く: ◎ An origin server without a clock (Section 5.6.7 of [HTTP]) MUST NOT generate an Expires header field unless its value\
- 過去の固定的な時刻を表現する ( “常に,すでに失効した” )。 ◎ represents a fixed time in the past (always expired) or\
- `時計$を備える~systemにより,`資源$に結付けられた値。 ◎ its value has been associated with the resource by a system with a clock.
歴史的に,~HTTPは、 `Expires^h `~field値$に対し,一年以内の未来にすることを要求していた。 長い`鮮度~維持期間$は,もはや禁制されなくなったが、 度を越して巨大な値は 問題を起こすことが判っているので (例:時刻~値~用の 32 ~bit整数の利用に因る,時計の桁溢れ), 多くの~cacheは それより ずっと早くに応答を抹消する。 ◎ Historically, HTTP required the Expires field value to be no more than a year in the future. While longer freshness lifetimes are no longer prohibited, extremely large values have been demonstrated to cause problems (e.g., clock overflows due to use of 32-bit integers for time values), and many caches will evict a response far sooner than that.
5.4. `Pragma^h
`Pragma^h 要請~headerは、 ~HTTP10~cache用に定義された — `~client$が, “no-cache” 要請も指定できるようにするために ( `Cache-Control$h が定義されたのは、 ~HTTP11 になってからなので)。 ◎ The "Pragma" request header field was defined for HTTP/1.0 caches, so that clients could specify a "no-cache" request (as Cache-Control was not defined until HTTP/1.1).
しかしながら、 `Cache-Control$h の~supportは,今や広く行き渡っている。 よって、 この仕様は `Pragma^h を非推奨にする。 ◎ However, support for Cache-Control is now widespread. As a result, this specification deprecates Pragma.
注記:
応答においては、
Pragma: `no-cache^dir
の意味が指定されることは決してない
— それは,応答における
Cache-Control: `no-cache$sdir
に代わる依拠-可能な置換を供さない。
◎
Note: Because the meaning of "Pragma: no-cache" in responses was never specified, it does not provide a reliable replacement for "Cache-Control: no-cache" in them.
5.5. `Warning^h
`Warning^h ~headerは、[ `状態s~code$内に反映されないこともあるような,~messageの状態sや`形式変換$についての追加的な情報 ]を運ぶために利用されていた。 この仕様は、 これを廃用にする — 広く`生成-$されたり, 利用者が面するものではないので。 それが運んでいた情報は、 `Age$h などの他の~headerを精査すれば拾える。 ◎ The "Warning" header field was used to carry additional information about the status or transformation of a message that might not be reflected in the status code. This specification obsoletes it, as it is not widely generated or surfaced to users. The information it carried can be gleaned from examining other header fields, such as Age.
6. 応用/他の~cacheとの関係性
~HTTPを利用している応用は、 追加的な形を成す~cache法を指定することが多い。 例えば,~web~browserは、 履歴の仕組みを備えることが多い — ある~sessionにおいて,~~以前に検索取得した表現を表示し直すような、 “戻る” ~buttonを利用できるなど。 ◎ Applications using HTTP often specify additional forms of caching. For example, Web browsers often have history mechanisms such as "Back" buttons that can be used to redisplay a representation retrieved earlier in a session.
同様に,~page~viewの中の画像 その他の~assetの~cache法を実装する~Web~browserもある — それらには、 ~HTTP~cache法の意味論を尊守するものも,しないものもある。 ◎ Likewise, some Web browsers implement caching of images and other assets within a page view; they may or may not honor HTTP caching semantics.
この仕様における要件は、[ 応用が,~HTTP~cacheから検索取得した~dataを その後どう利用するか ]に適用することは,必要yでない。 例えば ⇒# 履歴の仕組みは、以前の表現を — それが失効しようが — 表示できる。 応用は、~cacheされた~dataを — それが`鮮度~維持期間$を超えていようが — 他の仕方で利用できる。 ◎ The requirements in this specification do not necessarily apply to how applications use data after it is retrieved from an HTTP cache. For example, a history mechanism can display a previous representation even if it has expired, and an application can use cached data in other ways beyond its freshness lifetime.
この仕様は、 応用が~HTTP~cache法を織り込むことを禁制するものではない — 例えば,履歴の仕組みは ⇒# ~viewは非新鮮であることを利用者に~~伝えるかもしれない。 `~cache指令$(例: `Cache-Control: no-store^c )を尊守するかもしれない。 ◎ This specification does not prohibit the application from taking HTTP caching into account; for example, a history mechanism might tell the user that a view is stale, or it might honor cache directives (e.g., Cache-Control: no-store).
しかしながら,~dataを~cacheする応用は、 そのことを利用者から[ ~~明らか/容易に制御-可能 ]にしないときは,その~HTTP`~cache指令$に関する運用を[ ~cache法の意味論は尊守されるものと期待する作者 ]を驚かさないように定義することが強く奨励される。 例えば,[ ~HTTPの “~~上層” にある応用~cache ]が[ `Cache-Control: no-store^c を包含している応答 ]を[ それを~fetchした要請に直に関係する要請 (同じ~page読込nの間に作成されたものなど) 用に再利用すること ]を許容するように定義することは,適理かもしれないが、[ それとは何ら無関係な要請~用にも再利用すること ]を許容した場合,利用者や作者を驚かすか惑わすことになる見込みが高い。 ◎ However, when an application caches data and does not make this apparent to or easily controllable by the user, it is strongly encouraged to define its operation with respect to HTTP cache directives so as not to surprise authors who expect caching semantics to be honored. For example, while it might be reasonable to define an application cache "above" HTTP that allows a response containing Cache-Control: no-store to be reused for requests that are directly related to the request that fetched it (such as those created during the same page load), it would likely be surprising and confusing to users and authors if it were allowed to be reused for requests unrelated in any way to the one from which it was obtained.
7. ~securityの考慮点
この節は、[ 開発者/情報~provider/利用者 ]向けに,[ ~HTTP~cache法に特有な,既知な~securityの懸念 ]を伝えることが意味される。 より一般な~securityの考慮点は、 `HTTP/1.1$r `~securityの考慮点@~HTTPv1#security.considerations§, `HTTP$r `~securityの考慮点@~HTTPinfra#security.considerations§ にて取組まれている。 ◎ This section is meant to inform developers, information providers, and users of known security concerns specific to HTTP caching. More general security considerations are addressed in "HTTP/1.1" (Section 11 of [HTTP/1.1]) and "HTTP Semantics" (Section 17 of [HTTP]).
~cacheは、 追加的な攻撃~表口を公開する — ~cache内容は、 悪意的な悪用にとって魅力的な~targetを表現するので。 ~cache内容は,~HTTP要請が完了した後も持続するので、 利用者からは~networkから情報が除去されたように見えても, ~cacheに対する攻撃により長期間 情報が露呈され得る。 したがって、 ~cache内容は,敏感な情報として保護される必要がある。 ◎ Caches expose an additional attack surface because the contents of the cache represent an attractive target for malicious exploitation. Since cache contents persist after an HTTP request is complete, an attack on the cache can reveal information long after a user believes that the information has been removed from the network. Therefore, cache contents need to be protected as sensitive information.
特に,`私用~cache$は、 単独の利用者に制約されるので, 利用者の活動を構築し直すために利用され得る。 結果として、 それを制御することを末端~利用者に許容すること — 例:[ 一部/すべて ]の`生成元~server$用に格納した応答を除去することを許容するなど — は,~UAにとって重要になる。 ◎ In particular, because private caches are restricted to a single user, they can be used to reconstruct a user's activity. As a result, it is important for user agents to allow end users to control them, for example, by allowing stored responses to be removed for some or all origin servers.
7.1. ~cache汚染
~cache内に悪意的な`内容$を格納する攻撃は、 複数の利用者に影響するよう~~拡大され得る。 そのような “~cache汚染” 攻撃は、 攻撃者が[ 実装の欠陥, 特権拡大, その他の技法 ]を利用して,~cacheの中へ応答を挿入するときに起こる。 これは、[ 多数の`~client$に悪意的な`内容$を配布するために,`共用~cache$が利用される ]とき,とりわけ効果的になる。 ◎ Storing malicious content in a cache can extend the reach of an attacker to affect multiple users. Such "cache poisoning" attacks happen when an attacker uses implementation flaws, elevated privileges, or other techniques to insert a response into a cache. This is especially effective when shared caches are used to distribute malicious content to many clients.
~cache汚染に共通的にある攻撃~行路の一つは、 `~proxy$と`~UA$における~message構文解析-法の相違点を悪用するものである — ~HTTP11 に関連な要件については、 `HTTP/1.1$r `~message本体の長さ@~HTTPv1#message.body.length§を見よ。 ◎ One common attack vector for cache poisoning is to exploit differences in message parsing on proxies and in user agents; see Section 6.3 of [HTTP/1.1] for the relevant requirements regarding HTTP/1.1.
7.2. 計時~攻撃
~cacheの首な利用の一つは,処理能を最適化することにあるので、 そのような利用は,以前に どの資源が要請されたかについての情報を “漏洩し得る” 。 ◎ Because one of the primary uses of a cache is to optimize performance, its use can "leak" information about which resources have been previously requested.
例えば、 利用者がある~site A を訪問して,利用者の~browserが A からの応答をいくつか~cacheしてから, 別の~site B へ~navigateしたとするとき、 ~site B は,~site A に存在することが既知な応答を読込もうと試みれる。 それが,~~普段より素早く読込まれた場合、 ~site B は,利用者が~site A を — ~site A のある特定の~pageさえも — 訪問したものと見做せる。 ◎ For example, if a user visits a site and their browser caches some of its responses and then navigates to a second site, that site can attempt to load responses it knows exist on the first site. If they load quickly, it can be assumed that the user has visited that site, or even a specific page on it.
そのような “計時~攻撃” は、 ~cache~keyにもっと情報を追加することで軽減し得る — (上に述べた攻撃を防止するために)参照元~site【すなわち~referrer】の同一性を追加するなど。 これは、 “~keyの二重化( `double keying^en )” と呼ばれることもある。 ◎ Such "timing attacks" can be mitigated by adding more information to the cache key, such as the identity of the referring site (to prevent the attack described above). This is sometimes called "double keying".
7.3. 敏感な情報の~cache法
実装や配備における欠陥(~cache運用の誤理解により導かれることが多い)は、 私用と考えられる敏感な情報(例:認証~用の資格証)を~cacheすることへ至らせ, 権限付与されていない主体に公開されるかもしれない。 ◎ Implementation and deployment flaws (often led to by the misunderstanding of cache operation) might lead to the caching of sensitive information (e.g., authentication credentials) that is thought to be private, exposing it to unauthorized parties.
注記: `Set-Cookie$h 応答~header `COOKIE$r は、 ~cachingを~~妨げない — `Set-Cookie$h ~headerを伴う`~cache可能$な応答は、 ~cacheに対する後続な要請を満足するために利用できる (また,利用されることが多い)。 `~server$には、[ これらの応答の~cache法を制御したいとき ]には[ 適切な `Cache-Control$h 応答~headerを発する ]ことが奨励される。 ◎ Note that the Set-Cookie response header field [COOKIE] does not inhibit caching; a cacheable response with a Set-Cookie header field can be (and often is) used to satisfy subsequent requests to caches. Servers that wish to control caching of these responses are encouraged to emit appropriate Cache-Control response header fields.
8. ~IANA考慮点
以下に挙げる登録の変更~制御者は、 “~IETF( iesg@ietf.org, `Internet Engineering Task Force^en )” である。 ◎ The change controller for the following registrations is: "IETF (iesg@ietf.org) - Internet Engineering Task Force".
8.1. ~field名の登録
~IANAは、 `~HTTP~field名~registry$cite ( `Hypertext Transfer Protocol (HTTP) Field Name Registry^en ) を `HTTP$r `18.4@~HTTPinfra#field.name.registration§に従って更新した — 次の表tに挙げる~field名を伴うよう: ◎ IANA has updated the "Hypertext Transfer Protocol (HTTP) Field Name Registry" at <https://www.iana.org/assignments/http-fields>, as described in Section 18.4 of [HTTP], with the field names listed in the table below:
~field名 | 位置付け | § | ~comment |
---|---|---|---|
`Age^h | `恒久的^i | `5.1§ | |
`Cache-Control^h | `恒久的^i | `5.2§ | |
`Expires^h | `恒久的^i | `5.3§ | |
`Pragma^h | `非推奨d^i | `5.4§ | |
`Warning^h | `廃用d^i | `5.5§ |
8.2. ~cache指令の登録
~IANAは、 `~HTTP~cache指令~registry$cite ( `Hypertext Transfer Protocol (HTTP) Cache Directive Registry^en ) を `5.2.4§ の登録~手続-に従って更新した — 次の表tに要約される指令~名を伴うよう: ◎ IANA has updated the "Hypertext Transfer Protocol (HTTP) Cache Directive Registry" at <https://www.iana.org/assignments/http-cache-directives> with the registration procedure per Section 5.2.4 and the cache directive names summarized in the table below.
~cache指令 | §(要請~用) | §(応答~用) |
---|---|---|
`max-age^dir | `5.2.1.1§ | `5.2.2.1§ |
`max-stale^dir | `5.2.1.2§ | |
`min-fresh^dir | `5.2.1.3§ | |
`must-revalidate^dir | `5.2.2.2§ | |
`must-understand^dir | `5.2.2.3§ | |
`no-cache^dir | `5.2.1.4§ | `5.2.2.4§ |
`no-store^dir | `5.2.1.5§ | `5.2.2.5§ |
`no-transform^dir | `5.2.1.6§ | `5.2.2.6§ |
`only-if-cached^dir | `5.2.1.7§ | |
`private^dir | `5.2.2.7§ | |
`proxy-revalidate^dir | `5.2.2.8§ | |
`public^dir | `5.2.2.9§ | |
`s-maxage^dir | `5.2.2.10§ |
8.3. ~warn-code~registry
~IANAは、
`~HTTP~warn-code~registry@~IANA-a/http-warn-codes$cite
( `Hypertext Transfer Protocol (HTTP) Warn Codes^en )
に,[
"`Warning$h" ~headerは廃用にされたこと
]を言明している次の注記を追加した
⇒
The Warning header field (and the warn codes that it uses) has been obsoleted for HTTP per [RFC9111].
【 “~HTTP用の `Warning^h ~header(および,それが利用する `warn-code@~RFC7234#p.warn-code$p )は、 `RFC9111^r に従って廃用にされた。” 】
◎
IANA has added the following note to the "Hypertext Transfer Protocol (HTTP) Warn Codes" registry at <https://www.iana.org/assignments/http-warn-codes> stating that "Warning" has been obsoleted:
• The Warning header field (and the warn codes that it uses) has been obsoleted for HTTP per [RFC9111].
付録 A. 総集的~ABNF
【この節は未訳。】付録 B. RFC 7234 からの変更点
[ 重複-/競合- ]している~cache指令の取扱いを明確化した。 ( `4.2.1§ ) ◎ Handling of duplicate and conflicting cache directives has been clarified. (Section 4.2.1)
~cacheにおける[ `Location$h / `Content-Location$h ]~header内の~URIの無効化は、 もはや要求されない — 依然として許容されるが。 ( `4.4§ ) ◎ Cache invalidation of the URIs in the Location and Content-Location header fields is no longer required but is still allowed. (Section 4.4)
~cacheにおける[ `Location$h / `Content-Location$h ]~header内の~URIの無効化は、 `生成元$が異なるときは許容されない — 以前までは、 ~hostが異なるときであった。 ( `4.4§ ) ◎ Cache invalidation of the URIs in the Location and Content-Location header fields is disallowed when the origin is different; previously, it was the host. (Section 4.4)
`Age$h ~header[ の値が妥当でない/が複数個ある ]場合の取扱いを明確化した。 ( `Age§h ) ◎ Handling invalid and multiple Age header field values has been clarified. (Section 5.1)
この仕様により定義される~cache指令のうち一部は、 今や `quoted-string$p 形による値を`生成-$することは,より強く禁制される — さもなければ,相互運用能の問題が生じることが見出されたので。 拡張~cache指令の消費器には、[ `token$p, `quoted-string$p ]両~形とも受容することはもはや要求されないが、 未知な拡張に対しては依然として,それらを適正に構文解析する必要がある。 ( `5.2§ ) ◎ Some cache directives defined by this specification now have stronger prohibitions against generating the quoted form of their values, since this has been found to create interoperability problems. Consumers of extension cache directives are no longer required to accept both token and quoted-string forms, but they still need to parse them properly for unknown extensions. (Section 5.2)
[ `public$sdir, `private$sdir ]~cache指令を[ どの条件~下でも応答を再利用-可能にしない ]よう明確化した。 【!5.2.2#cache-response-directive】 ◎ The public and private cache directives were clarified, so that they do not make responses reusable under any condition. (Section 5.2.2)
`must-understand$sdir ~cache指令が導入された。 ~cacheには,それが無い場合には、 新たな応答~状態s~codeの意味論を解することは,もはや要求されない。 ◎ The must-understand cache directive was introduced; caches are no longer required to understand the semantics of new response status codes unless it is present. (Section 5.2.2.3)
`Warning$h 応答~headerは廃用にされた。 `Warning^h が~supportする情報の大部分は、 応答を精査すれば拾える — 残りの情報も有用にはなり得るが,全面的に助言的であり、 実施においては,~cacheや`媒介者$は `Warning^h を追加していなかった。 ( `5.5§ ) ◎ The Warning response header was obsoleted. Much of the information supported by Warning could be gleaned by examining the response, and the remaining information -- although potentially useful -- was entirely advisory. In practice, Warning was not added by caches or intermediaries. (Section 5.5)
謝辞
`HTTP$r `謝辞@~HTTPinfra#acks§ を見よ。 ◎ See Appendix "Acknowledgements" of [HTTP].