HTTP/2 C library and tools

HTTP/2 Draft-12 Update

We updated test server to the latest HTTP/2 draft-12 implementation.

As before, we service h2-12 at port 443 and h2c-12 at port 80. We also continue to support SPDY and HTTP/1. If http URI is used to access to this site, we issue ALTSVC frame and Alt-Svc header field to indicate that we also service same contents at port 443 in h2-12 protocol.

Let’s review the highlights of the changes in draft-12. The dependency based priority was introduced in draft-11. In draft-12, it is further enhanced (and simplified). nghttp2 fully implements dependency based priority mechanism. From our experience, we know that it is crucial to retain information of closed streams to make the prioritization work. This is also covered in the draft-12. nghttp2 retains closed streams as much as possible. The upper bound of the sum of active and retained closed streams are SETTINGS_MAX_CONCURRENT_STREAMS the server declares.

BLOCKED frame is newly introduced in draft-12. It indicates that DATA frame transfer is blocked due to exhaustion of flow control send window. nghttp2 implements transmission and reception of BLOCKED frame for both connection and stream level flow control.

Compressed DATA frame is introduced in draft-12. This is supposed to be a replacement of Transfer-Encoding: gzip in HTTP/1. nghttp2 supports compressed DATA frame in its library API. But the public test server does not support compress DATA frame at the moment.

To access this site via HTTP/2, you can use nghttp client included in nghttp2 repository. It works with both https and http URI. node-http2 client may also work.

The easiest way to test HTTP/2 is use h2-12 enabled Firefox browser. You can find the download link from here. Don’t forget to set network.http.spdy.enabled.http2draft and security.ssl.enable_alpn to true in about:config screen. Please note that Firefox only supports HTTP/2 in https URI.