Forest header image

Symfony Finland
Random things on PHP, Symfony and web development

HTTP/2 server H2O hits version 2.0.0

The HTTP server H2O recently hit major milestone with version 2.0.0. The new release comes with new features and performance enhancements.

This lightweight and optimised HTTP/2 server has now been powering this site since June 2015. During this year the server has proved very reliable and running H2O as your main web server or as your HTTP/2 capable SSL offloader for Varnish is easy. Configuration format also remained the same between 1.7.x and 2.0.x versions, so upgrading was straightforward.


HTTP/2 is a new version of the protocol powering the World Wide Web. It was formally finalized in 2015 and since that both Apache and Nginx have received HTTP/2 support in their stable versions.

In the the past week the HTTP/2 capable version of Nginx came available for developers using Debian versions Jessie and Wheezy through Dotdeb: Nginx 1.10.1 for Jessie and Wheezy

H2O version 2.0.0 continues on the path for being the most feature complete HTTP/2 server around, with full support for features such as prioritized content serving and server push.

With minimal CPU utilization it promises faster time to first byte compared with previous generation web servers like Nginx and Apache.

For some peformance statistics from the development team itself, take a look at the H2O HTTP/2 server sites benchmarks.

H2O 2.0.0 server change log

A complete list of changes is available the change log on the H2O v2.0.0 tag on GitHub.

This is a major update release, with following changes (including new features and bug fixes) from 1.7.3.

  • [core][breaking change] do not automatically append / to path-level configuration #820 (Kazuho Oku)
  • [core] support << in configuration file #786 (Kazuho Oku)
  • [core] configurable server: header #877 (Frederik Deweerdt)
  • [core] add directive for customizing the path of temporary buffer files #911 (Kazuho Oku)
  • [core] fix crash when receiving SIGTERM during start-up #878 (Frederik Deweerdt)
  • [core] spawn the configured number of DNS client threads #880 (Sean McArthur)
  • [access-log] add directive for logging protocol-specific values #801 (Kazuho Oku)
  • [access-log][fastcgi][mruby] per-request environment variables #868 (Kazuho Oku)
  • [access-log] fix memory leak during start-up #864 (Frederik Deweerdt)
  • [compress] on-the-fly compression using brotli, as well as directives to tune the compression parameters #802, #924 (Kazuho Oku, Frederik Deweerdt)
  • [compress][expires] refrain from setting redundant cache-control tokens #846 (Kazuho Oku)
  • [file] file.file directive for mapping specific file #822 (Kazuho Oku)
  • [file] send-compress directive (renamed from send-gzip) to support pre-compressed files using brotli #802 (Kazuho Oku)
  • [file] cache open failures #836 (Kazuho Oku)
  • [http2] support for nopush attribute in the link rel=preload header #863 (Satoh Hiroh)
  • [http2] support for push after delegation #866 (Kazuho Oku)
  • [http2] ignore push indications made by a pushed response #897 (Kazuho Oku)
  • [http2] accept capacity-bits attribute of the http2-casper configuration directive #882 (Satoh Hiroh)
  • [http2] avoid memcpy during HPACK huffman encoding #749 (Kazuho Oku)
  • [http2] fix potential stall when http2-max-concurrent-requests-per-connection is set to a small number #912 (Kazuho Oku)
  • [http2] refuse push a single resource more than once #903 (Kazuho Oku)
  • [http2] fix assertion failure when receiving more data than expected during upgrade #922 (Frederik Deweerdt)
  • [mruby] add $H2O_ROOT/share/h2o/mruby to the default load path #851 (Kazuho Oku)
  • [proxy] add support for HTTPS #875 (Kazuho Oku)
  • [proxy] add an configuration option to pass through x-forwarded-proto request header #883(Kazuho Oku)
  • [proxy] log error when upstream connection is unexpectedly closed #895 (Frederik Deweerdt)
  • [ssl] update libressl to 2.2.7 #898 (Kazuho Oku)
  • [ssl] support ECDH curves other than P-256 #841 (Kazuho Oku)
  • [ssl] add support for text-based memcache protocol #854 (Kazuho Oku)
  • [ssl] fix memory leak when using TLS resumption with the memcached backend #856 (Kazuho Oku)
  • [ssl] fix "undefined subroutine" error in the OCSP updater #872 (Masayuki Matsuki)
  • [ssl] cap the number of OCSP updaters running concurrently #891 (Kazuho Oku)
  • [ssl] fix use-after-free when using session resumption with memcached backend #923 (Frederik Deweerdt)
  • [libh2o] add API for obtaining the socket descriptor #886 (Frederik Deweerdt)
  • [libh2o] add API to selectively disable automated I/O on reads and writes #890 (Frederik Deweerdt)
  • [libh2o] bugfix: h2o_mem_swap swaps only the first 256 bytes #924 (Frederik Deweerdt)
  • [status] introduce the status handler #848 (Kazuho Oku)
  • [misc] install examples #850 (James Rouzier)

Written by Jani Tarvainen on Tuesday June 7, 2016
Permalink - Tags: http2, h2o

« Introduction to Angular 2 for Symfony developers - Symfony and JWT (JSON Web Token) »