Changeset 1581 for draft-ietf-httpbis/latest
- Timestamp:
- 11/03/12 09:32:11 (11 years ago)
- Location:
- draft-ietf-httpbis/latest
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
draft-ietf-httpbis/latest/httpbis.abnf
r1557 r1581 62 62 Warning = *( "," OWS ) warning-value *( OWS "," [ OWS warning-value ] ) 63 63 absolute-URI = <absolute-URI, defined in [RFC3986], Section 4.3> 64 absolute-form = absolute-URI 64 65 accept-ext = OWS ";" OWS token [ "=" word ] 65 66 accept-params = OWS ";" OWS "q=" qvalue *accept-ext 66 67 acceptable-ranges = ( *( "," OWS ) range-unit *( OWS "," [ OWS range-unit ] ) ) / "none" 67 68 asctime-date = day-name SP date3 SP time-of-day SP year 69 asterisk-form = "*" 68 70 attribute = token 69 71 auth-param = token BWS "=" BWS ( token / quoted-string ) 70 72 auth-scheme = token 71 73 authority = <authority, defined in [RFC3986], Section 3.2> 74 authority-form = authority 72 75 b64token = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"=" 73 76 byte-content-range-spec = bytes-unit SP byte-range-resp-spec "/" ( instance-length / "*" ) … … 164 167 obs-text = %x80-FF 165 168 opaque-tag = DQUOTE *etagc DQUOTE 169 origin-form = path-absolute [ "?" query ] 166 170 other-content-range-spec = other-range-unit SP other-range-resp-spec 167 171 other-range-resp-spec = *CHAR … … 199 203 relative-part = <relative-part, defined in [RFC3986], Section 4.2> 200 204 request-line = method SP request-target SP HTTP-version CRLF 201 request-target = "*" / absolute-URI / ( path-absolute [ "?" query ] ) / authority205 request-target = origin-form / absolute-form / authority-form / asterisk-form 202 206 rfc1123-date = day-name "," SP date1 SP time-of-day SP GMT 203 207 rfc850-date = day-name-l "," SP date2 SP time-of-day SP GMT -
draft-ietf-httpbis/latest/p1-messaging.html
r1580 r1581 460 460 } 461 461 @bottom-center { 462 content: "Expires September 1 1, 2012";462 content: "Expires September 12, 2012"; 463 463 } 464 464 @bottom-right { … … 510 510 <meta name="dct.creator" content="Reschke, J. F."> 511 511 <meta name="dct.identifier" content="urn:ietf:id:draft-ietf-httpbis-p1-messaging-latest"> 512 <meta name="dct.issued" scheme="ISO8601" content="2012-03-1 0">512 <meta name="dct.issued" scheme="ISO8601" content="2012-03-11"> 513 513 <meta name="dct.replaces" content="urn:ietf:rfc:2145"> 514 514 <meta name="dct.replaces" content="urn:ietf:rfc:2616"> … … 542 542 </tr> 543 543 <tr> 544 <td class="left">Expires: September 1 1, 2012</td>544 <td class="left">Expires: September 12, 2012</td> 545 545 <td class="right">HP</td> 546 546 </tr> … … 595 595 <tr> 596 596 <td class="left"></td> 597 <td class="right">March 1 0, 2012</td>597 <td class="right">March 11, 2012</td> 598 598 </tr> 599 599 </tbody> … … 628 628 in progress”. 629 629 </p> 630 <p>This Internet-Draft will expire on September 1 1, 2012.</p>630 <p>This Internet-Draft will expire on September 12, 2012.</p> 631 631 <h1><a id="rfc.copyrightnotice" href="#rfc.copyrightnotice">Copyright Notice</a></h1> 632 632 <p>Copyright © 2012 IETF Trust and the persons identified as the document authors. All rights reserved.</p> … … 1877 1877 both the method being requested and whether the request is to a proxy. 1878 1878 </p> 1879 <div id="rfc.figure.u.45"></div><pre class="inline"><span id="rfc.iref.g.79"></span> <a href="#request-target" class="smpl">request-target</a> = "*" 1880 / <a href="#uri" class="smpl">absolute-URI</a> 1881 / ( <a href="#uri" class="smpl">path-absolute</a> [ "?" <a href="#uri" class="smpl">query</a> ] ) 1882 / <a href="#uri" class="smpl">authority</a> 1879 <div id="rfc.figure.u.45"></div><pre class="inline"><span id="rfc.iref.g.79"></span><span id="rfc.iref.g.80"></span><span id="rfc.iref.g.81"></span><span id="rfc.iref.g.82"></span><span id="rfc.iref.g.83"></span> <a href="#request-target" class="smpl">request-target</a> = <a href="#origin-form" class="smpl">origin-form</a> 1880 / <a href="#absolute-form" class="smpl">absolute-form</a> 1881 / <a href="#authority-form" class="smpl">authority-form</a> 1882 / <a href="#asterisk-form" class="smpl">asterisk-form</a> 1883 1884 <a href="#origin-form" class="smpl">origin-form</a> = <a href="#uri" class="smpl">path-absolute</a> [ "?" <a href="#uri" class="smpl">query</a> ] 1885 <a href="#absolute-form" class="smpl">absolute-form</a> = <a href="#uri" class="smpl">absolute-URI</a> 1886 <a href="#authority-form" class="smpl">authority-form</a> = <a href="#uri" class="smpl">authority</a> 1887 <a href="#asterisk-form" class="smpl">asterisk-form</a> = "*" 1883 1888 </pre><div id="origin-form"> 1884 <p id="rfc.section.5.3.p.3"><span id="rfc.iref.o.3"></span> The most common form of request-target is th at used when making a request to an origin server ("origin form") to access a1885 resource identified by an "http" (<a href="#http.uri" title="http URI scheme">Section 2.7.1</a>) or "https" (<a href="#https.uri" title="https URI scheme">Section 2.7.2</a>) URI. In this case, the absolute path and query components of the URI <em class="bcp14">MUST</em> be transmitted as the request-target and the authority component (excluding any userinfo) <em class="bcp14">MUST</em> be transmitted in a Host header field. For example, a client wishing to retrieve a representation of the resource identified1886 as1889 <p id="rfc.section.5.3.p.3"><span id="rfc.iref.o.3"></span> The most common form of request-target is the origin-form. When making a request directly to an origin server, other than 1890 a CONNECT or server-wide OPTIONS request (as detailed below), a client <em class="bcp14">MUST</em> send only the absolute path and query components of the target URI as the request-target. If the target URI's path component 1891 is empty, then the client <em class="bcp14">MUST</em> send "/" as the path within the origin-form of request-target. A Host header field is also sent, as defined in <a href="#header.host" id="rfc.xref.header.host.1" title="Host">Section 5.4</a>, containing the target URI's authority component (excluding any userinfo). 1887 1892 </p> 1888 1893 </div> 1894 <p id="rfc.section.5.3.p.4">For example, a client wishing to retrieve a representation of the resource identified as</p> 1889 1895 <div id="rfc.figure.u.46"></div><pre>http://www.example.org/where?q=now 1890 </pre><p id="rfc.section.5.3.p. 5">directly from the origin server would open (or reuse) a TCP connection to port 80 of the host "www.example.org" and send the1896 </pre><p id="rfc.section.5.3.p.6">directly from the origin server would open (or reuse) a TCP connection to port 80 of the host "www.example.org" and send the 1891 1897 lines: 1892 1898 </p> 1893 1899 <div id="rfc.figure.u.47"></div><pre class="text2">GET /where?q=now HTTP/1.1 1894 1900 Host: www.example.org 1895 </pre><p id="rfc.section.5.3.p.7">followed by the remainder of the request. Note that the origin form of request-target always starts with an absolute path. 1896 If the target resource's URI path is empty, then an absolute path of "/" <em class="bcp14">MUST</em> be provided in the request-target. 1897 </p> 1898 <p id="rfc.section.5.3.p.8">If the request-target is percent-encoded (<a href="#RFC3986" id="rfc.xref.RFC3986.19"><cite title="Uniform Resource Identifier (URI): Generic Syntax">[RFC3986]</cite></a>, <a href="http://tools.ietf.org/html/rfc3986#section-2.1">Section 2.1</a>), the origin server <em class="bcp14">MUST</em> decode the request-target in order to properly interpret the request. Servers <em class="bcp14">SHOULD</em> respond to invalid request-targets with an appropriate status code. 1899 </p> 1900 <div id="absolute-URI-form"> 1901 <p id="rfc.section.5.3.p.9"><span id="rfc.iref.a.2"></span> The "absolute-URI" form of request-target is <em class="bcp14">REQUIRED</em> when the request is being made to a proxy. The proxy is requested to either forward the request or service it from a valid 1902 cache, and then return the response. Note that the proxy <em class="bcp14">MAY</em> forward the request on to another proxy or directly to the server specified by the absolute-URI. In order to avoid request 1903 loops, a proxy that forwards requests to other proxies <em class="bcp14">MUST</em> be able to recognize and exclude all of its own server names, including any aliases, local variations, or literal IP addresses. 1904 An example request-line would be: 1901 </pre><p id="rfc.section.5.3.p.8">followed by the remainder of the request message.</p> 1902 <div id="absolute-form"> 1903 <p id="rfc.section.5.3.p.9"><span id="rfc.iref.a.2"></span> When making a request to a proxy, other than a CONNECT or server-wide OPTIONS request (as detailed below), a client <em class="bcp14">MUST</em> send the target URI in absolute-form as the request-target. The proxy is requested to either service that request from a valid 1904 cache, if possible, or make the same request on the client's behalf to either the next inbound proxy server or directly to 1905 the origin server indicated by the request-target. In order to avoid request loops, a proxy that forwards requests to other 1906 proxies <em class="bcp14">MUST</em> be able to recognize and exclude all of its own server names, including any aliases, local variations, or literal IP addresses. 1905 1907 </p> 1906 1908 </div> 1909 <p id="rfc.section.5.3.p.10">An example absolute-form of request-line would be:</p> 1907 1910 <div id="rfc.figure.u.48"></div><pre class="text2">GET http://www.example.org/pub/WWW/TheProject.html HTTP/1.1 1908 </pre><p id="rfc.section.5.3.p.11">To allow for transition to absolute-URIs in all requests in future versions of HTTP, all HTTP/1.1 servers <em class="bcp14">MUST</em> accept the absolute-URI form in requests, even though HTTP/1.1 clients will only generate them in requests to proxies. 1909 </p> 1910 <p id="rfc.section.5.3.p.12">If a proxy receives a host name that is not a fully qualified domain name, it <em class="bcp14">MAY</em> add its domain to the host name it received. If a proxy receives a fully qualified domain name, the proxy <em class="bcp14">MUST NOT</em> change the host name. 1911 </pre><p id="rfc.section.5.3.p.12">To allow for transition to the absolute-form for all requests in some future version of HTTP, HTTP/1.1 servers <em class="bcp14">MUST</em> accept the absolute-form in requests, even though HTTP/1.1 clients will only send them in requests to proxies. 1911 1912 </p> 1912 1913 <div id="authority-form"> 1913 <p id="rfc.section.5.3.p.13"><span id="rfc.iref.a.3"></span> The "authority form" of request-target, which <em class="bcp14">MUST NOT</em> be used with any request method other than CONNECT, is used to establish a tunnel through one or more proxies (<a href="p2-semantics.html#CONNECT" title="CONNECT">Section 6.9</a> of <a href="#Part2" id="rfc.xref.Part2.9"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). For example,1914 <p id="rfc.section.5.3.p.13"><span id="rfc.iref.a.3"></span> The authority-form of request-target is only used for CONNECT requests (<a href="p2-semantics.html#CONNECT" title="CONNECT">Section 6.9</a> of <a href="#Part2" id="rfc.xref.Part2.9"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). When making a CONNECT request to establish a tunnel through one or more proxies, a client <em class="bcp14">MUST</em> send only the target URI's authority component (excluding any userinfo) as the request-target. For example, 1914 1915 </p> 1915 1916 </div> 1916 1917 <div id="rfc.figure.u.49"></div><pre class="text2">CONNECT www.example.com:80 HTTP/1.1 1917 </pre><div id="asteri x-form">1918 <p id="rfc.section.5.3.p.15"><span id="rfc.iref.a.4"></span> The asterisk ("*") form of request-target, which <em class="bcp14">MUST NOT</em> be used with any request method other than OPTIONS, means that the request applies to the server as a whole (the listening1919 process) rather than to a specific named resource at that server. For example,1918 </pre><div id="asterisk-form"> 1919 <p id="rfc.section.5.3.p.15"><span id="rfc.iref.a.4"></span> The asterisk-form of request-target is only used for a server-wide OPTIONS request (<a href="p2-semantics.html#OPTIONS" title="OPTIONS">Section 6.2</a> of <a href="#Part2" id="rfc.xref.Part2.10"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). When a client wishes to request OPTIONS for the server as a whole, as opposed to a specific named resource of that server, 1920 the client <em class="bcp14">MUST</em> send only "*" (%x2A) as the request-target. For example, 1920 1921 </p> 1921 1922 </div> 1922 1923 <div id="rfc.figure.u.50"></div><pre class="text2">OPTIONS * HTTP/1.1 1923 </pre><p id="rfc.section.5.3.p.17">If a proxy receives an OPTIONS request with an absolute- URI form of request-target in which the URI has an empty path and1924 no query component, then the last proxy on the request chain <em class="bcp14">MUST</em> usea request-target of "*" when it forwards the request to the indicated origin server.1924 </pre><p id="rfc.section.5.3.p.17">If a proxy receives an OPTIONS request with an absolute-form of request-target in which the URI has an empty path and no query 1925 component, then the last proxy on the request chain <em class="bcp14">MUST</em> send a request-target of "*" when it forwards the request to the indicated origin server. 1925 1926 </p> 1926 1927 <div id="rfc.figure.u.51"></div> … … 1930 1931 Host: www.example.org:8001 1931 1932 </pre> <p>after connecting to port 8001 of host "www.example.org".</p> 1932 <p id="rfc.section.5.3.p.20">A non-transforming proxy <em class="bcp14">MUST NOT</em> rewrite the "path-absolute" and "query" parts of the received request-target when forwarding it to the next inbound server, 1933 except as noted above to replace a null path-absolute with "/" or "*". 1933 <p id="rfc.section.5.3.p.20">If a proxy receives a request-target with a host name that is not a fully qualified domain name, it <em class="bcp14">MAY</em> add its domain to the host name it received when forwarding the request. A proxy <em class="bcp14">MUST NOT</em> change the host name if it is a fully qualified domain name. 1934 </p> 1935 <p id="rfc.section.5.3.p.21">A non-transforming proxy <em class="bcp14">MUST NOT</em> rewrite the "path-absolute" and "query" parts of the received request-target when forwarding it to the next inbound server, 1936 except as noted above to replace an empty path with "/" or "*". 1934 1937 </p> 1935 1938 <div id="rfc.iref.h.10"></div> 1936 1939 <div id="rfc.iref.h.11"></div> 1937 1940 <h2 id="rfc.section.5.4"><a href="#rfc.section.5.4">5.4</a> <a id="header.host" href="#header.host">Host</a></h2> 1938 <p id="rfc.section.5.4.p.1">The "Host" header field in a request provides the host and port information from the target resource's URI, enabling the origin1939 server to distinguish between resources while servicing requests for multiple host names on a single IP address. Since the1940 Host field-valueis critical information for handling a request, it <em class="bcp14">SHOULD</em> be sent as the first header field following the request-line.1941 </p> 1942 <div id="rfc.figure.u.53"></div><pre class="inline"><span id="rfc.iref.g.8 0"></span> <a href="#header.host" class="smpl">Host</a> = <a href="#uri" class="smpl">uri-host</a> [ ":" <a href="#uri" class="smpl">port</a> ] ; <a href="#http.uri" title="http URI scheme">Section 2.7.1</a>1943 </pre><p id="rfc.section.5.4.p.3">A client <em class="bcp14">MUST</em> send a Host header field in all HTTP/1.1 request messages. If the target resource's URI includes an authority component, then1944 the Host field-value <em class="bcp14">MUST</em> be identical to that authority component after excluding any userinfo (<a href="#http.uri" title="http URI scheme">Section 2.7.1</a>). If the authority component is missing or undefined for the target resource'sURI, then the Host header field <em class="bcp14">MUST</em> be sent with an empty field-value.1941 <p id="rfc.section.5.4.p.1">The "Host" header field in a request provides the host and port information from the target URI, enabling the origin server 1942 to distinguish among resources while servicing requests for multiple host names on a single IP address. Since the Host field-value 1943 is critical information for handling a request, it <em class="bcp14">SHOULD</em> be sent as the first header field following the request-line. 1944 </p> 1945 <div id="rfc.figure.u.53"></div><pre class="inline"><span id="rfc.iref.g.84"></span> <a href="#header.host" class="smpl">Host</a> = <a href="#uri" class="smpl">uri-host</a> [ ":" <a href="#uri" class="smpl">port</a> ] ; <a href="#http.uri" title="http URI scheme">Section 2.7.1</a> 1946 </pre><p id="rfc.section.5.4.p.3">A client <em class="bcp14">MUST</em> send a Host header field in all HTTP/1.1 request messages. If the target URI includes an authority component, then the Host 1947 field-value <em class="bcp14">MUST</em> be identical to that authority component after excluding any userinfo (<a href="#http.uri" title="http URI scheme">Section 2.7.1</a>). If the authority component is missing or undefined for the target URI, then the Host header field <em class="bcp14">MUST</em> be sent with an empty field-value. 1945 1948 </p> 1946 1949 <p id="rfc.section.5.4.p.4">For example, a GET request to the origin server for <http://www.example.org/pub/WWW/> would begin with:</p> 1947 1950 <div id="rfc.figure.u.54"></div><pre class="text2">GET /pub/WWW/ HTTP/1.1 1948 1951 Host: www.example.org 1949 </pre><p id="rfc.section.5.4.p.6">The Host header field <em class="bcp14">MUST</em> be sent in an HTTP/1.1 request even if the request-target is in the form of an absolute-URI, since this allows the Host information1952 </pre><p id="rfc.section.5.4.p.6">The Host header field <em class="bcp14">MUST</em> be sent in an HTTP/1.1 request even if the request-target is in the absolute-form, since this allows the Host information 1950 1953 to be forwarded through ancient HTTP/1.0 proxies that might not have implemented Host. 1951 1954 </p> 1952 <p id="rfc.section.5.4.p.7">When an HTTP/1.1 proxy receives a request with a request-target in the form of an absolute-URI, the proxy <em class="bcp14">MUST</em> ignore the received Host header field (if any) and instead replace it with the host information of the request-target. When1953 a proxy forwards a request, it <em class="bcp14">MUST</em> generate the Host header field based on the received absolute-URI rather than the received Host.1955 <p id="rfc.section.5.4.p.7">When an HTTP/1.1 proxy receives a request with an absolute-form of request-target, the proxy <em class="bcp14">MUST</em> ignore the received Host header field (if any) and instead replace it with the host information of the request-target. If 1956 the proxy forwards the request, it <em class="bcp14">MUST</em> generate a new Host field-value based on the received request-target rather than forward the received Host field-value. 1954 1957 </p> 1955 1958 <p id="rfc.section.5.4.p.8">Since the Host header field acts as an application-level routing mechanism, it is a frequent target for malware seeking to 1956 1959 poison a shared cache or redirect a request to an unintended server. An interception proxy is particularly vulnerable if it 1957 relies on the Host header field value for redirecting requests to internal servers, or for use as a cache key in a shared1958 cache,without first verifying that the intercepted connection is targeting a valid IP address for that host.1960 relies on the Host field-value for redirecting requests to internal servers, or for use as a cache key in a shared cache, 1961 without first verifying that the intercepted connection is targeting a valid IP address for that host. 1959 1962 </p> 1960 1963 <p id="rfc.section.5.4.p.9">A server <em class="bcp14">MUST</em> respond with a 400 (Bad Request) status code to any HTTP/1.1 request message that lacks a Host header field and to any request 1961 1964 message that contains more than one Host header field or a Host header field with an invalid field-value. 1962 </p>1963 <p id="rfc.section.5.4.p.10">See Sections <a href="#the.resource.identified.by.a.request" title="The Resource Identified by a Request">5.5</a> and <a href="#changes.to.simplify.multi-homed.web.servers.and.conserve.ip.addresses" title="Multi-homed Web Servers">A.1.1</a> for other requirements relating to Host.1964 1965 </p> 1965 1966 <h2 id="rfc.section.5.5"><a href="#rfc.section.5.5">5.5</a> <a id="the.resource.identified.by.a.request" href="#the.resource.identified.by.a.request">The Resource Identified by a Request</a></h2> … … 1986 1987 <div id="rfc.iref.e.1"></div> 1987 1988 <h2 id="rfc.section.5.6"><a href="#rfc.section.5.6">5.6</a> <a id="effective.request.uri" href="#effective.request.uri">Effective Request URI</a></h2> 1988 <p id="rfc.section.5.6.p.1">HTTP requests often do not carry the absolute URI (<a href="#RFC3986" id="rfc.xref.RFC3986. 20"><cite title="Uniform Resource Identifier (URI): Generic Syntax">[RFC3986]</cite></a>, <a href="http://tools.ietf.org/html/rfc3986#section-4.3">Section 4.3</a>) for the target resource; instead, the URI needs to be inferred from the request-target, Host header field, and connection1989 <p id="rfc.section.5.6.p.1">HTTP requests often do not carry the absolute URI (<a href="#RFC3986" id="rfc.xref.RFC3986.19"><cite title="Uniform Resource Identifier (URI): Generic Syntax">[RFC3986]</cite></a>, <a href="http://tools.ietf.org/html/rfc3986#section-4.3">Section 4.3</a>) for the target resource; instead, the URI needs to be inferred from the request-target, Host header field, and connection 1989 1990 context. The result of this process is called the "effective request URI". The "target resource" is the resource identified 1990 1991 by the effective request URI. … … 2000 2001 </li> 2001 2002 <li>the octet sequence "://",</li> 2002 <li>the authority component, as specified in the Host header field (<a href="#header.host" id="rfc.xref.header.host. 1" title="Host">Section 5.4</a>), and2003 <li>the authority component, as specified in the Host header field (<a href="#header.host" id="rfc.xref.header.host.2" title="Host">Section 5.4</a>), and 2003 2004 </li> 2004 2005 <li>the request-target obtained from the request-line, unless the request-target is just the asterisk "*".</li> … … 2026 2027 messages. Hence, it relies on the order of response arrival to correspond exactly to the order in which requests are made 2027 2028 on the same connection. More than one response message per request only occurs when one or more informational responses (1xx, 2028 see <a href="p2-semantics.html#status.1xx" title="Informational 1xx">Section 7.1</a> of <a href="#Part2" id="rfc.xref.Part2.1 0"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) precede a final response to the same request.2029 see <a href="p2-semantics.html#status.1xx" title="Informational 1xx">Section 7.1</a> of <a href="#Part2" id="rfc.xref.Part2.11"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) precede a final response to the same request. 2029 2030 </p> 2030 2031 <p id="rfc.section.5.7.p.2">A client that uses persistent connections and sends more than one request per connection <em class="bcp14">MUST</em> maintain a list of outstanding requests in the order sent on that connection and <em class="bcp14">MUST</em> associate each received response message to the highest ordered request that has not yet received a final (non-1xx) response. … … 2084 2085 <p id="rfc.section.6.1.2.2.p.2">Clients which assume persistent connections and pipeline immediately after connection establishment <em class="bcp14">SHOULD</em> be prepared to retry their connection if the first pipelined attempt fails. If a client does such a retry, it <em class="bcp14">MUST NOT</em> pipeline before it knows the connection is persistent. Clients <em class="bcp14">MUST</em> also be prepared to resend their requests if the server closes the connection before sending all of the corresponding responses. 2085 2086 </p> 2086 <p id="rfc.section.6.1.2.2.p.3">Clients <em class="bcp14">SHOULD NOT</em> pipeline requests using non-idempotent request methods or non-idempotent sequences of request methods (see <a href="p2-semantics.html#idempotent.methods" title="Idempotent Methods">Section 6.1.2</a> of <a href="#Part2" id="rfc.xref.Part2.1 1"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). Otherwise, a premature termination of the transport connection could lead to indeterminate results. A client wishing to2087 <p id="rfc.section.6.1.2.2.p.3">Clients <em class="bcp14">SHOULD NOT</em> pipeline requests using non-idempotent request methods or non-idempotent sequences of request methods (see <a href="p2-semantics.html#idempotent.methods" title="Idempotent Methods">Section 6.1.2</a> of <a href="#Part2" id="rfc.xref.Part2.12"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). Otherwise, a premature termination of the transport connection could lead to indeterminate results. A client wishing to 2087 2088 send a non-idempotent request <em class="bcp14">SHOULD</em> wait to send that request until it has received the response status line for the previous request. 2088 2089 </p> … … 2183 2184 <h3 id="rfc.section.6.1.5"><a href="#rfc.section.6.1.5">6.1.5</a> <a id="persistent.retrying.requests" href="#persistent.retrying.requests">Retrying Requests</a></h3> 2184 2185 <p id="rfc.section.6.1.5.p.1">Senders can close the transport connection at any time. Therefore, clients, servers, and proxies <em class="bcp14">MUST</em> be able to recover from asynchronous close events. Client software <em class="bcp14">MAY</em> reopen the transport connection and retransmit the aborted sequence of requests without user interaction so long as the request 2185 sequence is idempotent (see <a href="p2-semantics.html#idempotent.methods" title="Idempotent Methods">Section 6.1.2</a> of <a href="#Part2" id="rfc.xref.Part2.1 2"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). Non-idempotent request methods or sequences <em class="bcp14">MUST NOT</em> be automatically retried, although user agents <em class="bcp14">MAY</em> offer a human operator the choice of retrying the request(s). Confirmation by user-agent software with semantic understanding2186 sequence is idempotent (see <a href="p2-semantics.html#idempotent.methods" title="Idempotent Methods">Section 6.1.2</a> of <a href="#Part2" id="rfc.xref.Part2.13"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). Non-idempotent request methods or sequences <em class="bcp14">MUST NOT</em> be automatically retried, although user agents <em class="bcp14">MAY</em> offer a human operator the choice of retrying the request(s). Confirmation by user-agent software with semantic understanding 2186 2187 of the application <em class="bcp14">MAY</em> substitute for user confirmation. The automatic retry <em class="bcp14">SHOULD NOT</em> be repeated if the second sequence of requests fails. 2187 2188 </p> … … 2196 2197 </p> 2197 2198 <h3 id="rfc.section.6.2.3"><a href="#rfc.section.6.2.3">6.2.3</a> <a id="use.of.the.100.status" href="#use.of.the.100.status">Use of the 100 (Continue) Status</a></h3> 2198 <p id="rfc.section.6.2.3.p.1">The purpose of the 100 (Continue) status code (see <a href="p2-semantics.html#status.100" title="100 Continue">Section 7.1.1</a> of <a href="#Part2" id="rfc.xref.Part2.1 3"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) is to allow a client that is sending a request message with a request body to determine if the origin server is willing2199 <p id="rfc.section.6.2.3.p.1">The purpose of the 100 (Continue) status code (see <a href="p2-semantics.html#status.100" title="100 Continue">Section 7.1.1</a> of <a href="#Part2" id="rfc.xref.Part2.14"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) is to allow a client that is sending a request message with a request body to determine if the origin server is willing 2199 2200 to accept the request (based on the request header fields) before the client sends the request body. In some cases, it might 2200 2201 either be inappropriate or highly inefficient for the client to send the body if the server will reject the message without … … 2203 2204 <p id="rfc.section.6.2.3.p.2">Requirements for HTTP/1.1 clients: </p> 2204 2205 <ul> 2205 <li>If a client will wait for a 100 (Continue) response before sending the request body, it <em class="bcp14">MUST</em> send an Expect header field (<a href="p2-semantics.html#header.expect" title="Expect">Section 10.3</a> of <a href="#Part2" id="rfc.xref.Part2.1 4"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) with the "100-continue" expectation.2206 </li> 2207 <li>A client <em class="bcp14">MUST NOT</em> send an Expect header field (<a href="p2-semantics.html#header.expect" title="Expect">Section 10.3</a> of <a href="#Part2" id="rfc.xref.Part2.1 5"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) with the "100-continue" expectation if it does not intend to send a request body.2206 <li>If a client will wait for a 100 (Continue) response before sending the request body, it <em class="bcp14">MUST</em> send an Expect header field (<a href="p2-semantics.html#header.expect" title="Expect">Section 10.3</a> of <a href="#Part2" id="rfc.xref.Part2.15"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) with the "100-continue" expectation. 2207 </li> 2208 <li>A client <em class="bcp14">MUST NOT</em> send an Expect header field (<a href="p2-semantics.html#header.expect" title="Expect">Section 10.3</a> of <a href="#Part2" id="rfc.xref.Part2.16"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) with the "100-continue" expectation if it does not intend to send a request body. 2208 2209 </li> 2209 2210 </ul> … … 2249 2250 <li>A proxy <em class="bcp14">MUST NOT</em> forward a 100 (Continue) response if the request message was received from an HTTP/1.0 (or earlier) client and did not include 2250 2251 an Expect header field with the "100-continue" expectation. This requirement overrides the general rule for forwarding of 2251 1xx responses (see <a href="p2-semantics.html#status.1xx" title="Informational 1xx">Section 7.1</a> of <a href="#Part2" id="rfc.xref.Part2.1 6"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>).2252 1xx responses (see <a href="p2-semantics.html#status.1xx" title="Informational 1xx">Section 7.1</a> of <a href="#Part2" id="rfc.xref.Part2.17"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). 2252 2253 </li> 2253 2254 </ul> … … 2295 2296 <tr> 2296 2297 <td class="left">Host</td> 2297 <td class="left"><a href="#header.host" id="rfc.xref.header.host. 2" title="Host">Section 5.4</a></td>2298 <td class="left"><a href="#header.host" id="rfc.xref.header.host.3" title="Host">Section 5.4</a></td> 2298 2299 </tr> 2299 2300 <tr> … … 2331 2332 </p> 2332 2333 <p id="rfc.section.8.1.p.2">The Connection header field's value has the following grammar:</p> 2333 <div id="rfc.figure.u.57"></div><pre class="inline"><span id="rfc.iref.g.8 1"></span><span id="rfc.iref.g.82"></span> <a href="#header.connection" class="smpl">Connection</a> = 1#<a href="#header.connection" class="smpl">connection-token</a>2334 <div id="rfc.figure.u.57"></div><pre class="inline"><span id="rfc.iref.g.85"></span><span id="rfc.iref.g.86"></span> <a href="#header.connection" class="smpl">Connection</a> = 1#<a href="#header.connection" class="smpl">connection-token</a> 2334 2335 <a href="#header.connection" class="smpl">connection-token</a> = <a href="#rule.token.separators" class="smpl">token</a> 2335 2336 </pre><p id="rfc.section.8.1.p.4">A proxy or gateway <em class="bcp14">MUST</em> parse a received Connection header field before a message is forwarded and, for each connection-token in this field, remove … … 2367 2368 server chooses to switch protocols. Servers can use it to indicate what protocols they are willing to switch to. 2368 2369 </p> 2369 <div id="rfc.figure.u.59"></div><pre class="inline"><span id="rfc.iref.g.8 3"></span> <a href="#header.upgrade" class="smpl">Upgrade</a> = 1#<a href="#header.upgrade" class="smpl">protocol</a>2370 <div id="rfc.figure.u.59"></div><pre class="inline"><span id="rfc.iref.g.87"></span> <a href="#header.upgrade" class="smpl">Upgrade</a> = 1#<a href="#header.upgrade" class="smpl">protocol</a> 2370 2371 2371 2372 <a href="#header.upgrade" class="smpl">protocol</a> = <a href="#header.upgrade" class="smpl">protocol-name</a> ["/" <a href="#header.upgrade" class="smpl">protocol-version</a>] … … 2389 2390 </p> 2390 2391 <p id="rfc.section.8.2.p.8">The Upgrade header field cannot be used to indicate a switch to a protocol on a different connection. For that purpose, it 2391 is more appropriate to use a 3xx redirection response (<a href="p2-semantics.html#status.3xx" title="Redirection 3xx">Section 7.3</a> of <a href="#Part2" id="rfc.xref.Part2.1 7"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>).2392 is more appropriate to use a 3xx redirection response (<a href="p2-semantics.html#status.3xx" title="Redirection 3xx">Section 7.3</a> of <a href="#Part2" id="rfc.xref.Part2.18"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). 2392 2393 </p> 2393 2394 <p id="rfc.section.8.2.p.9">Servers <em class="bcp14">MUST</em> include the "Upgrade" header field in 101 (Switching Protocols) responses to indicate which protocol(s) are being switched … … 2429 2430 of all senders along the request/response chain. 2430 2431 </p> 2431 <div id="rfc.figure.u.61"></div><pre class="inline"><span id="rfc.iref.g.8 4"></span><span id="rfc.iref.g.85"></span><span id="rfc.iref.g.86"></span><span id="rfc.iref.g.87"></span><span id="rfc.iref.g.88"></span><span id="rfc.iref.g.89"></span> <a href="#header.via" class="smpl">Via</a> = 1#( <a href="#header.via" class="smpl">received-protocol</a> <a href="#rule.whitespace" class="smpl">RWS</a> <a href="#header.via" class="smpl">received-by</a>2432 <div id="rfc.figure.u.61"></div><pre class="inline"><span id="rfc.iref.g.88"></span><span id="rfc.iref.g.89"></span><span id="rfc.iref.g.90"></span><span id="rfc.iref.g.91"></span><span id="rfc.iref.g.92"></span><span id="rfc.iref.g.93"></span> <a href="#header.via" class="smpl">Via</a> = 1#( <a href="#header.via" class="smpl">received-protocol</a> <a href="#rule.whitespace" class="smpl">RWS</a> <a href="#header.via" class="smpl">received-by</a> 2432 2433 [ <a href="#rule.whitespace" class="smpl">RWS</a> <a href="#rule.comment" class="smpl">comment</a> ] ) 2433 2434 <a href="#header.via" class="smpl">received-protocol</a> = [ <a href="#header.upgrade" class="smpl">protocol-name</a> "/" ] <a href="#header.upgrade" class="smpl">protocol-version</a> … … 2498 2499 <td class="left">http</td> 2499 2500 <td class="left">standard</td> 2500 <td class="left"> <a href="#header.host" id="rfc.xref.header.host. 3" title="Host">Section 5.4</a>2501 <td class="left"> <a href="#header.host" id="rfc.xref.header.host.4" title="Host">Section 5.4</a> 2501 2502 </td> 2502 2503 </tr> … … 2809 2810 that most implementations will choose substantially higher limits. 2810 2811 </p> 2811 <p id="rfc.section.10.6.p.3">This specification also provides a way for servers to reject messages that have request-targets that are too long (<a href="p2-semantics.html#status.414" title="414 URI Too Long">Section 7.4.12</a> of <a href="#Part2" id="rfc.xref.Part2.1 8"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) or request entities that are too large (<a href="p2-semantics.html#status.4xx" title="Client Error 4xx">Section 7.4</a> of <a href="#Part2" id="rfc.xref.Part2.19"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>).2812 <p id="rfc.section.10.6.p.3">This specification also provides a way for servers to reject messages that have request-targets that are too long (<a href="p2-semantics.html#status.414" title="414 URI Too Long">Section 7.4.12</a> of <a href="#Part2" id="rfc.xref.Part2.19"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>) or request entities that are too large (<a href="p2-semantics.html#status.4xx" title="Client Error 4xx">Section 7.4</a> of <a href="#Part2" id="rfc.xref.Part2.20"><cite title="HTTP/1.1, part 2: Message Semantics">[Part2]</cite></a>). 2812 2813 </p> 2813 2814 <p id="rfc.section.10.6.p.4">Other fields (including but not limited to request methods, response status phrases, header field-names, and body chunks) <em class="bcp14">SHOULD</em> be limited by implementations carefully, so as to not impede interoperability. … … 3077 3078 <p id="rfc.section.A.1.p.1">This section summarizes major differences between versions HTTP/1.0 and HTTP/1.1.</p> 3078 3079 <h3 id="rfc.section.A.1.1"><a href="#rfc.section.A.1.1">A.1.1</a> <a id="changes.to.simplify.multi-homed.web.servers.and.conserve.ip.addresses" href="#changes.to.simplify.multi-homed.web.servers.and.conserve.ip.addresses">Multi-homed Web Servers</a></h3> 3079 <p id="rfc.section.A.1.1.p.1">The requirements that clients and servers support the Host header field (<a href="#header.host" id="rfc.xref.header.host. 4" title="Host">Section 5.4</a>), report an error if it is missing from an HTTP/1.1 request, and accept absolute URIs (<a href="#request-target" title="Request Target">Section 5.3</a>) are among the most important changes defined by HTTP/1.1.3080 <p id="rfc.section.A.1.1.p.1">The requirements that clients and servers support the Host header field (<a href="#header.host" id="rfc.xref.header.host.5" title="Host">Section 5.4</a>), report an error if it is missing from an HTTP/1.1 request, and accept absolute URIs (<a href="#request-target" title="Request Target">Section 5.3</a>) are among the most important changes defined by HTTP/1.1. 3080 3081 </p> 3081 3082 <p id="rfc.section.A.1.1.p.2">Older HTTP/1.0 clients assumed a one-to-one relationship of IP addresses and servers; there was no other established mechanism … … 3175 3176 3176 3177 <a href="#uri" class="smpl">absolute-URI</a> = <absolute-URI, defined in [RFC3986], Section 4.3> 3178 <a href="#absolute-form" class="smpl">absolute-form</a> = absolute-URI 3179 <a href="#asterisk-form" class="smpl">asterisk-form</a> = "*" 3177 3180 <a href="#rule.parameter" class="smpl">attribute</a> = token 3178 3181 <a href="#uri" class="smpl">authority</a> = <authority, defined in [RFC3986], Section 3.2> 3182 <a href="#authority-form" class="smpl">authority-form</a> = authority 3179 3183 3180 3184 <a href="#chunked.encoding" class="smpl">chunk</a> = chunk-size [ chunk-ext ] CRLF chunk-data CRLF … … 3207 3211 <a href="#header.fields" class="smpl">obs-fold</a> = CRLF ( SP / HTAB ) 3208 3212 <a href="#rule.quoted-string" class="smpl">obs-text</a> = %x80-FF 3213 <a href="#origin-form" class="smpl">origin-form</a> = path-absolute [ "?" query ] 3209 3214 3210 3215 <a href="#uri" class="smpl">partial-URI</a> = relative-part [ "?" query ] … … 3235 3240 <a href="#uri" class="smpl">relative-part</a> = <relative-part, defined in [RFC3986], Section 4.2> 3236 3241 <a href="#request.line" class="smpl">request-line</a> = method SP request-target SP HTTP-version CRLF 3237 <a href="#request-target" class="smpl">request-target</a> = "*" / absolute-URI / ( path-absolute [ "?" query ] )3238 / authority3242 <a href="#request-target" class="smpl">request-target</a> = origin-form / absolute-form / authority-form / 3243 asterisk-form 3239 3244 3240 3245 <a href="#rule.token.separators" class="smpl">special</a> = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" / … … 3669 3674 <ul class="ind"> 3670 3675 <li><a id="rfc.index.A" href="#rfc.index.A"><b>A</b></a><ul> 3671 <li>absolute- URIform (of request-target) <a href="#rfc.iref.a.2">5.3</a></li>3676 <li>absolute-form (of request-target) <a href="#rfc.iref.a.2">5.3</a></li> 3672 3677 <li>accelerator <a href="#rfc.iref.a.1"><b>2.3</b></a></li> 3673 3678 <li>application/http Media Type <a href="#rfc.iref.a.5"><b>9.3.2</b></a></li> 3674 <li>asterisk 3675 <li>authority 3679 <li>asterisk-form (of request-target) <a href="#rfc.iref.a.4">5.3</a></li> 3680 <li>authority-form (of request-target) <a href="#rfc.iref.a.3">5.3</a></li> 3676 3681 </ul> 3677 3682 </li> … … 3713 3718 <li><tt>Grammar</tt> 3714 3719 <ul> 3720 <li><tt>absolute-form</tt> <a href="#rfc.iref.g.81"><b>5.3</b></a></li> 3715 3721 <li><tt>absolute-URI</tt> <a href="#rfc.iref.g.17"><b>2.7</b></a></li> 3716 3722 <li>ALPHA <a href="#rfc.iref.g.1"><b>1.2</b></a></li> 3723 <li><tt>asterisk-form</tt> <a href="#rfc.iref.g.83"><b>5.3</b></a></li> 3717 3724 <li><tt>attribute</tt> <a href="#rfc.iref.g.57"><b>4</b></a></li> 3718 3725 <li><tt>authority</tt> <a href="#rfc.iref.g.18"><b>2.7</b></a></li> 3726 <li><tt>authority-form</tt> <a href="#rfc.iref.g.82"><b>5.3</b></a></li> 3719 3727 <li><tt>BWS</tt> <a href="#rfc.iref.g.39"><b>3.2.1</b></a></li> 3720 3728 <li><tt>chunk</tt> <a href="#rfc.iref.g.62"><b>4.1</b></a></li> … … 3726 3734 <li><tt>chunked-body</tt> <a href="#rfc.iref.g.61"><b>4.1</b></a></li> 3727 3735 <li><tt>comment</tt> <a href="#rfc.iref.g.48"><b>3.2.4</b></a></li> 3728 <li><tt>Connection</tt> <a href="#rfc.iref.g.8 1"><b>8.1</b></a></li>3729 <li><tt>connection-token</tt> <a href="#rfc.iref.g.8 2"><b>8.1</b></a></li>3736 <li><tt>Connection</tt> <a href="#rfc.iref.g.85"><b>8.1</b></a></li> 3737 <li><tt>connection-token</tt> <a href="#rfc.iref.g.86"><b>8.1</b></a></li> 3730 3738 <li><tt>Content-Length</tt> <a href="#rfc.iref.g.53"><b>3.3.2</b></a></li> 3731 3739 <li>CR <a href="#rfc.iref.g.2"><b>1.2</b></a></li> … … 3742 3750 <li><tt>header-field</tt> <a href="#rfc.iref.g.32"><b>3.2</b></a></li> 3743 3751 <li>HEXDIG <a href="#rfc.iref.g.7"><b>1.2</b></a></li> 3744 <li><tt>Host</tt> <a href="#rfc.iref.g.8 0"><b>5.4</b></a></li>3752 <li><tt>Host</tt> <a href="#rfc.iref.g.84"><b>5.4</b></a></li> 3745 3753 <li>HTAB <a href="#rfc.iref.g.8"><b>1.2</b></a></li> 3746 3754 <li><tt>HTTP-message</tt> <a href="#rfc.iref.g.25"><b>3</b></a></li> … … 3756 3764 <li><tt>obs-text</tt> <a href="#rfc.iref.g.46"><b>3.2.4</b></a></li> 3757 3765 <li>OCTET <a href="#rfc.iref.g.10"><b>1.2</b></a></li> 3766 <li><tt>origin-form</tt> <a href="#rfc.iref.g.80"><b>5.3</b></a></li> 3758 3767 <li><tt>OWS</tt> <a href="#rfc.iref.g.37"><b>3.2.1</b></a></li> 3759 3768 <li><tt>path-absolute</tt> <a href="#rfc.iref.g.19"><b>2.7</b></a></li> 3760 3769 <li><tt>port</tt> <a href="#rfc.iref.g.20"><b>2.7</b></a></li> 3761 <li><tt>protocol-name</tt> <a href="#rfc.iref.g. 86"><b>8.3</b></a></li>3762 <li><tt>protocol-version</tt> <a href="#rfc.iref.g. 87"><b>8.3</b></a></li>3763 <li><tt>pseudonym</tt> <a href="#rfc.iref.g. 89"><b>8.3</b></a></li>3770 <li><tt>protocol-name</tt> <a href="#rfc.iref.g.90"><b>8.3</b></a></li> 3771 <li><tt>protocol-version</tt> <a href="#rfc.iref.g.91"><b>8.3</b></a></li> 3772 <li><tt>pseudonym</tt> <a href="#rfc.iref.g.93"><b>8.3</b></a></li> 3764 3773 <li><tt>qdtext</tt> <a href="#rfc.iref.g.45"><b>3.2.4</b></a></li> 3765 3774 <li><tt>qdtext-nf</tt> <a href="#rfc.iref.g.71"><b>4.1</b></a></li> … … 3771 3780 <li><tt>qvalue</tt> <a href="#rfc.iref.g.77"><b>4.4.1</b></a></li> 3772 3781 <li><tt>reason-phrase</tt> <a href="#rfc.iref.g.31"><b>3.1.2</b></a></li> 3773 <li><tt>received-by</tt> <a href="#rfc.iref.g. 88"><b>8.3</b></a></li>3774 <li><tt>received-protocol</tt> <a href="#rfc.iref.g.8 5"><b>8.3</b></a></li>3782 <li><tt>received-by</tt> <a href="#rfc.iref.g.92"><b>8.3</b></a></li> 3783 <li><tt>received-protocol</tt> <a href="#rfc.iref.g.89"><b>8.3</b></a></li> 3775 3784 <li><tt>request-line</tt> <a href="#rfc.iref.g.27"><b>3.1.1</b></a></li> 3776 3785 <li><tt>request-target</tt> <a href="#rfc.iref.g.79"><b>5.3</b></a></li> … … 3793 3802 <li><tt>transfer-extension</tt> <a href="#rfc.iref.g.55"><b>4</b></a></li> 3794 3803 <li><tt>transfer-parameter</tt> <a href="#rfc.iref.g.56"><b>4</b></a></li> 3795 <li><tt>Upgrade</tt> <a href="#rfc.iref.g.8 3"><b>8.2</b></a></li>3804 <li><tt>Upgrade</tt> <a href="#rfc.iref.g.87"><b>8.2</b></a></li> 3796 3805 <li><tt>uri-host</tt> <a href="#rfc.iref.g.22"><b>2.7</b></a></li> 3797 3806 <li><tt>URI-reference</tt> <a href="#rfc.iref.g.16"><b>2.7</b></a></li> 3798 3807 <li><tt>value</tt> <a href="#rfc.iref.g.58"><b>4</b></a></li> 3799 3808 <li>VCHAR <a href="#rfc.iref.g.12"><b>1.2</b></a></li> 3800 <li><tt>Via</tt> <a href="#rfc.iref.g.8 4"><b>8.3</b></a></li>3809 <li><tt>Via</tt> <a href="#rfc.iref.g.88"><b>8.3</b></a></li> 3801 3810 <li><tt>word</tt> <a href="#rfc.iref.g.40"><b>3.2.4</b></a></li> 3802 3811 </ul> … … 3811 3820 <li>Connection <a href="#rfc.xref.header.connection.1">2.3</a>, <a href="#rfc.xref.header.connection.2">2.6</a>, <a href="#rfc.xref.header.connection.3">3.2</a>, <a href="#rfc.xref.header.connection.4">4.4</a>, <a href="#rfc.xref.header.connection.5">6.1.2</a>, <a href="#rfc.xref.header.connection.6">6.1.3</a>, <a href="#rfc.xref.header.connection.7">6.1.3.1</a>, <a href="#rfc.xref.header.connection.8">8</a>, <a href="#rfc.iref.h.12"><b>8.1</b></a>, <a href="#rfc.xref.header.connection.9">8.2</a>, <a href="#rfc.xref.header.connection.10">9.1</a>, <a href="#rfc.xref.header.connection.11">9.1</a>, <a href="#rfc.xref.header.connection.12">A.2</a></li> 3812 3821 <li>Content-Length <a href="#rfc.iref.h.7"><b>3.3.2</b></a>, <a href="#rfc.xref.header.content-length.1">3.3.2</a>, <a href="#rfc.xref.header.content-length.2">8</a>, <a href="#rfc.xref.header.content-length.3">9.1</a></li> 3813 <li>Host <a href="#rfc. iref.h.11"><b>5.4</b></a>, <a href="#rfc.xref.header.host.1">5.6</a>, <a href="#rfc.xref.header.host.2">8</a>, <a href="#rfc.xref.header.host.3">9.1</a>, <a href="#rfc.xref.header.host.4">A.1.1</a></li>3822 <li>Host <a href="#rfc.xref.header.host.1">5.3</a>, <a href="#rfc.iref.h.11"><b>5.4</b></a>, <a href="#rfc.xref.header.host.2">5.6</a>, <a href="#rfc.xref.header.host.3">8</a>, <a href="#rfc.xref.header.host.4">9.1</a>, <a href="#rfc.xref.header.host.5">A.1.1</a></li> 3814 3823 <li>TE <a href="#rfc.xref.header.te.1">4</a>, <a href="#rfc.xref.header.te.2">4.1</a>, <a href="#rfc.iref.h.8"><b>4.4</b></a>, <a href="#rfc.xref.header.te.3">4.4.1</a>, <a href="#rfc.xref.header.te.4">8</a>, <a href="#rfc.xref.header.te.5">9.1</a></li> 3815 3824 <li>Trailer <a href="#rfc.xref.header.trailer.1">4.1</a>, <a href="#rfc.iref.h.9"><b>4.5</b></a>, <a href="#rfc.xref.header.trailer.2">8</a>, <a href="#rfc.xref.header.trailer.3">9.1</a></li> … … 3821 3830 <li>header section <a href="#rfc.iref.h.3">3</a></li> 3822 3831 <li>headers <a href="#rfc.iref.h.4">3</a></li> 3823 <li>Host header field <a href="#rfc. iref.h.10"><b>5.4</b></a>, <a href="#rfc.xref.header.host.1">5.6</a>, <a href="#rfc.xref.header.host.2">8</a>, <a href="#rfc.xref.header.host.3">9.1</a>, <a href="#rfc.xref.header.host.4">A.1.1</a></li>3832 <li>Host header field <a href="#rfc.xref.header.host.1">5.3</a>, <a href="#rfc.iref.h.10"><b>5.4</b></a>, <a href="#rfc.xref.header.host.2">5.6</a>, <a href="#rfc.xref.header.host.3">8</a>, <a href="#rfc.xref.header.host.4">9.1</a>, <a href="#rfc.xref.header.host.5">A.1.1</a></li> 3824 3833 <li>http URI scheme <a href="#rfc.iref.h.1"><b>2.7.1</b></a></li> 3825 3834 <li>https URI scheme <a href="#rfc.iref.h.2">2.7.2</a></li> … … 3855 3864 </li> 3856 3865 <li><a id="rfc.index.O" href="#rfc.index.O"><b>O</b></a><ul> 3857 <li>origin form (of request-target) <a href="#rfc.iref.o.3">5.3</a></li>3858 3866 <li>origin server <a href="#rfc.iref.o.1"><b>2.1</b></a></li> 3867 <li>origin-form (of request-target) <a href="#rfc.iref.o.3">5.3</a></li> 3859 3868 <li>outbound <a href="#rfc.iref.o.2"><b>2.3</b></a></li> 3860 3869 </ul> … … 3862 3871 <li><a id="rfc.index.P" href="#rfc.index.P"><b>P</b></a><ul> 3863 3872 <li><em>Pad1995</em> <a href="#rfc.xref.Pad1995.1">6.1.1</a>, <a href="#Pad1995"><b>12.2</b></a></li> 3864 <li><em>Part2</em> <a href="#rfc.xref.Part2.1">2.3</a>, <a href="#rfc.xref.Part2.2">2.7.1</a>, <a href="#rfc.xref.Part2.3">3.1.1</a>, <a href="#rfc.xref.Part2.4">3.1.1</a>, <a href="#rfc.xref.Part2.5">3.1.2</a>, <a href="#rfc.xref.Part2.6">3.2</a>, <a href="#rfc.xref.Part2.7">3.2</a>, <a href="#rfc.xref.Part2.8">5.1</a>, <a href="#rfc.xref.Part2.9">5.3</a>, <a href="#rfc.xref.Part2.10">5. 7</a>, <a href="#rfc.xref.Part2.11">6.1.2.2</a>, <a href="#rfc.xref.Part2.12">6.1.5</a>, <a href="#rfc.xref.Part2.13">6.2.3</a>, <a href="#rfc.xref.Part2.14">6.2.3</a>, <a href="#rfc.xref.Part2.15">6.2.3</a>, <a href="#rfc.xref.Part2.16">6.2.3</a>, <a href="#rfc.xref.Part2.17">8.2</a>, <a href="#rfc.xref.Part2.18">10.6</a>, <a href="#rfc.xref.Part2.19">10.6</a>, <a href="#Part2"><b>12.1</b></a><ul>3873 <li><em>Part2</em> <a href="#rfc.xref.Part2.1">2.3</a>, <a href="#rfc.xref.Part2.2">2.7.1</a>, <a href="#rfc.xref.Part2.3">3.1.1</a>, <a href="#rfc.xref.Part2.4">3.1.1</a>, <a href="#rfc.xref.Part2.5">3.1.2</a>, <a href="#rfc.xref.Part2.6">3.2</a>, <a href="#rfc.xref.Part2.7">3.2</a>, <a href="#rfc.xref.Part2.8">5.1</a>, <a href="#rfc.xref.Part2.9">5.3</a>, <a href="#rfc.xref.Part2.10">5.3</a>, <a href="#rfc.xref.Part2.11">5.7</a>, <a href="#rfc.xref.Part2.12">6.1.2.2</a>, <a href="#rfc.xref.Part2.13">6.1.5</a>, <a href="#rfc.xref.Part2.14">6.2.3</a>, <a href="#rfc.xref.Part2.15">6.2.3</a>, <a href="#rfc.xref.Part2.16">6.2.3</a>, <a href="#rfc.xref.Part2.17">6.2.3</a>, <a href="#rfc.xref.Part2.18">8.2</a>, <a href="#rfc.xref.Part2.19">10.6</a>, <a href="#rfc.xref.Part2.20">10.6</a>, <a href="#Part2"><b>12.1</b></a><ul> 3865 3874 <li><em>Section 2</em> <a href="#rfc.xref.Part2.3">3.1.1</a></li> 3866 3875 <li><em>Section 3.1</em> <a href="#rfc.xref.Part2.7">3.2</a></li> 3867 3876 <li><em>Section 4</em> <a href="#rfc.xref.Part2.2">2.7.1</a>, <a href="#rfc.xref.Part2.5">3.1.2</a></li> 3868 <li><em>Section 6.1.2</em> <a href="#rfc.xref.Part2.11">6.1.2.2</a>, <a href="#rfc.xref.Part2.12">6.1.5</a></li> 3877 <li><em>Section 6.1.2</em> <a href="#rfc.xref.Part2.12">6.1.2.2</a>, <a href="#rfc.xref.Part2.13">6.1.5</a></li> 3878 <li><em>Section 6.2</em> <a href="#rfc.xref.Part2.10">5.3</a></li> 3869 3879 <li><em>Section 6.9</em> <a href="#rfc.xref.Part2.9">5.3</a></li> 3870 <li><em>Section 7.1</em> <a href="#rfc.xref.Part2.1 0">5.7</a>, <a href="#rfc.xref.Part2.16">6.2.3</a></li>3871 <li><em>Section 7.1.1</em> <a href="#rfc.xref.Part2.1 3">6.2.3</a></li>3880 <li><em>Section 7.1</em> <a href="#rfc.xref.Part2.11">5.7</a>, <a href="#rfc.xref.Part2.17">6.2.3</a></li> 3881 <li><em>Section 7.1.1</em> <a href="#rfc.xref.Part2.14">6.2.3</a></li> 3872 3882 <li><em>Section 7.2.4</em> <a href="#rfc.xref.Part2.1">2.3</a></li> 3873 <li><em>Section 7.3</em> <a href="#rfc.xref.Part2.1 7">8.2</a></li>3874 <li><em>Section 7.4</em> <a href="#rfc.xref.Part2. 19">10.6</a></li>3875 <li><em>Section 7.4.12</em> <a href="#rfc.xref.Part2.4">3.1.1</a>, <a href="#rfc.xref.Part2.1 8">10.6</a></li>3883 <li><em>Section 7.3</em> <a href="#rfc.xref.Part2.18">8.2</a></li> 3884 <li><em>Section 7.4</em> <a href="#rfc.xref.Part2.20">10.6</a></li> 3885 <li><em>Section 7.4.12</em> <a href="#rfc.xref.Part2.4">3.1.1</a>, <a href="#rfc.xref.Part2.19">10.6</a></li> 3876 3886 <li><em>Section 10.2</em> <a href="#rfc.xref.Part2.6">3.2</a></li> 3877 <li><em>Section 10.3</em> <a href="#rfc.xref.Part2.1 4">6.2.3</a>, <a href="#rfc.xref.Part2.15">6.2.3</a></li>3887 <li><em>Section 10.3</em> <a href="#rfc.xref.Part2.15">6.2.3</a>, <a href="#rfc.xref.Part2.16">6.2.3</a></li> 3878 3888 </ul> 3879 3889 </li> … … 3929 3939 <li><em>RFC3040</em> <a href="#rfc.xref.RFC3040.1">2.3</a>, <a href="#RFC3040"><b>12.2</b></a></li> 3930 3940 <li><em>RFC3864</em> <a href="#rfc.xref.RFC3864.1">9.1</a>, <a href="#RFC3864"><b>12.2</b></a></li> 3931 <li><em>RFC3986</em> <a href="#rfc.xref.RFC3986.1">1</a>, <a href="#rfc.xref.RFC3986.2">2.7</a>, <a href="#rfc.xref.RFC3986.3">2.7</a>, <a href="#rfc.xref.RFC3986.4">2.7</a>, <a href="#rfc.xref.RFC3986.5">2.7</a>, <a href="#rfc.xref.RFC3986.6">2.7</a>, <a href="#rfc.xref.RFC3986.7">2.7</a>, <a href="#rfc.xref.RFC3986.8">2.7</a>, <a href="#rfc.xref.RFC3986.9">2.7</a>, <a href="#rfc.xref.RFC3986.10">2.7</a>, <a href="#rfc.xref.RFC3986.11">2.7</a>, <a href="#rfc.xref.RFC3986.12">2.7</a>, <a href="#rfc.xref.RFC3986.13">2.7</a>, <a href="#rfc.xref.RFC3986.14">2.7.1</a>, <a href="#rfc.xref.RFC3986.15">2.7.1</a>, <a href="#rfc.xref.RFC3986.16">2.7.3</a>, <a href="#rfc.xref.RFC3986.17">2.7.3</a>, <a href="#rfc.xref.RFC3986.18">5.1</a>, <a href="#rfc.xref.RFC3986.19">5. 3</a>, <a href="#rfc.xref.RFC3986.20">5.6</a>, <a href="#RFC3986"><b>12.1</b></a><ul>3932 <li><em>Section 2.1</em> <a href="#rfc.xref.RFC3986.17">2.7.3</a> , <a href="#rfc.xref.RFC3986.19">5.3</a></li>3941 <li><em>RFC3986</em> <a href="#rfc.xref.RFC3986.1">1</a>, <a href="#rfc.xref.RFC3986.2">2.7</a>, <a href="#rfc.xref.RFC3986.3">2.7</a>, <a href="#rfc.xref.RFC3986.4">2.7</a>, <a href="#rfc.xref.RFC3986.5">2.7</a>, <a href="#rfc.xref.RFC3986.6">2.7</a>, <a href="#rfc.xref.RFC3986.7">2.7</a>, <a href="#rfc.xref.RFC3986.8">2.7</a>, <a href="#rfc.xref.RFC3986.9">2.7</a>, <a href="#rfc.xref.RFC3986.10">2.7</a>, <a href="#rfc.xref.RFC3986.11">2.7</a>, <a href="#rfc.xref.RFC3986.12">2.7</a>, <a href="#rfc.xref.RFC3986.13">2.7</a>, <a href="#rfc.xref.RFC3986.14">2.7.1</a>, <a href="#rfc.xref.RFC3986.15">2.7.1</a>, <a href="#rfc.xref.RFC3986.16">2.7.3</a>, <a href="#rfc.xref.RFC3986.17">2.7.3</a>, <a href="#rfc.xref.RFC3986.18">5.1</a>, <a href="#rfc.xref.RFC3986.19">5.6</a>, <a href="#RFC3986"><b>12.1</b></a><ul> 3942 <li><em>Section 2.1</em> <a href="#rfc.xref.RFC3986.17">2.7.3</a></li> 3933 3943 <li><em>Section 3.2</em> <a href="#rfc.xref.RFC3986.8">2.7</a></li> 3934 3944 <li><em>Section 3.2.1</em> <a href="#rfc.xref.RFC3986.15">2.7.1</a></li> … … 3940 3950 <li><em>Section 4.1</em> <a href="#rfc.xref.RFC3986.5">2.7</a></li> 3941 3951 <li><em>Section 4.2</em> <a href="#rfc.xref.RFC3986.7">2.7</a></li> 3942 <li><em>Section 4.3</em> <a href="#rfc.xref.RFC3986.6">2.7</a>, <a href="#rfc.xref.RFC3986. 20">5.6</a></li>3952 <li><em>Section 4.3</em> <a href="#rfc.xref.RFC3986.6">2.7</a>, <a href="#rfc.xref.RFC3986.19">5.6</a></li> 3943 3953 <li><em>Section 6</em> <a href="#rfc.xref.RFC3986.16">2.7.3</a></li> 3944 3954 </ul> -
draft-ietf-httpbis/latest/p1-messaging.xml
r1579 r1581 33 33 <!ENTITY idempotent-methods "<xref target='Part2' x:rel='#idempotent.methods' xmlns:x='http://purl.org/net/xml2rfc/ext'/>"> 34 34 <!ENTITY method "<xref target='Part2' x:rel='#method' xmlns:x='http://purl.org/net/xml2rfc/ext'/>"> 35 <!ENTITY OPTIONS "<xref target='Part2' x:rel='#OPTIONS' xmlns:x='http://purl.org/net/xml2rfc/ext'/>"> 35 36 <!ENTITY status-code-reasonphr "<xref target='Part2' x:rel='#status.code.and.reason.phrase' xmlns:x='http://purl.org/net/xml2rfc/ext'/>"> 36 37 <!ENTITY status-codes "<xref target='Part2' x:rel='#status.codes' xmlns:x='http://purl.org/net/xml2rfc/ext'/>"> … … 2360 2361 the method being requested and whether the request is to a proxy. 2361 2362 </t> 2362 <figure><artwork type="abnf2616"><iref primary="true" item="Grammar" subitem="request-target"/> 2363 <x:ref>request-target</x:ref> = "*" 2364 / <x:ref>absolute-URI</x:ref> 2365 / ( <x:ref>path-absolute</x:ref> [ "?" <x:ref>query</x:ref> ] ) 2366 / <x:ref>authority</x:ref> 2363 <figure><artwork type="abnf2616"><iref primary="true" item="Grammar" subitem="request-target"/><iref primary="true" item="Grammar" subitem="origin-form"/><iref primary="true" item="Grammar" subitem="absolute-form"/><iref primary="true" item="Grammar" subitem="authority-form"/><iref primary="true" item="Grammar" subitem="asterisk-form"/> 2364 <x:ref>request-target</x:ref> = <x:ref>origin-form</x:ref> 2365 / <x:ref>absolute-form</x:ref> 2366 / <x:ref>authority-form</x:ref> 2367 / <x:ref>asterisk-form</x:ref> 2368 2369 <x:ref>origin-form</x:ref> = <x:ref>path-absolute</x:ref> [ "?" <x:ref>query</x:ref> ] 2370 <x:ref>absolute-form</x:ref> = <x:ref>absolute-URI</x:ref> 2371 <x:ref>authority-form</x:ref> = <x:ref>authority</x:ref> 2372 <x:ref>asterisk-form</x:ref> = "*" 2367 2373 </artwork></figure> 2368 <t anchor="origin-form"><iref item="origin form (of request-target)"/> 2369 The most common form of request-target is that used when making 2370 a request to an origin server ("origin form") to access a resource 2371 identified by an "http" (<xref target="http.uri"/>) or 2372 "https" (<xref target="https.uri"/>) URI. 2373 In this case, the absolute path and query components of the URI 2374 &MUST; be transmitted as the request-target and the authority component 2375 (excluding any userinfo) &MUST; be transmitted in a Host header field. 2374 <t anchor="origin-form"><iref item="origin-form (of request-target)"/> 2375 The most common form of request-target is the origin-form. 2376 When making a request directly to an origin server, other than a CONNECT 2377 or server-wide OPTIONS request (as detailed below), 2378 a client &MUST; send only the absolute path and query components of 2379 the target URI as the request-target. 2380 If the target URI's path component is empty, then the client &MUST; send 2381 "/" as the path within the origin-form of request-target. 2382 A Host header field is also sent, as defined in 2383 <xref target="header.host"/>, containing the target URI's 2384 authority component (excluding any userinfo). 2385 </t> 2386 <t> 2376 2387 For example, a client wishing to retrieve a representation of the resource 2377 2388 identified as … … 2389 2400 </artwork></figure> 2390 2401 <t> 2391 followed by the remainder of the request. Note that the origin form 2392 of request-target always starts with an absolute path. If the target 2393 resource's URI path is empty, then an absolute path of "/" &MUST; be 2394 provided in the request-target. 2395 </t> 2396 <t> 2397 If the request-target is percent-encoded 2398 (<xref target="RFC3986" x:fmt="," x:sec="2.1"/>), the origin server 2399 &MUST; decode the request-target in order to 2400 properly interpret the request. Servers &SHOULD; respond to invalid 2401 request-targets with an appropriate status code. 2402 </t> 2403 <t anchor="absolute-URI-form"><iref item="absolute-URI form (of request-target)"/> 2404 The "absolute-URI" form of request-target is &REQUIRED; when the request 2405 is being made to a proxy. The proxy is requested to either forward the 2406 request or service it from a valid cache, and then return the response. 2407 Note that the proxy &MAY; forward the request on to another proxy or 2408 directly to the server specified by the absolute-URI. 2402 followed by the remainder of the request message. 2403 </t> 2404 <t anchor="absolute-form"><iref item="absolute-form (of request-target)"/> 2405 When making a request to a proxy, other than a CONNECT or server-wide 2406 OPTIONS request (as detailed below), a client &MUST; send the target URI 2407 in absolute-form as the request-target. 2408 The proxy is requested to either service that request from a valid cache, 2409 if possible, or make the same request on the client's behalf to either 2410 the next inbound proxy server or directly to the origin server indicated 2411 by the request-target. 2409 2412 In order to avoid request loops, a proxy that forwards requests to other 2410 2413 proxies &MUST; be able to recognize and exclude all of its own server 2411 2414 names, including any aliases, local variations, or literal IP addresses. 2412 An example request-line would be: 2415 </t> 2416 <t> 2417 An example absolute-form of request-line would be: 2413 2418 </t> 2414 2419 <figure><artwork type="message/http; msgtype="request"" x:indent-with=" "> … … 2416 2421 </artwork></figure> 2417 2422 <t> 2418 To allow for transition to absolute-URIs in all requests in future 2419 versions of HTTP, all HTTP/1.1 servers &MUST; accept the absolute-URI 2420 form in requests, even though HTTP/1.1 clients will only generate 2421 them in requests to proxies. 2422 </t> 2423 <t> 2424 If a proxy receives a host name that is not a fully qualified domain 2425 name, it &MAY; add its domain to the host name it received. If a proxy 2426 receives a fully qualified domain name, the proxy &MUST-NOT; change 2427 the host name. 2428 </t> 2429 <t anchor="authority-form"><iref item="authority form (of request-target)"/> 2430 The "authority form" of request-target, which &MUST-NOT; be used 2431 with any request method other than CONNECT, is used to establish a 2432 tunnel through one or more proxies (&CONNECT;). For example, 2423 To allow for transition to the absolute-form for all requests in some 2424 future version of HTTP, HTTP/1.1 servers &MUST; accept the absolute-form 2425 in requests, even though HTTP/1.1 clients will only send them in requests 2426 to proxies. 2427 </t> 2428 <t anchor="authority-form"><iref item="authority-form (of request-target)"/> 2429 The authority-form of request-target is only used for CONNECT requests 2430 (&CONNECT;). When making a CONNECT request to establish a tunnel through 2431 one or more proxies, a client &MUST; send only the target URI's 2432 authority component (excluding any userinfo) as the request-target. 2433 For example, 2433 2434 </t> 2434 2435 <figure><artwork type="message/http; msgtype="request"" x:indent-with=" "> 2435 2436 CONNECT www.example.com:80 HTTP/1.1 2436 2437 </artwork></figure> 2437 <t anchor="asterix-form"><iref item="asterisk form (of request-target)"/> 2438 The asterisk ("*") form of request-target, which &MUST-NOT; be used 2439 with any request method other than OPTIONS, means that the request 2440 applies to the server as a whole (the listening process) rather than 2441 to a specific named resource at that server. For example, 2438 <t anchor="asterisk-form"><iref item="asterisk-form (of request-target)"/> 2439 The asterisk-form of request-target is only used for a server-wide 2440 OPTIONS request (&OPTIONS;). When a client wishes to request OPTIONS 2441 for the server as a whole, as opposed to a specific named resource of 2442 that server, the client &MUST; send only "*" (%x2A) as the request-target. 2443 For example, 2442 2444 </t> 2443 2445 <figure><artwork type="message/http; msgtype="request"" x:indent-with=" "> … … 2445 2447 </artwork></figure> 2446 2448 <t> 2447 If a proxy receives an OPTIONS request with an absolute- URIform of2449 If a proxy receives an OPTIONS request with an absolute-form of 2448 2450 request-target in which the URI has an empty path and no query component, 2449 then the last proxy on the request chain &MUST; usea request-target2451 then the last proxy on the request chain &MUST; send a request-target 2450 2452 of "*" when it forwards the request to the indicated origin server. 2451 2453 </t> … … 2466 2468 </figure> 2467 2469 <t> 2470 If a proxy receives a request-target with a host name that is not a 2471 fully qualified domain name, it &MAY; add its domain to the host name 2472 it received when forwarding the request. A proxy &MUST-NOT; change the 2473 host name if it is a fully qualified domain name. 2474 </t> 2475 <t> 2468 2476 A non-transforming proxy &MUST-NOT; rewrite the "path-absolute" and "query" 2469 2477 parts of the received request-target when forwarding it to the next inbound 2470 server, except as noted above to replace a null path-absolute with "/" or 2471 "*". 2478 server, except as noted above to replace an empty path with "/" or "*". 2472 2479 </t> 2473 2480 </section> … … 2479 2486 <t> 2480 2487 The "Host" header field in a request provides the host and port 2481 information from the target resource'sURI, enabling the origin2482 server to distinguish betweenresources while servicing requests2488 information from the target URI, enabling the origin 2489 server to distinguish among resources while servicing requests 2483 2490 for multiple host names on a single IP address. Since the Host 2484 2491 field-value is critical information for handling a request, it … … 2490 2497 <t> 2491 2498 A client &MUST; send a Host header field in all HTTP/1.1 request 2492 messages. If the target resource's URI includes an authority 2493 component, then the Host field-value &MUST; be identical to that 2494 authority component after excluding any userinfo (<xref target="http.uri"/>). 2495 If the authority component is missing or undefined for the target 2496 resource's URI, then the Host header field &MUST; be sent with an 2497 empty field-value. 2499 messages. If the target URI includes an authority component, then 2500 the Host field-value &MUST; be identical to that authority component 2501 after excluding any userinfo (<xref target="http.uri"/>). 2502 If the authority component is missing or undefined for the target URI, 2503 then the Host header field &MUST; be sent with an empty field-value. 2498 2504 </t> 2499 2505 <t> … … 2507 2513 <t> 2508 2514 The Host header field &MUST; be sent in an HTTP/1.1 request even 2509 if the request-target is in the form of an absolute-URI, since this2515 if the request-target is in the absolute-form, since this 2510 2516 allows the Host information to be forwarded through ancient HTTP/1.0 2511 2517 proxies that might not have implemented Host. 2512 2518 </t> 2513 2519 <t> 2514 When an HTTP/1.1 proxy receives a request with a request-target in2515 the form of an absolute-URI, the proxy &MUST; ignore the received2520 When an HTTP/1.1 proxy receives a request with an absolute-form of 2521 request-target, the proxy &MUST; ignore the received 2516 2522 Host header field (if any) and instead replace it with the host 2517 information of the request-target. When a proxy forwards arequest,2518 it &MUST; generate the Host header fieldbased on the received2519 absolute-URI rather than the received Host.2523 information of the request-target. If the proxy forwards the request, 2524 it &MUST; generate a new Host field-value based on the received 2525 request-target rather than forward the received Host field-value. 2520 2526 </t> 2521 2527 <t> … … 2524 2530 a shared cache or redirect a request to an unintended server. 2525 2531 An interception proxy is particularly vulnerable if it relies on 2526 the Host header fieldvalue for redirecting requests to internal2532 the Host field-value for redirecting requests to internal 2527 2533 servers, or for use as a cache key in a shared cache, without 2528 2534 first verifying that the intercepted connection is targeting a … … 2534 2540 to any request message that contains more than one Host header field 2535 2541 or a Host header field with an invalid field-value. 2536 </t>2537 <t>2538 See Sections <xref target="the.resource.identified.by.a.request" format="counter"/>2539 and <xref target="changes.to.simplify.multi-homed.web.servers.and.conserve.ip.addresses" format="counter"/>2540 for other requirements relating to Host.2541 2542 </t> 2542 2543 </section> … … 5144 5145 5145 5146 <x:ref>absolute-URI</x:ref> = <absolute-URI, defined in [RFC3986], Section 4.3> 5147 <x:ref>absolute-form</x:ref> = absolute-URI 5148 <x:ref>asterisk-form</x:ref> = "*" 5146 5149 <x:ref>attribute</x:ref> = token 5147 5150 <x:ref>authority</x:ref> = <authority, defined in [RFC3986], Section 3.2> 5151 <x:ref>authority-form</x:ref> = authority 5148 5152 5149 5153 <x:ref>chunk</x:ref> = chunk-size [ chunk-ext ] CRLF chunk-data CRLF … … 5176 5180 <x:ref>obs-fold</x:ref> = CRLF ( SP / HTAB ) 5177 5181 <x:ref>obs-text</x:ref> = %x80-FF 5182 <x:ref>origin-form</x:ref> = path-absolute [ "?" query ] 5178 5183 5179 5184 <x:ref>partial-URI</x:ref> = relative-part [ "?" query ] … … 5204 5209 <x:ref>relative-part</x:ref> = <relative-part, defined in [RFC3986], Section 4.2> 5205 5210 <x:ref>request-line</x:ref> = method SP request-target SP HTTP-version CRLF 5206 <x:ref>request-target</x:ref> = "*" / absolute-URI / ( path-absolute [ "?" query ] )5207 / authority5211 <x:ref>request-target</x:ref> = origin-form / absolute-form / authority-form / 5212 asterisk-form 5208 5213 5209 5214 <x:ref>special</x:ref> = "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" /
Note: See TracChangeset
for help on using the changeset viewer.