Ignore:
Timestamp:
Nov 21, 2008, 12:25:09 PM (11 years ago)
Author:
julian.reschke@…
Message:

reference RFC5234 core rules directly, fix line end bug in appendix generation (related to #36)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • draft-ietf-httpbis/latest/p6-cache.html

    r424 r425  
    723723      </p>
    724724      <h2 id="rfc.section.1.4"><a href="#rfc.section.1.4">1.4</a>&nbsp;<a id="notation" href="#notation">Syntax Notation</a></h2>
    725       <p id="rfc.section.1.4.p.1">This specification uses the ABNF syntax defined in <a href="p1-messaging.html#notation" title="Syntax Notation">Section 1.2</a> of <a href="#Part1" id="rfc.xref.Part1.1"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>.
     725      <p id="rfc.section.1.4.p.1">This specification uses the ABNF syntax defined in <a href="p1-messaging.html#notation" title="Syntax Notation">Section 1.2</a> of <a href="#Part1" id="rfc.xref.Part1.1"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>. The following core rules are included by reference, as defined in <a href="#RFC5234" id="rfc.xref.RFC5234.1"><cite title="Augmented BNF for Syntax Specifications: ABNF">[RFC5234]</cite></a>, <a href="http://tools.ietf.org/html/rfc5234#section-B.1">Appendix B.1</a>: ALPHA (letters), CR (carriage return), CRLF (CR LF), CTL (controls), DIGIT (decimal 0-9), DQUOTE (double quote), HEXDIG
     726         (hexadecimal 0-9/A-F/a-f), LF (line feed), OCTET (any 8-bit sequence of data), SP (space), VCHAR (any visible USASCII character),
     727         and WSP (whitespace).
    726728      </p>
    727729      <h3 id="rfc.section.1.4.1"><a href="#rfc.section.1.4.1">1.4.1</a>&nbsp;<a id="core.rules" href="#core.rules">Core Rules</a></h3>
    728730      <p id="rfc.section.1.4.1.p.1">The core rules below are defined in <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a> of <a href="#Part1" id="rfc.xref.Part1.2"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>:
    729731      </p>
    730       <div id="rfc.figure.u.1"></div><pre class="inline">  <a href="#core.rules" class="smpl">DIGIT</a>         = &lt;DIGIT, defined in <a href="#Part1" id="rfc.xref.Part1.3"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
    731   <a href="#core.rules" class="smpl">DQUOTE</a>        = &lt;DQUOTE, defined in <a href="#Part1" id="rfc.xref.Part1.4"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
    732   <a href="#core.rules" class="smpl">SP</a>            = &lt;SP, defined in <a href="#Part1" id="rfc.xref.Part1.5"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
    733 </pre><div id="rfc.figure.u.2"></div><pre class="inline">  <a href="#core.rules" class="smpl">quoted-string</a> = &lt;quoted-string, defined in <a href="#Part1" id="rfc.xref.Part1.6"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
    734   <a href="#core.rules" class="smpl">token</a>         = &lt;token, defined in <a href="#Part1" id="rfc.xref.Part1.7"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
    735   <a href="#core.rules" class="smpl">OWS</a>           = &lt;OWS, defined in <a href="#Part1" id="rfc.xref.Part1.8"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
     732      <div id="rfc.figure.u.1"></div><pre class="inline">  <a href="#core.rules" class="smpl">quoted-string</a> = &lt;quoted-string, defined in <a href="#Part1" id="rfc.xref.Part1.3"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
     733  <a href="#core.rules" class="smpl">token</a>         = &lt;token, defined in <a href="#Part1" id="rfc.xref.Part1.4"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
     734  <a href="#core.rules" class="smpl">OWS</a>           = &lt;OWS, defined in <a href="#Part1" id="rfc.xref.Part1.5"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#basic.rules" title="Basic Rules">Section 1.2.2</a>&gt;
    736735</pre><h3 id="rfc.section.1.4.2"><a href="#rfc.section.1.4.2">1.4.2</a>&nbsp;<a id="abnf.dependencies" href="#abnf.dependencies">ABNF Rules defined in other Parts of the Specification</a></h3>
    737736      <p id="rfc.section.1.4.2.p.1">The ABNF rules below are defined in other parts:</p>
    738       <div id="rfc.figure.u.3"></div><pre class="inline">  <a href="#abnf.dependencies" class="smpl">field-name</a>    = &lt;field-name, defined in <a href="#Part1" id="rfc.xref.Part1.9"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#message.headers" title="Message Headers">Section 4.2</a>&gt;
    739   <a href="#abnf.dependencies" class="smpl">HTTP-date</a>     = &lt;HTTP-date, defined in <a href="#Part1" id="rfc.xref.Part1.10"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#full.date" title="Full Date">Section 3.2.1</a>&gt;
    740   <a href="#abnf.dependencies" class="smpl">port</a>          = &lt;port, defined in <a href="#Part1" id="rfc.xref.Part1.11"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#uri" title="Uniform Resource Identifiers">Section 2.1</a>&gt;
    741   <a href="#abnf.dependencies" class="smpl">pseudonym</a>     = &lt;pseudonym, defined in <a href="#Part1" id="rfc.xref.Part1.12"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#header.via" title="Via">Section 8.9</a>&gt;
    742   <a href="#abnf.dependencies" class="smpl">uri-host</a>      = &lt;uri-host, defined in <a href="#Part1" id="rfc.xref.Part1.13"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#uri" title="Uniform Resource Identifiers">Section 2.1</a>&gt;
     737      <div id="rfc.figure.u.2"></div><pre class="inline">  <a href="#abnf.dependencies" class="smpl">field-name</a>    = &lt;field-name, defined in <a href="#Part1" id="rfc.xref.Part1.6"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#message.headers" title="Message Headers">Section 4.2</a>&gt;
     738  <a href="#abnf.dependencies" class="smpl">HTTP-date</a>     = &lt;HTTP-date, defined in <a href="#Part1" id="rfc.xref.Part1.7"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#full.date" title="Full Date">Section 3.2.1</a>&gt;
     739  <a href="#abnf.dependencies" class="smpl">port</a>          = &lt;port, defined in <a href="#Part1" id="rfc.xref.Part1.8"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#uri" title="Uniform Resource Identifiers">Section 2.1</a>&gt;
     740  <a href="#abnf.dependencies" class="smpl">pseudonym</a>     = &lt;pseudonym, defined in <a href="#Part1" id="rfc.xref.Part1.9"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#header.via" title="Via">Section 8.9</a>&gt;
     741  <a href="#abnf.dependencies" class="smpl">uri-host</a>      = &lt;uri-host, defined in <a href="#Part1" id="rfc.xref.Part1.10"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="p1-messaging.html#uri" title="Uniform Resource Identifiers">Section 2.1</a>&gt;
    743742</pre><h1 id="rfc.section.2"><a href="#rfc.section.2">2.</a>&nbsp;<a id="caching.overview" href="#caching.overview">Overview</a></h1>
    744743      <h2 id="rfc.section.2.1"><a href="#rfc.section.2.1">2.1</a>&nbsp;<a id="cache.correctness" href="#cache.correctness">Cache Correctness</a></h2>
     
    881880      </p>
    882881      <p id="rfc.section.3.3.p.3">HTTP/1.1 requires origin servers to send a Date header, if possible, with every response, giving the time at which the response
    883          was generated (see <a href="p1-messaging.html#header.date" title="Date">Section 8.3</a> of <a href="#Part1" id="rfc.xref.Part1.14"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>). We use the term "date_value" to denote the value of the Date header, in a form appropriate for arithmetic operations.
     882         was generated (see <a href="p1-messaging.html#header.date" title="Date">Section 8.3</a> of <a href="#Part1" id="rfc.xref.Part1.11"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>). We use the term "date_value" to denote the value of the Date header, in a form appropriate for arithmetic operations.
    884883      </p>
    885884      <p id="rfc.section.3.3.p.4">HTTP/1.1 uses the Age response-header to convey the estimated age of the response message when obtained from a cache. The
     
    899898      </ol>
    900899      <p id="rfc.section.3.3.p.8">Given that we have two independent ways to compute the age of a response when it is received, we can combine these as</p>
    901       <div id="rfc.figure.u.4"></div><pre class="text">    corrected_received_age = max(now - date_value, age_value)
     900      <div id="rfc.figure.u.3"></div><pre class="text">    corrected_received_age = max(now - date_value, age_value)
    902901</pre><p id="rfc.section.3.3.p.10">and as long as we have either nearly synchronized clocks or all-HTTP/1.1 paths, one gets a reliable (conservative) result.</p>
    903902      <p id="rfc.section.3.3.p.11">Because of network-imposed delays, some significant interval might pass between the time that a server generates a response
     
    910909         results in conservative behavior no matter how much delay is experienced. So, we compute:
    911910      </p>
    912       <div id="rfc.figure.u.5"></div><pre class="text">   corrected_initial_age = corrected_received_age
     911      <div id="rfc.figure.u.4"></div><pre class="text">   corrected_initial_age = corrected_received_age
    913912                         + (now - request_time)
    914913</pre><p id="rfc.section.3.3.p.14">where "request_time" is the time (according to the local clock) when the request that elicited this response was sent.</p>
    915914      <p id="rfc.section.3.3.p.15">Summary of age calculation algorithm, when a cache receives a response:</p>
    916       <div id="rfc.figure.u.6"></div><pre class="text">   /*
     915      <div id="rfc.figure.u.5"></div><pre class="text">   /*
    917916    * age_value
    918917    *      is the value of Age: header received by the cache with
     
    952951      </p>
    953952      <p id="rfc.section.3.4.p.3">The max-age directive takes priority over Expires, so if max-age is present in a response, the calculation is simply:</p>
    954       <div id="rfc.figure.u.7"></div><pre class="text">   freshness_lifetime = max_age_value
     953      <div id="rfc.figure.u.6"></div><pre class="text">   freshness_lifetime = max_age_value
    955954</pre><p id="rfc.section.3.4.p.5">Otherwise, if Expires is present in the response, the calculation is:</p>
    956       <div id="rfc.figure.u.8"></div><pre class="text">   freshness_lifetime = expires_value - date_value
     955      <div id="rfc.figure.u.7"></div><pre class="text">   freshness_lifetime = expires_value - date_value
    957956</pre><p id="rfc.section.3.4.p.7">Note that neither of these calculations is vulnerable to clock skew, since all of the information comes from the origin server.</p>
    958957      <p id="rfc.section.3.4.p.8">If none of Expires, Cache-Control: max-age, or Cache-Control: s-maxage (see <a href="#modifications.of.the.basic.expiration.mechanism" title="Modifications of the Basic Expiration Mechanism">Section&nbsp;15.2.3</a>) appears in the response, and the response does not include other restrictions on caching, the cache <em class="bcp14">MAY</em> compute a freshness lifetime using a heuristic. The cache <em class="bcp14">MUST</em> attach Warning 113 to any response whose age is more than 24 hours if such warning has not already been added.
     
    961960      </p>
    962961      <p id="rfc.section.3.4.p.10">The calculation to determine if a response has expired is quite simple:</p>
    963       <div id="rfc.figure.u.9"></div><pre class="text">   response_is_fresh = (freshness_lifetime &gt; current_age)
     962      <div id="rfc.figure.u.8"></div><pre class="text">   response_is_fresh = (freshness_lifetime &gt; current_age)
    964963</pre><h2 id="rfc.section.3.5"><a href="#rfc.section.3.5">3.5</a>&nbsp;<a id="disambiguating.expiration.values" href="#disambiguating.expiration.values">Disambiguating Expiration Values</a></h2>
    965964      <p id="rfc.section.3.5.p.1">Because expiration values are assigned optimistically, it is possible for two caches to contain fresh values for the same
     
    984983         than the one for the existing entry, then the client <em class="bcp14">SHOULD</em> repeat the request unconditionally, and include
    985984      </p>
    986       <div id="rfc.figure.u.10"></div><pre class="text">    Cache-Control: max-age=0
     985      <div id="rfc.figure.u.9"></div><pre class="text">    Cache-Control: max-age=0
    987986</pre><p id="rfc.section.3.6.p.5">to force any intermediate caches to validate their copies directly with the origin server, or</p>
    988       <div id="rfc.figure.u.11"></div><pre class="text">    Cache-Control: no-cache
     987      <div id="rfc.figure.u.10"></div><pre class="text">    Cache-Control: no-cache
    989988</pre><p id="rfc.section.3.6.p.7">to force any intermediate caches to obtain a new copy from the origin server.</p>
    990989      <p id="rfc.section.3.6.p.8">If the Date values are equal, then the client <em class="bcp14">MAY</em> use either response (or <em class="bcp14">MAY</em>, if it is being extremely prudent, request a new response). Servers <em class="bcp14">MUST NOT</em> depend on clients being able to choose deterministically between responses generated during the same second, if their expiration
     
    10531052      </ul>
    10541053      <p id="rfc.section.6.1.p.3">All other headers defined by HTTP/1.1 are end-to-end headers.</p>
    1055       <p id="rfc.section.6.1.p.4">Other hop-by-hop headers <em class="bcp14">MUST</em> be listed in a Connection header (<a href="p1-messaging.html#header.connection" title="Connection">Section 8.1</a> of <a href="#Part1" id="rfc.xref.Part1.15"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>).
     1054      <p id="rfc.section.6.1.p.4">Other hop-by-hop headers <em class="bcp14">MUST</em> be listed in a Connection header (<a href="p1-messaging.html#header.connection" title="Connection">Section 8.1</a> of <a href="#Part1" id="rfc.xref.Part1.12"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>).
    10561055      </p>
    10571056      <h2 id="rfc.section.6.2"><a href="#rfc.section.6.2">6.2</a>&nbsp;<a id="non-modifiable.headers" href="#non-modifiable.headers">Non-modifiable Headers</a></h2>
     
    10881087         </dd>
    10891088      </dl>
    1090       <p id="rfc.section.6.2.p.7">The Content-Length field of a request or response is added or deleted according to the rules in <a href="p1-messaging.html#message.length" title="Message Length">Section 4.4</a> of <a href="#Part1" id="rfc.xref.Part1.16"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>. A transparent proxy <em class="bcp14">MUST</em> preserve the entity-length (<a href="p3-payload.html#entity.length" title="Entity Length">Section 3.2.2</a> of <a href="#Part3" id="rfc.xref.Part3.1"><cite title="HTTP/1.1, part 3: Message Payload and Content Negotiation">[Part3]</cite></a>) of the entity-body, although it <em class="bcp14">MAY</em> change the transfer-length (<a href="p1-messaging.html#message.length" title="Message Length">Section 4.4</a> of <a href="#Part1" id="rfc.xref.Part1.17"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>).
     1089      <p id="rfc.section.6.2.p.7">The Content-Length field of a request or response is added or deleted according to the rules in <a href="p1-messaging.html#message.length" title="Message Length">Section 4.4</a> of <a href="#Part1" id="rfc.xref.Part1.13"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>. A transparent proxy <em class="bcp14">MUST</em> preserve the entity-length (<a href="p3-payload.html#entity.length" title="Entity Length">Section 3.2.2</a> of <a href="#Part3" id="rfc.xref.Part3.1"><cite title="HTTP/1.1, part 3: Message Payload and Content Negotiation">[Part3]</cite></a>) of the entity-body, although it <em class="bcp14">MAY</em> change the transfer-length (<a href="p1-messaging.html#message.length" title="Message Length">Section 4.4</a> of <a href="#Part1" id="rfc.xref.Part1.14"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>).
    10911090      </p>
    10921091      <h2 id="rfc.section.6.3"><a href="#rfc.section.6.3">6.3</a>&nbsp;<a id="combining.headers" href="#combining.headers">Combining Headers</a></h2>
     
    11361135         request can be transformed to the selecting request-headers in the second request by adding or removing linear whitespace
    11371136         (LWS) at places where this is allowed by the corresponding BNF, and/or combining multiple message-header fields with the same
    1138          field name following the rules about message headers in <a href="p1-messaging.html#message.headers" title="Message Headers">Section 4.2</a> of <a href="#Part1" id="rfc.xref.Part1.18"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>.
     1137         field name following the rules about message headers in <a href="p1-messaging.html#message.headers" title="Message Headers">Section 4.2</a> of <a href="#Part1" id="rfc.xref.Part1.15"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>.
    11391138      </p>
    11401139      <p id="rfc.section.7.p.5">A Vary header field-value of "*" always fails to match and subsequent requests on that resource can only be properly interpreted
     
    12511250         are calculated as specified in <a href="#age.calculations" title="Age Calculations">Section&nbsp;3.3</a>.
    12521251      </p>
    1253       <div id="rfc.figure.u.12"></div><pre class="inline"><span id="rfc.iref.g.1"></span><span id="rfc.iref.g.2"></span>  <a href="#header.age" class="smpl">Age</a>   = "Age" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.age" class="smpl">Age-v</a>
     1252      <div id="rfc.figure.u.11"></div><pre class="inline"><span id="rfc.iref.g.1"></span><span id="rfc.iref.g.2"></span>  <a href="#header.age" class="smpl">Age</a>   = "Age" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.age" class="smpl">Age-v</a>
    12541253  <a href="#header.age" class="smpl">Age-v</a> = <a href="#rule.delta-seconds" class="smpl">delta-seconds</a>
    12551254</pre><div id="rule.delta-seconds">
    12561255         <p id="rfc.section.15.1.p.3">  Age values are non-negative decimal integers, representing time in seconds.</p>
    12571256      </div>
    1258       <div id="rfc.figure.u.13"></div><pre class="inline"><span id="rfc.iref.g.3"></span>  <a href="#rule.delta-seconds" class="smpl">delta-seconds</a>  = 1*<a href="#core.rules" class="smpl">DIGIT</a>
     1257      <div id="rfc.figure.u.12"></div><pre class="inline"><span id="rfc.iref.g.3"></span>  <a href="#rule.delta-seconds" class="smpl">delta-seconds</a>  = 1*<a href="#notation" class="smpl">DIGIT</a>
    12591258</pre><p id="rfc.section.15.1.p.5">If a cache receives a value larger than the largest positive integer it can represent, or if any of its age calculations overflows,
    12601259         it <em class="bcp14">MUST</em> transmit an Age header with a value of 2147483648 (2<sup>31</sup>). An HTTP/1.1 server that includes a cache <em class="bcp14">MUST</em> include an Age header field in every response generated from its own cache. Caches <em class="bcp14">SHOULD</em> use an arithmetic type of at least 31 bits of range.
     
    12761275         a specific cache.
    12771276      </p>
    1278       <div id="rfc.figure.u.14"></div><pre class="inline"><span id="rfc.iref.g.4"></span><span id="rfc.iref.g.5"></span><span id="rfc.iref.g.6"></span><span id="rfc.iref.g.7"></span><span id="rfc.iref.g.8"></span><span id="rfc.iref.g.9"></span>  <a href="#header.cache-control" class="smpl">Cache-Control</a>   = "Cache-Control" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.cache-control" class="smpl">Cache-Control-v</a>
     1277      <div id="rfc.figure.u.13"></div><pre class="inline"><span id="rfc.iref.g.4"></span><span id="rfc.iref.g.5"></span><span id="rfc.iref.g.6"></span><span id="rfc.iref.g.7"></span><span id="rfc.iref.g.8"></span><span id="rfc.iref.g.9"></span>  <a href="#header.cache-control" class="smpl">Cache-Control</a>   = "Cache-Control" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.cache-control" class="smpl">Cache-Control-v</a>
    12791278  <a href="#header.cache-control" class="smpl">Cache-Control-v</a> = 1#<a href="#header.cache-control" class="smpl">cache-directive</a>
    12801279
     
    12941293  <a href="#header.cache-control" class="smpl">cache-response-directive</a> =
    12951294       "public"                               ; <a href="#what.is.cacheable" title="What is Cacheable">Section&nbsp;15.2.1</a>
    1296      / "private" [ "=" <a href="#core.rules" class="smpl">DQUOTE</a> 1#<a href="#abnf.dependencies" class="smpl">field-name</a> <a href="#core.rules" class="smpl">DQUOTE</a> ] ; <a href="#what.is.cacheable" title="What is Cacheable">Section&nbsp;15.2.1</a>
    1297      / "no-cache" [ "=" <a href="#core.rules" class="smpl">DQUOTE</a> 1#<a href="#abnf.dependencies" class="smpl">field-name</a> <a href="#core.rules" class="smpl">DQUOTE</a> ] ; <a href="#what.is.cacheable" title="What is Cacheable">Section&nbsp;15.2.1</a>
     1295     / "private" [ "=" <a href="#notation" class="smpl">DQUOTE</a> 1#<a href="#abnf.dependencies" class="smpl">field-name</a> <a href="#notation" class="smpl">DQUOTE</a> ] ; <a href="#what.is.cacheable" title="What is Cacheable">Section&nbsp;15.2.1</a>
     1296     / "no-cache" [ "=" <a href="#notation" class="smpl">DQUOTE</a> 1#<a href="#abnf.dependencies" class="smpl">field-name</a> <a href="#notation" class="smpl">DQUOTE</a> ] ; <a href="#what.is.cacheable" title="What is Cacheable">Section&nbsp;15.2.1</a>
    12981297     / "no-store"                             ; <a href="#what.may.be.stored.by.caches" title="What May be Stored by Caches">Section&nbsp;15.2.2</a>
    12991298     / "no-transform"                         ; <a href="#no-transform.directive" title="No-Transform Directive">Section&nbsp;15.2.5</a>
     
    15611560         an otherwise private response in their shared cache(s) could do so by including
    15621561      </p>
    1563       <div id="rfc.figure.u.15"></div><pre class="text">    Cache-Control: private, community="UCI"
     1562      <div id="rfc.figure.u.14"></div><pre class="text">    Cache-Control: private, community="UCI"
    15641563</pre><p id="rfc.section.15.2.6.p.5">A cache seeing this header field will act correctly even if the cache does not understand the community cache-extension, since
    15651564         it will also see and understand the private directive and thus default to the safe behavior.
     
    15791578         that time.
    15801579      </p>
    1581       <p id="rfc.section.15.3.p.3">The format is an absolute date and time as defined by HTTP-date in <a href="p1-messaging.html#full.date" title="Full Date">Section 3.2.1</a> of <a href="#Part1" id="rfc.xref.Part1.19"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>; it <em class="bcp14">MUST</em> be sent in rfc1123-date format.
    1582       </p>
    1583       <div id="rfc.figure.u.16"></div><pre class="inline"><span id="rfc.iref.g.10"></span><span id="rfc.iref.g.11"></span>  <a href="#header.expires" class="smpl">Expires</a>   = "Expires" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.expires" class="smpl">Expires-v</a>
     1580      <p id="rfc.section.15.3.p.3">The format is an absolute date and time as defined by HTTP-date in <a href="p1-messaging.html#full.date" title="Full Date">Section 3.2.1</a> of <a href="#Part1" id="rfc.xref.Part1.16"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>; it <em class="bcp14">MUST</em> be sent in rfc1123-date format.
     1581      </p>
     1582      <div id="rfc.figure.u.15"></div><pre class="inline"><span id="rfc.iref.g.10"></span><span id="rfc.iref.g.11"></span>  <a href="#header.expires" class="smpl">Expires</a>   = "Expires" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.expires" class="smpl">Expires-v</a>
    15841583  <a href="#header.expires" class="smpl">Expires-v</a> = <a href="#abnf.dependencies" class="smpl">HTTP-date</a>
    15851584</pre><p id="rfc.section.15.3.p.5">An example of its use is</p>
    1586       <div id="rfc.figure.u.17"></div><pre class="text">  Expires: Thu, 01 Dec 1994 16:00:00 GMT
     1585      <div id="rfc.figure.u.16"></div><pre class="text">  Expires: Thu, 01 Dec 1994 16:00:00 GMT
    15871586</pre><p id="rfc.section.15.3.p.7"> </p>
    15881587      <dl class="empty">
     
    16091608         some systems <em class="bcp14">MAY</em> require that behavior be consistent with the directives.
    16101609      </p>
    1611       <div id="rfc.figure.u.18"></div><pre class="inline"><span id="rfc.iref.g.12"></span><span id="rfc.iref.g.13"></span><span id="rfc.iref.g.14"></span><span id="rfc.iref.g.15"></span>  <a href="#header.pragma" class="smpl">Pragma</a>            = "Pragma" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.pragma" class="smpl">Pragma-v</a>
     1610      <div id="rfc.figure.u.17"></div><pre class="inline"><span id="rfc.iref.g.12"></span><span id="rfc.iref.g.13"></span><span id="rfc.iref.g.14"></span><span id="rfc.iref.g.15"></span>  <a href="#header.pragma" class="smpl">Pragma</a>            = "Pragma" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.pragma" class="smpl">Pragma-v</a>
    16121611  <a href="#header.pragma" class="smpl">Pragma-v</a>          = 1#<a href="#header.pragma" class="smpl">pragma-directive</a>
    16131612  <a href="#header.pragma" class="smpl">pragma-directive</a>  = "no-cache" / <a href="#header.pragma" class="smpl">extension-pragma</a>
     
    16371636         response is the appropriate representation. See <a href="#caching.negotiated.responses" title="Caching Negotiated Responses">Section&nbsp;7</a> for use of the Vary header field by caches.
    16381637      </p>
    1639       <div id="rfc.figure.u.19"></div><pre class="inline"><span id="rfc.iref.g.16"></span><span id="rfc.iref.g.17"></span>  <a href="#header.vary" class="smpl">Vary</a>   = "Vary" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.vary" class="smpl">Vary-v</a>
     1638      <div id="rfc.figure.u.18"></div><pre class="inline"><span id="rfc.iref.g.16"></span><span id="rfc.iref.g.17"></span>  <a href="#header.vary" class="smpl">Vary</a>   = "Vary" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.vary" class="smpl">Vary-v</a>
    16401639  <a href="#header.vary" class="smpl">Vary-v</a> = "*" / 1#<a href="#abnf.dependencies" class="smpl">field-name</a>
    16411640</pre><p id="rfc.section.15.5.p.3">An HTTP/1.1 server <em class="bcp14">SHOULD</em> include a Vary header field with any cacheable response that is subject to server-driven negotiation. Doing so allows a cache
     
    16631662      </p>
    16641663      <p id="rfc.section.15.6.p.2">Warning headers are sent with responses using:</p>
    1665       <div id="rfc.figure.u.20"></div><pre class="inline"><span id="rfc.iref.g.18"></span><span id="rfc.iref.g.19"></span><span id="rfc.iref.g.20"></span><span id="rfc.iref.g.21"></span><span id="rfc.iref.g.22"></span><span id="rfc.iref.g.23"></span><span id="rfc.iref.g.24"></span>  <a href="#header.warning" class="smpl">Warning</a>    = "Warning" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.warning" class="smpl">Warning-v</a>
     1664      <div id="rfc.figure.u.19"></div><pre class="inline"><span id="rfc.iref.g.18"></span><span id="rfc.iref.g.19"></span><span id="rfc.iref.g.20"></span><span id="rfc.iref.g.21"></span><span id="rfc.iref.g.22"></span><span id="rfc.iref.g.23"></span><span id="rfc.iref.g.24"></span>  <a href="#header.warning" class="smpl">Warning</a>    = "Warning" ":" <a href="#core.rules" class="smpl">OWS</a> <a href="#header.warning" class="smpl">Warning-v</a>
    16661665  <a href="#header.warning" class="smpl">Warning-v</a>  = 1#<a href="#header.warning" class="smpl">warning-value</a>
    16671666 
    1668   <a href="#header.warning" class="smpl">warning-value</a> = <a href="#header.warning" class="smpl">warn-code</a> <a href="#core.rules" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-agent</a> <a href="#core.rules" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-text</a>
    1669                                         [<a href="#core.rules" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-date</a>]
     1667  <a href="#header.warning" class="smpl">warning-value</a> = <a href="#header.warning" class="smpl">warn-code</a> <a href="#notation" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-agent</a> <a href="#notation" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-text</a>
     1668                                        [<a href="#notation" class="smpl">SP</a> <a href="#header.warning" class="smpl">warn-date</a>]
    16701669 
    1671   <a href="#header.warning" class="smpl">warn-code</a>  = 3<a href="#core.rules" class="smpl">DIGIT</a>
     1670  <a href="#header.warning" class="smpl">warn-code</a>  = 3<a href="#notation" class="smpl">DIGIT</a>
    16721671  <a href="#header.warning" class="smpl">warn-agent</a> = ( <a href="#abnf.dependencies" class="smpl">uri-host</a> [ ":" <a href="#abnf.dependencies" class="smpl">port</a> ] ) / <a href="#abnf.dependencies" class="smpl">pseudonym</a>
    16731672                  ; the name or pseudonym of the server adding
    16741673                  ; the Warning header, for use in debugging
    16751674  <a href="#header.warning" class="smpl">warn-text</a>  = <a href="#core.rules" class="smpl">quoted-string</a>
    1676   <a href="#header.warning" class="smpl">warn-date</a>  = <a href="#core.rules" class="smpl">DQUOTE</a> <a href="#abnf.dependencies" class="smpl">HTTP-date</a> <a href="#core.rules" class="smpl">DQUOTE</a>
     1675  <a href="#header.warning" class="smpl">warn-date</a>  = <a href="#notation" class="smpl">DQUOTE</a> <a href="#abnf.dependencies" class="smpl">HTTP-date</a> <a href="#notation" class="smpl">DQUOTE</a>
    16771676</pre><p id="rfc.section.15.6.p.4">A response <em class="bcp14">MAY</em> carry more than one Warning header.
    16781677      </p>
     
    18241823      <h2 id="rfc.references.1"><a href="#rfc.section.19.1" id="rfc.section.19.1">19.1</a> Normative References
    18251824      </h2>
    1826       <table summary="Normative References">                 
     1825      <table summary="Normative References">                   
    18271826         <tr>
    18281827            <td class="reference"><b id="ISO-8859-1">[ISO-8859-1]</b></td>
     
    18701869            <td class="reference"><b id="RFC2119">[RFC2119]</b></td>
    18711870            <td class="top"><a title="Harvard University">Bradner, S.</a>, “<a href="http://tools.ietf.org/html/rfc2119">Key words for use in RFCs to Indicate Requirement Levels</a>”, BCP&nbsp;14, RFC&nbsp;2119, March&nbsp;1997.
     1871            </td>
     1872         </tr>
     1873         <tr>
     1874            <td class="reference"><b id="RFC5234">[RFC5234]</b></td>
     1875            <td class="top"><a title="Brandenburg InternetWorking">Crocker, D., Ed.</a> and <a title="THUS plc.">P. Overell</a>, “<a href="http://tools.ietf.org/html/rfc5234">Augmented BNF for Syntax Specifications: ABNF</a>”, STD&nbsp;68, RFC&nbsp;5234, January&nbsp;2008.
    18721876            </td>
    18731877         </tr>
     
    19141918      <p id="rfc.section.A.1.p.2">Transfer-coding and message lengths all interact in ways that required fixing exactly when chunked encoding is used (to allow
    19151919         for transfer encoding that may not be self delimiting); it was important to straighten out exactly how message lengths are
    1916          computed. (<a href="#non-modifiable.headers" title="Non-modifiable Headers">Section&nbsp;6.2</a>, see also <a href="#Part1" id="rfc.xref.Part1.20"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="#Part3" id="rfc.xref.Part3.3"><cite title="HTTP/1.1, part 3: Message Payload and Content Negotiation">[Part3]</cite></a> and <a href="#Part5" id="rfc.xref.Part5.3"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>)
     1920         computed. (<a href="#non-modifiable.headers" title="Non-modifiable Headers">Section&nbsp;6.2</a>, see also <a href="#Part1" id="rfc.xref.Part1.17"><cite title="HTTP/1.1, part 1: URIs, Connections, and Message Parsing">[Part1]</cite></a>, <a href="#Part3" id="rfc.xref.Part3.3"><cite title="HTTP/1.1, part 3: Message Payload and Content Negotiation">[Part3]</cite></a> and <a href="#Part5" id="rfc.xref.Part5.3"><cite title="HTTP/1.1, part 5: Range Requests and Partial Responses">[Part5]</cite></a>)
    19171921      </p>
    19181922      <p id="rfc.section.A.1.p.3">Proxies should be able to add Content-Length when appropriate. (<a href="#non-modifiable.headers" title="Non-modifiable Headers">Section&nbsp;6.2</a>)
     
    19291933      </p>
    19301934      <h1 id="rfc.section.B"><a href="#rfc.section.B">B.</a>&nbsp;<a id="collected.abnf" href="#collected.abnf">Collected ABNF</a></h1>
    1931       <div id="rfc.figure.u.21"></div> <pre class="inline">Age = "Age:" OWS Age-v
     1935      <div id="rfc.figure.u.20"></div> <pre class="inline">Age = "Age:" OWS Age-v
    19321936Age-v = delta-seconds
    19331937Cache-Control = "Cache-Control:" OWS Cache-Control-v
    19341938Cache-Control-v = *( "," OWS ) cache-directive *( OWS "," [ OWS
    19351939 cache-directive ] )
    1936 DIGIT = &lt;DIGIT, defined in [Part1], Section 1.2.2&gt;
    1937 DQUOTE = &lt;DQUOTE, defined in [Part1], Section 1.2.2&gt;
    19381940Expires = "Expires:" OWS Expires-v
    19391941Expires-v = HTTP-date
     
    19431945Pragma-v = *( "," OWS ) pragma-directive *( OWS "," [ OWS
    19441946 pragma-directive ] )
    1945 SP = &lt;SP, defined in [Part1], Section 1.2.2&gt;
    19461947Vary = "Vary:" OWS Vary-v
    19471948Vary-v = "*" / ( *( "," OWS ) field-name *( OWS "," [ OWS field-name
     
    22212222            </li>
    22222223            <li class="indline0"><a id="rfc.index.P" href="#rfc.index.P"><b>P</b></a><ul class="ind">
    2223                   <li class="indline1"><em>Part1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.1">1.4</a>, <a class="iref" href="#rfc.xref.Part1.2">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.3">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.4">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.5">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.6">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.7">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.8">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.9">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.10">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.11">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.12">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.13">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.14">3.3</a>, <a class="iref" href="#rfc.xref.Part1.15">6.1</a>, <a class="iref" href="#rfc.xref.Part1.16">6.2</a>, <a class="iref" href="#rfc.xref.Part1.17">6.2</a>, <a class="iref" href="#rfc.xref.Part1.18">7</a>, <a class="iref" href="#rfc.xref.Part1.19">15.3</a>, <a class="iref" href="#Part1"><b>19.1</b></a>, <a class="iref" href="#rfc.xref.Part1.20">A.1</a><ul class="ind">
     2224                  <li class="indline1"><em>Part1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.1">1.4</a>, <a class="iref" href="#rfc.xref.Part1.2">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.3">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.4">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.5">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.6">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.7">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.8">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.9">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.10">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.11">3.3</a>, <a class="iref" href="#rfc.xref.Part1.12">6.1</a>, <a class="iref" href="#rfc.xref.Part1.13">6.2</a>, <a class="iref" href="#rfc.xref.Part1.14">6.2</a>, <a class="iref" href="#rfc.xref.Part1.15">7</a>, <a class="iref" href="#rfc.xref.Part1.16">15.3</a>, <a class="iref" href="#Part1"><b>19.1</b></a>, <a class="iref" href="#rfc.xref.Part1.17">A.1</a><ul class="ind">
    22242225                        <li class="indline1"><em>Section 1.2</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.1">1.4</a></li>
    2225                         <li class="indline1"><em>Section 1.2.2</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.2">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.3">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.4">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.5">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.6">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.7">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.8">1.4.1</a></li>
    2226                         <li class="indline1"><em>Section 2.1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.11">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.13">1.4.2</a></li>
    2227                         <li class="indline1"><em>Section 3.2.1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.10">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.19">15.3</a></li>
    2228                         <li class="indline1"><em>Section 4.2</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.9">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.18">7</a></li>
    2229                         <li class="indline1"><em>Section 4.4</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.16">6.2</a>, <a class="iref" href="#rfc.xref.Part1.17">6.2</a></li>
    2230                         <li class="indline1"><em>Section 8.1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.15">6.1</a></li>
    2231                         <li class="indline1"><em>Section 8.3</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.14">3.3</a></li>
    2232                         <li class="indline1"><em>Section 8.9</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.12">1.4.2</a></li>
     2226                        <li class="indline1"><em>Section 1.2.2</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.2">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.3">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.4">1.4.1</a>, <a class="iref" href="#rfc.xref.Part1.5">1.4.1</a></li>
     2227                        <li class="indline1"><em>Section 2.1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.8">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.10">1.4.2</a></li>
     2228                        <li class="indline1"><em>Section 3.2.1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.7">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.16">15.3</a></li>
     2229                        <li class="indline1"><em>Section 4.2</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.6">1.4.2</a>, <a class="iref" href="#rfc.xref.Part1.15">7</a></li>
     2230                        <li class="indline1"><em>Section 4.4</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.13">6.2</a>, <a class="iref" href="#rfc.xref.Part1.14">6.2</a></li>
     2231                        <li class="indline1"><em>Section 8.1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.12">6.1</a></li>
     2232                        <li class="indline1"><em>Section 8.3</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.11">3.3</a></li>
     2233                        <li class="indline1"><em>Section 8.9</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.Part1.9">1.4.2</a></li>
    22332234                     </ul>
    22342235                  </li>
     
    22752276                  <li class="indline1"><em>RFC2616</em>&nbsp;&nbsp;<a class="iref" href="#RFC2616"><b>19.2</b></a>, <a class="iref" href="#rfc.xref.RFC2616.1">C.1</a></li>
    22762277                  <li class="indline1"><em>RFC3864</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.RFC3864.1">16.1</a>, <a class="iref" href="#RFC3864"><b>19.2</b></a></li>
     2278                  <li class="indline1"><em>RFC5234</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.RFC5234.1">1.4</a>, <a class="iref" href="#RFC5234"><b>19.1</b></a><ul class="ind">
     2279                        <li class="indline1"><em>Appendix B.1</em>&nbsp;&nbsp;<a class="iref" href="#rfc.xref.RFC5234.1">1.4</a></li>
     2280                     </ul>
     2281                  </li>
    22772282               </ul>
    22782283            </li>
Note: See TracChangeset for help on using the changeset viewer.