This is the third release of H2O, including a number of changes that can be found in the Changes file. And here, I am happy to mention that some of the changes were brought by other people than me, in fact five people have committed into improving the H2O since the last release, whose names can also be found at the top of the README.
Among the changes introduced in version 0.9.3 are improvements to the HTTP/2 protocol implementation.
HTTP/2 Server Push
As of version 0.9.2, H2O automatically pushes content using HTTP/2 server push when suggested by the upstream server using the
link:rel=preloadheader. By using the feature, web applications can push resources mandatory for rendering the web pages on the client side, which results in faster perceived response time from the end-users viewpoint. In other words, web application developers are encouraged to list the files that block the rendering using the
link: rel=preloadheader for optimum rendering speed.
Below is an example of a response sent by a web application running behind H2O. H2O recognizes the
linkheader and starts to push the contents of
/assets/main.csseven before the client recognizes that the CSS is a blocker for rendering the webpage.
HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Link: </assets/main.css> rel=preload
It is also worth noting that H2O is not alone in providing support for HTTP/2 server push. Following the discussion on an H2O issue discussing the topic, nghttp2 has added support for server-push using the same header as well. What's good here is that the developers are working together on HTTP/2 to provide a logical and a vendor-neutral way of providing access to the new technology; I am so happy to be part of the effort.
Improved Scheduler for HTTP/2 Streams
The HTTP/2 specification defines a somewhat complex logic for prioritizing the streams. In H2O version 0.9.3 we have polished up the scheduler implementation used for the purpose. H2O now is not only highly compliant to the specification implementing all the aspects of the specification, but also excels in performance as the internal code-paths are guaranteed to be
Implementation of the prioritization logic fully conforming to the specification is essential for a HTTP/2 server, since web browsers would be tuned against the specification. We may see unnecessary delays in page rendering speed if any error (or missing parts) exist within the server program. I am glad that H2O is unlikely to fall into such problem now that we have a complete implementation.
I am pleased that all the changes have been done within three weeks since last release. And my thank you goes to the contributors and the people who have gave us advises on improving the product.
Please stay tuned for the next release!