* WGs marked with an * asterisk has had at least one new draft made available during the last 5 days

Changeset 1470


Ignore:
Timestamp:
2011-11-02 05:33:39 (3 years ago)
Author:
julian.reschke@gmx.de
Message:

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

Location:
draft-ietf-httpbis/latest
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • draft-ietf-httpbis/latest/httpbis.abnf

    r1435 r1470  
    126126delta-seconds = 1*DIGIT 
    127127entity-tag = [ weak ] opaque-tag 
     128etagc = "!" / %x23-7E ; '#'-'~' 
     129 / obs-text 
    128130expect-params = ";" token [ "=" ( token / quoted-string ) ] 
    129131expectation = "100-continue" / expectation-extension 
     
    164166obs-fold = CRLF ( SP / HTAB ) 
    165167obs-text = %x80-FF 
    166 opaque-tag = quoted-string 
     168opaque-tag = DQUOTE *etagc DQUOTE 
    167169other-content-range-spec = other-range-unit SP other-range-resp-spec 
    168170other-range-resp-spec = *CHAR 
  • 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> 
  • draft-ietf-httpbis/latest/p4-conditional.xml

    r1469 r1470  
    293293  <x:anchor-alias value="CR"/> 
    294294  <x:anchor-alias value="DIGIT"/> 
     295  <x:anchor-alias value="DQUOTE"/> 
    295296  <x:anchor-alias value="LF"/> 
    296297  <x:anchor-alias value="OCTET"/> 
    297298  <x:anchor-alias value="VCHAR"/> 
    298299  <x:anchor-alias value="core.rules"/> 
    299   <x:anchor-alias value="quoted-string"/> 
     300  <x:anchor-alias value="obs-text"/> 
    300301  <x:anchor-alias value="OWS"/> 
    301302  <x:anchor-alias value="HTTP-date"/> 
     
    321322<figure><artwork type="abnf2616"> 
    322323  <x:ref>OWS</x:ref>           = &lt;OWS, defined in &basic-rules;&gt; 
    323   <x:ref>quoted-string</x:ref> = &lt;quoted-string, defined in &field-rules;&gt; 
     324  <x:ref>obs-text</x:ref>      = &lt;obs-text, defined in &field-rules;&gt; 
    324325  <x:ref>HTTP-date</x:ref>     = &lt;HTTP-date, defined in &http-date;&gt; 
    325326</artwork></figure> 
     
    548549  <x:anchor-alias value="opaque-tag"/> 
    549550  <x:anchor-alias value="weak"/> 
     551  <x:anchor-alias value="etagc"/> 
    550552<t> 
    551553   The ETag header field provides the current entity-tag for the 
     
    558560   quoted string, possibly prefixed by a weakness indicator. 
    559561</t> 
    560 <figure><artwork type="abnf2616"><iref primary="true" item="Grammar" subitem="ETag"/><iref primary="true" item="Grammar" subitem="entity-tag"/><iref primary="true" item="Grammar" subitem="weak"/><iref primary="true" item="Grammar" subitem="opaque-tag"/> 
     562<figure><artwork type="abnf2616"><iref primary="true" item="Grammar" subitem="ETag"/><iref primary="true" item="Grammar" subitem="entity-tag"/><iref primary="true" item="Grammar" subitem="weak"/><iref primary="true" item="Grammar" subitem="opaque-tag"/><iref primary="true" item="Grammar" subitem="etagc"/> 
    561563  <x:ref>ETag</x:ref>       = <x:ref>entity-tag</x:ref> 
    562564 
    563565  <x:ref>entity-tag</x:ref> = [ <x:ref>weak</x:ref> ] <x:ref>opaque-tag</x:ref> 
    564566  <x:ref>weak</x:ref>       = <x:abnf-char-sequence>"W/"</x:abnf-char-sequence> ; "W/", case-sensitive 
    565   <x:ref>opaque-tag</x:ref> = <x:ref>quoted-string</x:ref> 
     567  <x:ref>opaque-tag</x:ref> = <x:ref>DQUOTE</x:ref> *<x:ref>etagc</x:ref> <x:ref>DQUOTE</x:ref> 
     568  <x:ref>etagc</x:ref>      = %x21 / %x23-7E / <x:ref>obs-text</x:ref> 
     569             ; <xref>VCHAR</xref> except double quotes, plus obs-text 
    566570</artwork></figure> 
     571<x:note> 
     572  <t> 
     573    <x:h>Note:</x:h> Previously, opaque-tag was defined to be a quoted-string 
     574    (<xref target="RFC2616" x:fmt="," x:sec="3.11"/>), thus some recipients 
     575    might perform backslash unescaping. Servers therefore ought to avoid 
     576    backslash characters in entity tags. 
     577  </t> 
     578</x:note> 
    567579<t> 
    568580   An entity-tag can be more reliable for validation than a modification 
     
    15671579</t> 
    15681580<t> 
     1581  Change ETag header field ABNF not to use quoted-string, thus avoiding 
     1582  escaping issues. 
     1583  (<xref target="header.etag"/>) 
     1584</t> 
     1585<t> 
    15691586  Change ABNF productions for header fields to only define the field value. 
    15701587  (<xref target="header.field.definitions"/>) 
     
    15921609 
    15931610<x:ref>entity-tag</x:ref> = [ weak ] opaque-tag 
    1594  
    1595 <x:ref>opaque-tag</x:ref> = quoted-string 
    1596  
    1597 <x:ref>quoted-string</x:ref> = &lt;quoted-string, defined in [Part1], Section 3.2.3&gt; 
     1611<x:ref>etagc</x:ref> = "!" / %x23-7E ; '#'-'~' 
     1612 / obs-text 
     1613 
     1614<x:ref>obs-text</x:ref> = &lt;obs-text, defined in [Part1], Section 3.2.3&gt; 
     1615<x:ref>opaque-tag</x:ref> = DQUOTE *etagc DQUOTE 
    15981616 
    15991617<x:ref>weak</x:ref> = %x57.2F ; W/ 
     
    18551873<section title="Since draft-ietf-httpbis-p4-conditional-17" anchor="changes.since.17"> 
    18561874<t> 
    1857   No changes yet. 
     1875  Closed issues: 
     1876  <list style="symbols">  
     1877    <t> 
     1878      <eref target="http://tools.ietf.org/wg/httpbis/trac/ticket/306"/>: 
     1879      "does etag value really use quoted-string" 
     1880    </t> 
     1881  </list> 
    18581882</t> 
    18591883</section> 
Note: See TracChangeset for help on using the changeset viewer.