What is this site?

HTML5Labs is where Microsoft prototypes early and unstable specifications from web standards bodies such as W3C. Sharing these prototypes helps us have informed discussions with developer communities, and enables us to provide better feedback on draft specifications based on this implementation experience. To find out more about HTML5Labs, read the blog by Jean Paoli, President, Microsoft Open Technologies, Inc.

HTTP Speed + Mobility


Prototype details

Important Note: This prototype has been developed as a proof of concept to allow developers interested in the standardization of HTTP 2.0 to evaluate a working implementation of the HTTP Speed+Mobility proposal. While the prototype is working and we would like developers to download, test it and provide feedback, it is not intended for production quality developments.

The prototype implements the websocket-based session layer described in the HTTP Speed+Mobility proposal Microsoft contributed to the IETF httpbis workgroup, as well as parts of the multiplexing logic incorporated from Google's SPDY proposal.  

The software comprises a client implemented in C# and a server implemented in Node.js running on Windows Azure. The client is a command line tool that establishes a connection to the server and can download a set of web pages that include html files, scripts, and images. We have made available on the server some static versions of popular web pages like http://www.microsoft.com and http://www.ietf.org, as well as a handful of simpler test pages.

We invite you to inspect the source code directly in order to familiarize yourself with how everything works; the code can be downloaded from the download section along with a readme file describing the various options available, as well as the meaning of the output returned to the console.

 Update 7/5/12:

  • We implemented an updated Session Layer to more clearly define the separation with the other layers. The Session Layer is now formally defined as a WebSocket extension.  
  • The Streams Layer was simplified to take advantage of the WebSockets integration.  We removed all of the redundancy within the WebSockets Framing. For example, HTTP Speed+Mobility frames no longer have a dedicated length field, as the length of the payload is already specified in the underlying Websocket frame.
  • Finally, a new flow control logic was implemented. The prototype implements a simple receive buffer management scheme based on the credit control mechanism now specified in the proposal. We believe that it provides a good balance between throughput and flow control, while adhering to our stated tenet that the Client is in control of the Content.

Update 11/2/12:

  • We implemented a suggested approach to the Protocol Upgrade: Gabriel Montenegro and Willy Tarreau have now submitted a new proposal which describes a suggested approach for Negotiation in HTTP/2.0, in order to move the discussion forward. As it is, the proposal can already be used to negotiate HTTP 2.0 either in the clear or over TLS. Naturally, this proposal is a starting point and will undergo revisions going forward based on working group discussions (e.g., to further optimize the handshake). You can read more on the suggested behavior in our blog post.