Ignore:
Timestamp:
02/11/11 12:33:39 (11 years ago)
Author:
julian.reschke@…
Message:

Change ETag header field ABNF not to use quoted-string, thus avoiding escaping issues (see #306).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • draft-ietf-httpbis/latest/p4-conditional.html

    r1469 r1470  
    359359  }
    360360  @bottom-center {
    361        content: "Expires May 4, 2012";
     361       content: "Expires May 5, 2012";
    362362  }
    363363  @bottom-right {
     
    404404      <meta name="dct.creator" content="Reschke, J. F.">
    405405      <meta name="dct.identifier" content="urn:ietf:id:draft-ietf-httpbis-p4-conditional-latest">
    406       <meta name="dct.issued" scheme="ISO8601" content="2011-11-01">
     406      <meta name="dct.issued" scheme="ISO8601" content="2011-11-02">
    407407      <meta name="dct.replaces" content="urn:ietf:rfc:2616">
    408408      <meta name="dct.abstract" content="The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypertext information systems. HTTP has been in use by the World Wide Web global information initiative since 1990. This document is Part 4 of the seven-part specification that defines the protocol referred to as &#34;HTTP/1.1&#34; and, taken together, obsoletes RFC 2616. Part 4 defines request header fields for indicating conditional requests and the rules for constructing responses to those requests.">
     
    430430            </tr>
    431431            <tr>
    432                <td class="left">Expires: May 4, 2012</td>
     432               <td class="left">Expires: May 5, 2012</td>
    433433               <td class="right">J. Mogul</td>
    434434            </tr>
     
    487487            <tr>
    488488               <td class="left"></td>
    489                <td class="right">November 1, 2011</td>
     489               <td class="right">November 2, 2011</td>
    490490            </tr>
    491491         </tbody>
     
    517517         in progress”.
    518518      </p>
    519       <p>This Internet-Draft will expire on May 4, 2012.</p>
     519      <p>This Internet-Draft will expire on May 5, 2012.</p>
    520520      <h1><a id="rfc.copyrightnotice" href="#rfc.copyrightnotice">Copyright Notice</a></h1>
    521521      <p>Copyright © 2011 IETF Trust and the persons identified as the document authors. All rights reserved.</p>
     
    654654      </p>
    655655      <div id="rfc.figure.u.1"></div><pre class="inline">  <a href="#notation" class="smpl">OWS</a>           = &lt;OWS, 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;
    656   <a href="#notation" class="smpl">quoted-string</a> = &lt;quoted-string, 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#field.rules" title="Common Field ABNF Rules">Section 3.2.3</a>&gt;
     656  <a href="#notation" class="smpl">obs-text</a>      = &lt;obs-text, 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#field.rules" title="Common Field ABNF Rules">Section 3.2.3</a>&gt;
    657657  <a href="#notation" class="smpl">HTTP-date</a>     = &lt;HTTP-date, defined in <a href="#Part2" id="rfc.xref.Part2.2"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>, <a href="p2-semantics.html#http.date" title="Date/Time Formats">Section 8</a>&gt;
    658658</pre><div id="rfc.iref.m.1"></div>
     
    777777         same time, or both. An entity-tag consists of an opaque quoted string, possibly prefixed by a weakness indicator.
    778778      </p>
    779       <div id="rfc.figure.u.4"></div><pre class="inline"><span id="rfc.iref.g.2"></span><span id="rfc.iref.g.3"></span><span id="rfc.iref.g.4"></span><span id="rfc.iref.g.5"></span>  <a href="#header.etag" class="smpl">ETag</a>       = <a href="#header.etag" class="smpl">entity-tag</a>
     779      <div id="rfc.figure.u.4"></div><pre class="inline"><span id="rfc.iref.g.2"></span><span id="rfc.iref.g.3"></span><span id="rfc.iref.g.4"></span><span id="rfc.iref.g.5"></span><span id="rfc.iref.g.6"></span>  <a href="#header.etag" class="smpl">ETag</a>       = <a href="#header.etag" class="smpl">entity-tag</a>
    780780
    781781  <a href="#header.etag" class="smpl">entity-tag</a> = [ <a href="#header.etag" class="smpl">weak</a> ] <a href="#header.etag" class="smpl">opaque-tag</a>
    782782  <a href="#header.etag" class="smpl">weak</a>       = %x57.2F ; "W/", case-sensitive
    783   <a href="#header.etag" class="smpl">opaque-tag</a> = <a href="#notation" class="smpl">quoted-string</a>
    784 </pre><p id="rfc.section.2.3.p.3">An entity-tag can be more reliable for validation than a modification date in situations where it is inconvenient to store
     783  <a href="#header.etag" class="smpl">opaque-tag</a> = <a href="#notation" class="smpl">DQUOTE</a> *<a href="#header.etag" class="smpl">etagc</a> <a href="#notation" class="smpl">DQUOTE</a>
     784  <a href="#header.etag" class="smpl">etagc</a>      = %x21 / %x23-7E / <a href="#notation" class="smpl">obs-text</a>
     785             ; <a href="#">VCHAR</a> except double quotes, plus obs-text
     786</pre><div class="note" id="rfc.section.2.3.p.3">
     787         <p> <b>Note:</b> Previously, opaque-tag was defined to be a quoted-string (<a href="#RFC2616" id="rfc.xref.RFC2616.1"><cite title="Hypertext Transfer Protocol -- HTTP/1.1">[RFC2616]</cite></a>, <a href="http://tools.ietf.org/html/rfc2616#section-3.11">Section 3.11</a>), thus some recipients might perform backslash unescaping. Servers therefore ought to avoid backslash characters in entity
     788            tags.
     789         </p>
     790      </div>
     791      <p id="rfc.section.2.3.p.4">An entity-tag can be more reliable for validation than a modification date in situations where it is inconvenient to store
    785792         modification dates, where the one-second resolution of HTTP date values is not sufficient, or where modification dates are
    786793         not consistently maintained.
     
    790797  ETag: W/"xyzzy"
    791798  ETag: ""
    792 </pre><p id="rfc.section.2.3.p.5">An entity-tag can be either a weak or strong validator, with strong being the default. If an origin server provides an entity-tag
     799</pre><p id="rfc.section.2.3.p.6">An entity-tag can be either a weak or strong validator, with strong being the default. If an origin server provides an entity-tag
    793800         for a representation and the generation of that entity-tag does not satisfy the requirements for a strong validator (<a href="#weak.and.strong.validators" title="Weak versus Strong">Section&nbsp;2.1</a>), then that entity-tag <em class="bcp14">MUST</em> be marked as weak by prefixing its opaque value with "W/" (case-sensitive).
    794801      </p>
     
    957964         An If-Match field-value of "*" places the precondition on the existence of any current representation for the target resource.
    958965      </p>
    959       <div id="rfc.figure.u.9"></div><pre class="inline"><span id="rfc.iref.g.6"></span>  <a href="#header.if-match" class="smpl">If-Match</a> = "*" / 1#<a href="#header.etag" class="smpl">entity-tag</a>
     966      <div id="rfc.figure.u.9"></div><pre class="inline"><span id="rfc.iref.g.7"></span>  <a href="#header.if-match" class="smpl">If-Match</a> = "*" / 1#<a href="#header.etag" class="smpl">entity-tag</a>
    960967</pre><p id="rfc.section.3.1.p.3">If any of the entity-tags listed in the If-Match field value match (as per <a href="#entity.tag.comparison" title="Comparison">Section&nbsp;2.3.2</a>) the entity-tag of the selected representation for the target resource, or if "*" is given and any current representation
    961968         exists for the target resource, then the server <em class="bcp14">MAY</em> perform the request method as if the If-Match header field was not present.
     
    987994         for the target resource.
    988995      </p>
    989       <div id="rfc.figure.u.11"></div><pre class="inline"><span id="rfc.iref.g.7"></span>  <a href="#header.if-none-match" class="smpl">If-None-Match</a> = "*" / 1#<a href="#header.etag" class="smpl">entity-tag</a>
     996      <div id="rfc.figure.u.11"></div><pre class="inline"><span id="rfc.iref.g.8"></span>  <a href="#header.if-none-match" class="smpl">If-None-Match</a> = "*" / 1#<a href="#header.etag" class="smpl">entity-tag</a>
    990997</pre><p id="rfc.section.3.2.p.4">If any of the entity-tags listed in the If-None-Match field-value match (as per <a href="#entity.tag.comparison" title="Comparison">Section&nbsp;2.3.2</a>) the entity-tag of the selected representation, or if "*" is given and any current representation exists for that resource,
    991998         then the server <em class="bcp14">MUST NOT</em> perform the requested method. Instead, if the request method was GET or HEAD, the server <em class="bcp14">SHOULD</em> respond with a 304 (Not Modified) status code, including the cache-related header fields (particularly ETag) of the selected
     
    10121019         the time specified in this field, then do not perform the request method; instead, respond as detailed below.
    10131020      </p>
    1014       <div id="rfc.figure.u.13"></div><pre class="inline"><span id="rfc.iref.g.8"></span>  <a href="#header.if-modified-since" class="smpl">If-Modified-Since</a> = <a href="#notation" class="smpl">HTTP-date</a>
     1021      <div id="rfc.figure.u.13"></div><pre class="inline"><span id="rfc.iref.g.9"></span>  <a href="#header.if-modified-since" class="smpl">If-Modified-Since</a> = <a href="#notation" class="smpl">HTTP-date</a>
    10151022</pre><p id="rfc.section.3.3.p.3">An example of the field is:</p>
    10161023      <div id="rfc.figure.u.14"></div><pre class="text">  If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
     
    10601067         the time specified in this field, the server <em class="bcp14">SHOULD</em> perform the request method as if the If-Unmodified-Since header field were not present.
    10611068      </p>
    1062       <div id="rfc.figure.u.15"></div><pre class="inline"><span id="rfc.iref.g.9"></span>  <a href="#header.if-unmodified-since" class="smpl">If-Unmodified-Since</a> = <a href="#notation" class="smpl">HTTP-date</a>
     1069      <div id="rfc.figure.u.15"></div><pre class="inline"><span id="rfc.iref.g.10"></span>  <a href="#header.if-unmodified-since" class="smpl">If-Unmodified-Since</a> = <a href="#notation" class="smpl">HTTP-date</a>
    10631070</pre><p id="rfc.section.3.4.p.3">An example of the field is:</p>
    10641071      <div id="rfc.figure.u.16"></div><pre class="text">  If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT
     
    10761083      </p>
    10771084      <h1 id="rfc.section.4"><a href="#rfc.section.4">4.</a>&nbsp;<a id="status.code.definitions" href="#status.code.definitions">Status Code Definitions</a></h1>
    1078       <div id="rfc.iref.26"></div>
     1085      <div id="rfc.iref.27"></div>
    10791086      <div id="rfc.iref.s.2"></div>
    10801087      <h2 id="rfc.section.4.1"><a href="#rfc.section.4.1">4.1</a>&nbsp;<a id="status.304" href="#status.304">304 Not Modified</a></h2>
     
    10991106      <p id="rfc.section.4.1.p.5">If a cache uses a received 304 response to update a cache entry, the cache <em class="bcp14">MUST</em> update the entry to reflect any new field values given in the response.
    11001107      </p>
    1101       <div id="rfc.iref.27"></div>
     1108      <div id="rfc.iref.28"></div>
    11021109      <div id="rfc.iref.s.3"></div>
    11031110      <h2 id="rfc.section.4.2"><a href="#rfc.section.4.2">4.2</a>&nbsp;<a id="status.412" href="#status.412">412 Precondition Failed</a></h2>
     
    12841291      <p id="rfc.section.A.p.1">Allow weak entity-tags in all requests except range requests (Sections <a href="#weak.and.strong.validators" title="Weak versus Strong">2.1</a> and <a href="#header.if-none-match" id="rfc.xref.header.if-none-match.2" title="If-None-Match">3.2</a>).
    12851292      </p>
    1286       <p id="rfc.section.A.p.2">Change ABNF productions for header fields to only define the field value. (<a href="#header.field.definitions" title="Precondition Header Fields">Section&nbsp;3</a>)
     1293      <p id="rfc.section.A.p.2">Change ETag header field ABNF not to use quoted-string, thus avoiding escaping issues. (<a href="#header.etag" id="rfc.xref.header.etag.2" title="ETag">Section&nbsp;2.3</a>)
     1294      </p>
     1295      <p id="rfc.section.A.p.3">Change ABNF productions for header fields to only define the field value. (<a href="#header.field.definitions" title="Precondition Header Fields">Section&nbsp;3</a>)
    12871296      </p>
    12881297      <h1 id="rfc.section.B"><a href="#rfc.section.B">B.</a>&nbsp;<a id="collected.abnf" href="#collected.abnf">Collected ABNF</a></h1>
     
    13031312
    13041313<a href="#header.etag" class="smpl">entity-tag</a> = [ weak ] opaque-tag
    1305 
    1306 <a href="#header.etag" class="smpl">opaque-tag</a> = quoted-string
    1307 
    1308 <a href="#notation" class="smpl">quoted-string</a> = &lt;quoted-string, defined in [Part1], Section 3.2.3&gt;
     1314<a href="#header.etag" class="smpl">etagc</a> = "!" / %x23-7E ; '#'-'~'
     1315 / obs-text
     1316
     1317<a href="#notation" class="smpl">obs-text</a> = &lt;obs-text, defined in [Part1], Section 3.2.3&gt;
     1318<a href="#header.etag" class="smpl">opaque-tag</a> = DQUOTE *etagc DQUOTE
    13091319
    13101320<a href="#header.etag" class="smpl">weak</a> = %x57.2F ; W/
     
    13191329      <h2 id="rfc.section.C.1"><a href="#rfc.section.C.1">C.1</a>&nbsp;Since RFC 2616
    13201330      </h2>
    1321       <p id="rfc.section.C.1.p.1">Extracted relevant partitions from <a href="#RFC2616" id="rfc.xref.RFC2616.1"><cite title="Hypertext Transfer Protocol -- HTTP/1.1">[RFC2616]</cite></a>.
     1331      <p id="rfc.section.C.1.p.1">Extracted relevant partitions from <a href="#RFC2616" id="rfc.xref.RFC2616.2"><cite title="Hypertext Transfer Protocol -- HTTP/1.1">[RFC2616]</cite></a>.
    13221332      </p>
    13231333      <h2 id="rfc.section.C.2"><a href="#rfc.section.C.2">C.2</a>&nbsp;Since draft-ietf-httpbis-p4-conditional-00
     
    14371447      </ul>
    14381448      <h2 id="rfc.section.C.19"><a href="#rfc.section.C.19">C.19</a>&nbsp;<a id="changes.since.17" href="#changes.since.17">Since draft-ietf-httpbis-p4-conditional-17</a></h2>
    1439       <p id="rfc.section.C.19.p.1">No changes yet.</p>
     1449      <p id="rfc.section.C.19.p.1">Closed issues: </p>
     1450      <ul>
     1451         <li> &lt;<a href="http://tools.ietf.org/wg/httpbis/trac/ticket/306">http://tools.ietf.org/wg/httpbis/trac/ticket/306</a>&gt;: "does etag value really use quoted-string"
     1452         </li>
     1453      </ul>
    14401454      <h1 id="rfc.index"><a href="#rfc.index">Index</a></h1>
    14411455      <p class="noprint"><a href="#rfc.index.3">3</a> <a href="#rfc.index.4">4</a> <a href="#rfc.index.E">E</a> <a href="#rfc.index.G">G</a> <a href="#rfc.index.H">H</a> <a href="#rfc.index.I">I</a> <a href="#rfc.index.L">L</a> <a href="#rfc.index.M">M</a> <a href="#rfc.index.P">P</a> <a href="#rfc.index.R">R</a> <a href="#rfc.index.S">S</a> <a href="#rfc.index.V">V</a>
     
    14441458         <ul class="ind">
    14451459            <li><a id="rfc.index.3" href="#rfc.index.3"><b>3</b></a><ul>
    1446                   <li>304 Not Modified (status code)&nbsp;&nbsp;<a href="#rfc.iref.26"><b>4.1</b></a>, <a href="#rfc.xref.status.304.1">5.1</a></li>
     1460                  <li>304 Not Modified (status code)&nbsp;&nbsp;<a href="#rfc.iref.27"><b>4.1</b></a>, <a href="#rfc.xref.status.304.1">5.1</a></li>
    14471461               </ul>
    14481462            </li>
    14491463            <li><a id="rfc.index.4" href="#rfc.index.4"><b>4</b></a><ul>
    1450                   <li>412 Precondition Failed (status code)&nbsp;&nbsp;<a href="#rfc.iref.27"><b>4.2</b></a>, <a href="#rfc.xref.status.412.1">5.1</a></li>
     1464                  <li>412 Precondition Failed (status code)&nbsp;&nbsp;<a href="#rfc.iref.28"><b>4.2</b></a>, <a href="#rfc.xref.status.412.1">5.1</a></li>
    14511465               </ul>
    14521466            </li>
    14531467            <li><a id="rfc.index.E" href="#rfc.index.E"><b>E</b></a><ul>
    1454                   <li>ETag header field&nbsp;&nbsp;<a href="#rfc.iref.e.1"><b>2.3</b></a>, <a href="#rfc.xref.header.etag.1">5.2</a></li>
     1468                  <li>ETag header field&nbsp;&nbsp;<a href="#rfc.iref.e.1"><b>2.3</b></a>, <a href="#rfc.xref.header.etag.1">5.2</a>, <a href="#rfc.xref.header.etag.2">A</a></li>
    14551469               </ul>
    14561470            </li>
     
    14601474                        <li><tt>entity-tag</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.3"><b>2.3</b></a></li>
    14611475                        <li><tt>ETag</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.2"><b>2.3</b></a></li>
    1462                         <li><tt>If-Match</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.6"><b>3.1</b></a></li>
    1463                         <li><tt>If-Modified-Since</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.8"><b>3.3</b></a></li>
    1464                         <li><tt>If-None-Match</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.7"><b>3.2</b></a></li>
    1465                         <li><tt>If-Unmodified-Since</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.9"><b>3.4</b></a></li>
     1476                        <li><tt>etagc</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.6"><b>2.3</b></a></li>
     1477                        <li><tt>If-Match</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.7"><b>3.1</b></a></li>
     1478                        <li><tt>If-Modified-Since</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.9"><b>3.3</b></a></li>
     1479                        <li><tt>If-None-Match</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.8"><b>3.2</b></a></li>
     1480                        <li><tt>If-Unmodified-Since</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.10"><b>3.4</b></a></li>
    14661481                        <li><tt>Last-Modified</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.1"><b>2.2</b></a></li>
    14671482                        <li><tt>opaque-tag</tt>&nbsp;&nbsp;<a href="#rfc.iref.g.5"><b>2.3</b></a></li>
     
    14741489                  <li>Header Fields&nbsp;&nbsp;
    14751490                     <ul>
    1476                         <li>ETag&nbsp;&nbsp;<a href="#rfc.iref.h.2"><b>2.3</b></a>, <a href="#rfc.xref.header.etag.1">5.2</a></li>
     1491                        <li>ETag&nbsp;&nbsp;<a href="#rfc.iref.h.2"><b>2.3</b></a>, <a href="#rfc.xref.header.etag.1">5.2</a>, <a href="#rfc.xref.header.etag.2">A</a></li>
    14771492                        <li>If-Match&nbsp;&nbsp;<a href="#rfc.iref.h.3"><b>3.1</b></a>, <a href="#rfc.xref.header.if-match.1">5.2</a></li>
    14781493                        <li>If-Modified-Since&nbsp;&nbsp;<a href="#rfc.iref.h.5"><b>3.3</b></a>, <a href="#rfc.xref.header.if-modified-since.1">5.2</a></li>
     
    15291544            <li><a id="rfc.index.R" href="#rfc.index.R"><b>R</b></a><ul>
    15301545                  <li><em>RFC2119</em>&nbsp;&nbsp;<a href="#rfc.xref.RFC2119.1">1.1</a>, <a href="#RFC2119"><b>8.1</b></a></li>
    1531                   <li><em>RFC2616</em>&nbsp;&nbsp;<a href="#RFC2616"><b>8.2</b></a>, <a href="#rfc.xref.RFC2616.1">C.1</a></li>
     1546                  <li><em>RFC2616</em>&nbsp;&nbsp;<a href="#rfc.xref.RFC2616.1">2.3</a>, <a href="#RFC2616"><b>8.2</b></a>, <a href="#rfc.xref.RFC2616.2">C.1</a><ul>
     1547                        <li><em>Section 3.11</em>&nbsp;&nbsp;<a href="#rfc.xref.RFC2616.1">2.3</a></li>
     1548                     </ul>
     1549                  </li>
    15321550                  <li><em>RFC3864</em>&nbsp;&nbsp;<a href="#rfc.xref.RFC3864.1">5.2</a>, <a href="#RFC3864"><b>8.2</b></a></li>
    15331551                  <li><em>RFC4918</em>&nbsp;&nbsp;<a href="#rfc.xref.RFC4918.1">2</a>, <a href="#RFC4918"><b>8.2</b></a></li>
Note: See TracChangeset for help on using the changeset viewer.