A side effect of upgrading my web server to Debian 9 is that its version of Apache HTTPD now optionally supports HTTP/2. Not to be confused with the old “Web 2.0” thing, this version 2 of the Hypertext Transfer Protocol brings many optimizations for concurrent transfers within a single connection.
Enabling HTTP/2 on Debian 9 for this site was easy. I set up a file
/etc/apache2/conf-available/http2.conf like this:
<IfModule http2_module> Protocols h2 h2c http/1.1 H2Direct on </IfModule>
And then I ran the following commands (each prefixed with sudo):
a2enconf http2 a2enmod http2 systemctl restart apache2
To help test it out I used Google Chrome with the HTTP/2 and SPDY indicator and chrome://net-internals/#events to monitor the connections. Newer versions of cURL also support the “HTTP2” protocol, and fetching a page with the “verbose” option should show you the connection’s upgrade to HTTP/2. If you try it out right now on this page, you should see a confirmation that this server indeed supports HTTP/2.
I normally run “HTTP application services” like Python or Java behind a reverse proxy and not directly accessible from the internet, and it can be argued that most HTTP REST-like services don’t gain much from parallelism within a connection that HTTP/2 brings. Still, they are now starting to support HTTP/2, for example with python-hyper and Jetty. Here’s a rather comprehensive list of client and server HTTP/2 implementations.
We’re still a few years before “HTTP/3” or QUIC gains much use outside of Google’s own services, but for now enabling HTTP/2 is so simple it should almost be considered a default. The only thing that could complicate its deployment is that most HTTP/2 clients require TLS, but then if you’re still not using TLS you have bigger issues.
Published on December 2, 2018 at 20:48 EST
Older post: A Eulogy for Small Phones
Newer post: Monorepos and Semantic Versioning