diff --git a/draft-ietf-httpbis-cache-latest.html b/draft-ietf-httpbis-cache-latest.html index ee5df5e2d..53fca0ebc 100644 --- a/draft-ietf-httpbis-cache-latest.html +++ b/draft-ietf-httpbis-cache-latest.html @@ -641,7 +641,7 @@ content: "Fielding, et al."; } @bottom-center { - content: "Expires May 16, 2021"; + content: "Expires May 23, 2021"; } @bottom-right { content: "[Page " counter(page) "]"; @@ -668,7 +668,7 @@ - + @@ -683,7 +683,7 @@ - + @@ -709,7 +709,7 @@
This Internet-Draft will expire on May 16, 2021.¶
+This Internet-Draft will expire on May 23, 2021.¶
If multiple selected responses are available (potentially including responses without a Vary header field), the cache will need to choose one to use. When a selecting header - field has a known mechanism for doing so (e.g., qvalues on Accept and similar request header fields), that mechanism MAY be used to select preferred responses; of the remainder, the most recent response - (as determined by the Date header field) is used, as per Section 4.¶
+ field has a known mechanism for doing so (e.g., qvalues on Accept and similar request header fields), that mechanism MAY be used to select 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 used, as per Section 4.¶Note that in practice, some resources might send the Vary header field on responses - inconsistently. When a cache has multiple responses for a target URI, and one or more - omits the Vary header field, it SHOULD use the most recent non-empty value available to select an appropriate response for - the request.¶
+Some resources mistakenly omit the Vary header field from their default response (i.e., + the one sent when no more preferable response is available), selecting it for requests + to that resource even when more preferable responses are available. When a cache has + multiple responses for a target URI and one or more omits the Vary header field, it SHOULD use the most recent (see Section 4.2.3) valid Vary field value available to select an appropriate response for the request.¶
If no selected response is available, the cache cannot satisfy the presented request. @@ -1381,7 +1381,7 @@
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.¶
+ user agent to refresh its display or reload a resource. See Section 6 for an explanation of the difference between caches and history mechanisms.¶In some cases, caches (especially in user agents) store processed representations + of 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 representations on an exceptional basis, + but SHOULD limit such omission to those fields necessary to assure integrity of the stored representation.¶
+For example, a browser might store a response's body after removing content-codings, + thereby making its metadata inaccurate. Updating that stored metadata with a different + Content-Encoding header field would be problematic. Likewise, a browser might store + a post-parse tree representation of HTML, rather than the body 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.¶
+Furthermore, some fields are automatically processed and removed by the HTTP implementation; + for example, the Content-Range header field. Implementations MAY automatically omit such header fields from updates, even when the processing does + not actually occur.¶
+Note that the Content-* prefix is not a signal that a header field is omitted from + update; it is only a convention for naming content-related fields.¶
+A cache MUST invalidate the target URI (Section 6.1 of [Semantics]) and the URI(s) in the Location and Content-Location response header fields (if present) when a non-error status code is received in response - to an unsafe request method.¶
+A cache MUST invalidate the target URI (Section 6.1 of [Semantics]) when a non-error status code is received in response to an unsafe request method + (including methods whose safety is unknown).¶
However, a cache MUST NOT invalidate a URI from a Location or Content-Location response header field if the host part of that URI differs from the host part in the - target URI (Section 6.1 of [Semantics]). This helps prevent denial-of-service attacks.¶
+A cache MAY invalidate other URIs when a non-error status code is received in response to an unsafe + request method (including methods whose safety is unknown). In particular, the URI(s) + in the Location and Content-Location response header fields (if present) are candidates for invalidation; other URIs might + be discovered through mechanisms not specified in this document. However, a cache MUST NOT trigger an invalidation under these conditions if the origin (Section 4.3.1 of [Semantics]) of the URI to be invalidated differs from that of the target URI (Section 6.1 of [Semantics]). This helps prevent denial-of-service attacks.¶
A cache MUST invalidate the target URI (Section 6.1 of [Semantics]) when it receives a non-error response to a request with a method whose safety is - unknown.¶
-Invalidate means that the cache will either remove all stored responses whose target URI matches the given URI, or will mark them as "invalid" and in need of a mandatory validation - before they can be sent in response to a subsequent request.¶
+ before they can be sent in response to a subsequent request.¶A "non-error response" is one with a 2xx (Successful) or 3xx (Redirection) status code.¶
+A "non-error response" is one with a 2xx (Successful) or 3xx (Redirection) status code.¶
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.¶
+ through.¶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 @@ -2347,14 +2373,17 @@
The requirements in this specification do not necessarily apply to how applications - use data after it is retrieved from a HTTP cache. That is, 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.¶
+ use data after it is retrieved from a 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.¶This 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).¶
+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). In particular, + when an application caches data and does not make this apparent to or easily controllable + by the user, it is strongly encouraged to honour basic control mechanisms like Cache-Control: + no-store, as they indicate the resource's intent regarding caching.¶
Handling invalid and multiple Age header field values has been clarified. (Section 5.1)¶
+Handling of duplicate and conflicting cache directives has been clarified. (Section 4.2.1)¶
Handling of duplicate and conflicting cache directives has been clarified. (Section 4.2.1)¶
+Cache invalidation of the URIs in the Location and Content-Location header fields + is no longer required, but still allowed. (Section 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)¶
+Handling invalid and multiple Age header field values has been clarified. (Section 5.1)¶
+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)¶
+ for unknown extensions. (Section 5.2)¶The "public" and "private" cache directives were clarified, so that they do not make - responses reusable under any condition. (Section 5.2.2)¶
+ responses reusable under any condition. (Section 5.2.2)¶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.2)¶
+ to understand the semantics of new response status codes unless it is present. (Section 5.2.2.2)¶The Warning response header was obsoleted. Much of the information supported by Warning could be gleaned by examining the response, and the remaining warn-codes — although potentially useful — were entirely advisory. In practice, Warning was not added by - caches or intermediaries. (Section 5.5)¶
+ caches or intermediaries. (Section 5.5)¶This Internet-Draft will expire on May 16, 2021.¶
+This Internet-Draft will expire on May 23, 2021.¶
The above does not imply that a server will send all requested ranges. In some cases, + it may only be possible (or efficient) to send a portion of the requested ranges first, + while expecting the client to re-request the remaining portions later if they are + still desired (see Section 14.3.7).¶
+If all of the preconditions are true, the server supports the Range header field for the target resource, and the specified range(s) are invalid or unsatisfiable, the - server SHOULD send a 416 (Range Not Satisfiable) response.¶
+ server SHOULD send a 416 (Range Not Satisfiable) response.¶The 1xx (Informational) class of status code indicates an interim response for communicating connection status or request progress prior to completing the requested action and sending a final response. - 1xx responses are terminated by the end of the header section. Since HTTP/1.0 did - not define any 1xx status codes, a server MUST NOT send a 1xx response to an HTTP/1.0 client.¶
+ Since HTTP/1.0 did not define any 1xx status codes, a server MUST NOT send a 1xx response to an HTTP/1.0 client.¶A client MUST be able to parse one or more 1xx responses received prior to a final response, even - if the client does not expect one. A user agent MAY ignore unexpected 1xx responses.¶
+A 1xx response is terminated by the end of the header section because it cannot contain + a message body or trailers.¶
A client MUST be able to parse one or more 1xx responses received prior to a final response, even + if the client does not expect one. A user agent MAY ignore unexpected 1xx responses.¶
+A proxy MUST forward 1xx responses unless the proxy itself requested the generation of the 1xx response. For example, if a proxy adds an "Expect: 100-continue" header field when - it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).¶
+ it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).¶When a 206 response is generated, the server MUST generate the following header fields, in addition to those required in the subsections - below, if the field would have been sent in a 200 (OK) response to the same request: Date, Cache-Control, ETag, Expires, Content-Location, and Vary.¶
+A server that supports range requests (Section 13) will usually attempt to satisfy all of the requested ranges, since sending less + data will likely result in another client request for the remainder. However, a server + might want to send only a subset of the data requested for reasons of its own, such + as temporary unavailability, cache efficiency, load balancing, etc. Since a 206 response + is self-descriptive, the client can still understand a response that only partially + satisfies its range request.¶
A client MUST inspect a 206 response's Content-Type and Content-Range field(s) to determine what parts are enclosed and whether additional requests are + needed.¶
+When a 206 response is generated, the server MUST generate the following header fields, in addition to those required in the subsections + below, if the field would have been sent in a 200 (OK) response to the same request: Date, Cache-Control, ETag, Expires, Content-Location, and Vary.¶
+A Content-Length header field present in a 206 response indicates the number of octets in the body of this message, which is usually not the complete length of the selected representation. - Each Content-Range header field includes information about the selected representation's complete length.¶
+ Each Content-Range header field includes information about the selected representation's complete length.¶If a 206 is generated in response to a request with an If-Range header field, the sender SHOULD NOT generate other representation header fields beyond those required, because the client is understood to already have a prior response containing those header fields. Otherwise, - the sender MUST generate all of the representation header fields that would have been sent in a 200 (OK) response to the same request.¶
+ the sender MUST generate all of the representation header fields that would have been sent in a 200 (OK) response to the same request.¶A 206 response is heuristically cacheable; i.e., unless otherwise indicated by explicit - cache controls (see Section 4.2.2 of [Caching]).¶
+ cache controls (see Section 4.2.2 of [Caching]).¶Please create a new registry as outlined in Section 15.3.1.¶
+This specification updates the HTTP related aspects of the existing registration procedures + for message header fields defined in [RFC3864]. It defines both a new registration procedure and moves HTTP field definitions into + a separate registry.¶
+Please create a new registry as outlined in Section 15.3.1.¶
After creating the registry, all entries in the Permanent and Provisional Message Header Registries with the protocol 'http' are to be moved to it, with the following - changes applied:¶
+ changes applied:¶Please annotate the Permanent and Provisional Message Header registries to indicate - that HTTP field name registrations have moved, with an appropriate link.¶
+ that HTTP field name registrations have moved, with an appropriate link.¶After that is complete, please update the new registry with the field names listed - in the following table.¶
+ in the following table.¶Figure 1: Errata by Category and Status
@@ -809,23 +809,23 @@