- From: Erik Nygren <erik@nygren.org>
- Date: Tue, 6 Nov 2012 00:05:57 -0500
- To: ietf-http-wg@w3.org
- Message-ID: <CAKC-DJjsD5-0ggb3+ALHPR5LVE=VZ4xj6XQMqNRfH1uZvjqieg@mail.gmail.com>
Some thoughts after having read through this thread on the flight over... (Note that some of these are skewed from the perspective of having spent too much time staring at one particular CDN / Acceleration Gateway over the years, but I think some are generally applicable.) * Any multi-port negotiation and caching (ie, for an Alternate-Protocol) may make sense to consider in conjunction with "Alt-Server" (see draft-nygren-httpbis-connection-redirect which I need to post an updated version of soon) as they have quite a bit of similarity. One consideration in this area is that the Alternate-Protocol hint could additionally convey the urgency of making the switch (e.g., as an option along with the hint indicating whether the switch should be synchronous or asynchronous). In many cases it might be reasonable for the client to continue using the HTTP/1.1 connection in-parallel with establishing and migrating to the HTTP/2.0 connection. * One reason Alternate-Protocol is potentially attractive as an option: when using it to switch to http2-over-tls (with cert validation), we could require that it only be used by clients which MUST support TLS-SNI. This addresses at least one issue with TLS. (One BIG problem with manditory TLS-with-cert-validation in my view is that there isn't enough IPv4 space left to sanely manage the limitation of a Host-per-IP-address resulting from the slow rate of TLS-SNI adoption. Providing a way to upgrade to TLS for individual connections and only for clients that support TLS-SNI can help here.) * SRV records aren't too bad from a RTT perspective for sites already using CNAMEs as part of their setup (such as is common with some CDNs). This is only one use-case as a counter-point to some of the other use-cases discussed here. For example, if lookups for A and SRV records are made in parallel for this set of hostnames, the same number of round trips is involved: www.example.com CNAME www.example.com.example-cdn.net www.example.com.example-cdn.net A 10.2.3.4 www.example.com.example-cdn.net A 10.2.3.5 www.example.com.example-cdn.net AAAA 2001::abcd _http2._tcp.www.example.com SRV 0 10 80 _ http2.www.example.com.example-cdn.net _http2.www.example.com.example-cdn.net A 10.2.3.4 _http2.www.example.com.example-cdn.net A 10.2.3.5 _http2.www.example.com.example-cdn.net AAAA 2001::abcd Note that it would not be surprising if some integrations sometimes resulted in names further down the chain like _http2.www.example.com.example-cdn.net sometimes returning NXDOMAINs. It is annoying that the SRV record ends up needing to be under the domain of control of initial authority rather than of the actual server operators. One approach here might be for the domain authority to CNAME the SRV record name over to a server operator (eg, CDN) which could address this concern (but won't help for names that can't be CNAMEs): _http2._tcp.www.example.com CNAME _http2._ tcp.www.example.com.example-cdn.net _http2._tcp.www.example.com.example-cdn.net SRV 0 10 80 _http2._ tcp.www.example.com.example-cdn.net _http2._tcp.www.example.com.example-cdn.net A 10.2.3.4 _http2._tcp.www.example.com.example-cdn.net A 10.2.3.5 _http2._tcp.www.example.com.example-cdn.net AAAA 2001::abcd As a side-note, having SRV records work sanely for HTTP would help in the unfortunate cases of names like "example.com" where a CNAME isn't allowed or supported by DNS. * A downside of using a finer-grained prototocol version in SRV records (eg, "_http2_draft1") is that they are hard to get third-parties to deploy frequently (eg, for customer sites of a CDN). As such, it may make sense to leave this as just "_http2" and make sure that the initial HTTP/2 draft wire versions can signal protocol versions and trigger a downgrade if needed. * One complication for client authors to consider here is the matrix of HTTP/2 -> HTTP/1.1 fall-back behavior mixed with IPv6 -> IPv4 fall-back behavior. There are perhaps some lessons to be learned from the IPv6 "happy eyeballs" work here as well (although the behaviors implemented there tend to involve much earlier fall-back from a failure to establish the TCP connection fast enough, while the protocol-level fallback is presumably higher in the stack). * +1 to: Having a new scheme (ie, http2://) as an option seems potentially useful, but it shouldn't be manditory, and shouldn't be a primary way to operate. One proposal might be: 1) Use HTTP/2 if the http2 scheme is specified. 2) Perform SRV record lookups in-parallel with A/AAAA lookups. 3) For HTTPS, use TPS+NPN even if the SRV record lookup failed. 4) For non-TLS, accept Alternate-Protocol hint which triggers a new connection establishment (perhaps asynchronously, as that also helps if an alternate port is unavailable?) 5) An open question is whether we also want a synchronous "Upgrade" option as well on the same port. (The transparent/interception proxy issue seems to be the biggest risk here...)
Received on Tuesday, 6 November 2012 05:06:24 UTC