To:
blin...@chromium.org (this is part of the Blink launch process).
Bcc:
net...@chromium.org as FYI.
Contact emails
b...@chromium.org
Spec
https://tools.ietf.org/html/draft-ietf-httpbis-h2-websockets-07,
currently in RFC editor's queue.
Design doc
https://docs.google.com/document/d/1ZxaHz4j2BDMa1aI5CQHMjtFI3UxGT459pjYv4To9rFY
Summary
Implement support for secure WebSockets over an already established
HTTP/2 connection.
Motivation
A large proportion of web servers support HTTP/2. Currently if a
WebSocket is requested to such a server, a new HTTP/1.1 connection
must be established even if there is an active HTTP/2 connection,
because WebSocket handshake is only supported over HTTP/1.1. However,
if both the server and the client support WebSockets over HTTP/2, and
the connection is already open, and the server has advertised support
as described in the specification, and the request is for a secure
WebSocket, then the client can open a new stream on the existing
HTTP/2 connection, thereby saving the roundtrip times associated with
the TCP and TLS handshake.
Interoperability and Compatibility Risk
A Firefox network stack engineer is driving the specification
singlehandedly, which is a strong indicator to their commitment to
implement this feature. The specification has been positively
received by the wider IETF community and is now in the editor's queue.
The feature requires explicit advertisement of support from the
server. Chromium's behavior does not change until it receives this
setting, therefore the interoperability risk with servers and reverse
proxies is low. The feature is tied to HTTP/2 which is only supported
over TLS in Chromium, therefore the interoperability risk with proxies
that do not terminate the TLS connection is low. UMA metrics show
that WebSockets over HTTP/2 usage is less than 1e-8 of all WebSockets
handshakes, therefore interoperability risk is extremely low overall.
Because of this, I propose to simple enable this feature on tip of the
tree and let it be released via Chrome's usual release channels (with
a field trial parameter in place that would allow it to be disabled).
Activation
This feature will be used with compatible servers without the need for
activation from web developers, as long as the WebSocket request is
secure (wss scheme as opposed to ws).
Will this feature be supported on all six Blink platforms (Windows,
Mac, Linux, Chrome OS, Android, and Android WebView)?
Yes. This feature will be implemented in the Chromium network stack,
therefore it will be supported on all platform where such network
stack is used and enable_websockets build flag is true.
Link to entry on the feature dashboard
https://www.chromestatus.com/feature/6251293127475200
Link to intent to implement thread
https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/TQN4jWHydTk
Requesting approval to ship?
Yes.