- From: Roy T. Fielding <fielding@gbiv.com>
- Date: Sun, 31 Aug 2014 20:16:32 -0700
- To: HTTP Working Group <ietf-http-wg@w3.org>
This comment is in reference to section 3.2 of http://tools.ietf.org/id/draft-ietf-httpbis-http2-14.txt > 3.2. Starting HTTP/2 for "http" URIs > > A client that makes a request to an "http" URI without prior > knowledge about support for HTTP/2 uses the HTTP Upgrade mechanism > (Section 6.7 of [RFC7230]). The client makes an HTTP/1.1 request > that includes an Upgrade header field identifying HTTP/2 with the > "h2c" token. The HTTP/1.1 request MUST include exactly one > HTTP2-Settings (Section 3.2.1) header field. > > For example: > > GET / HTTP/1.1 > Host: server.example.com > Connection: Upgrade, HTTP2-Settings > Upgrade: h2c > HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload> The protocol-name is HTTP and the protocol-version is 2, so the correct upgrade protocol is HTTP/2 and the correct HTTP/1.1 response is GET / HTTP/1.1 Host: server.example.com Connection: Upgrade, HTTP2-Settings Upgrade: HTTP/2 HTTP2-Settings: <base64url encoding of HTTP/2 SETTINGS payload> That is, unless we want to change the name of this protocol to h2c (seems unlikely given the rest of the text). > Requests that contain an entity body MUST be sent in their entirety > before the client can send HTTP/2 frames. This means that a large > request entity can block the use of the connection until it is > completely sent. > > If concurrency of an initial request with subsequent requests is > important, a small request can be used to perform the upgrade to > HTTP/2, at the cost of an additional round-trip. s/a small request/an OPTIONS request/ > A server that does not support HTTP/2 can respond to the request as > though the Upgrade header field were absent: > > HTTP/1.1 200 OK > Content-Length: 243 > Content-Type: text/html > > ... > > A server MUST ignore a "h2" token in an Upgrade header field. > Presence of a token with "h2" implies HTTP/2 over TLS, which is > instead negotiated as described in Section 3.3. There is no such token. ALPN tokens have nothing to do with Upgrade and this is an HTTP/1.1 request, so this spec has no ability to make such an (unnecessary) requirement. > A server that supports HTTP/2 can accept the upgrade with a 101 > (Switching Protocols) response. After the empty line that terminates > the 101 response, the server can begin sending HTTP/2 frames. These > frames MUST include a response to the request that initiated the > Upgrade. > > HTTP/1.1 101 Switching Protocols > Connection: Upgrade > Upgrade: h2c > > [ HTTP/2 connection ... > > The first HTTP/2 frame sent by the server is a SETTINGS frame > (Section 6.5). Upon receiving the 101 response, the client sends a > connection preface (Section 3.5), which includes a SETTINGS frame. Note that the SETTINGS frame is a sufficient response if the request was for OPTIONS. Cheers, Roy T. Fielding <http://roy.gbiv.com/> Senior Principal Scientist, Adobe <http://www.adobe.com/>
Received on Monday, 1 September 2014 03:16:56 UTC