We released nghttp2 v1.10.0.
This release adds ALTSVC frame support in libnghttp2. nghttp gets new option to exercise expect/continue dance with server. nghttpx gets several new features, robust load balancing, and bug fixes.
ALTSVC frame support, and enchanced HTTP/2 extension support
ALTSVC frame is defined in
RFC 7838. nghttp2’s ALTSVC
frame support is very simple, and it does not parse
Alt-Svc-Field-Value
, and it just passes the received value to the
application. This is because ALTSVC aware application most likely has
a parser for this since ALTSVC can be sent via regular HTTP header
field Alt-Svc
.
By default, incoming ALTSVC frame is ignored. To receive ALTSVC
frame, create nghttp2_option
object, and use
nghttp2_option_set_builtin_recv_extension_type(opt, NGHTTP2_ALTSVC)
,
and pass the object to the nghttp2_session_client_new2()
or
nghttp2_session_client_new3()
. Note that server always ignores
ALTSVC regardless of the option settings.
To send ALTSVC frame, use nghttp2_submit_altsvc()
.
nghttp2 has introduced custom frame support in v1.8.0. So you can create your own ALTSVC handling if you wish.
Previously, we didn’t pass unknown incoming SETTINGS value to the
application. Now those values are also passed to the application via
nghttp2_on_frame_recv_callback
.
nghttp : expect/continue exercises
Jacob Champion has implemented expect/continue dance with server in
nghttp client. With new --expect-continue
option, nghttp briefly
waits for 100-continue from server before sending request body.
HTTP/2 has flow control, and it is regarded as better feature for
this, but this new option is useful to debug the server’s
expect/continue feature since it is still supported by HTTP/2.
nghttpx: better load balancing, and bug fixes
Brian Suh fixed the bug that nghttpx returned 502 on FreeBSD (and possibly Mac OS X).
nghttpx now has the feature to detect the backend is online or
offline. nghttpx’s --backend
option now gets additional parameter
rise=<N>
, and fall=<N>
. The fall=<N>
specifies that if the
backend cannot be connected in <N>
times in a row, it is considered
as offline, and excluded from load balancing group. The rise=<N>
specifies that if nghttpx can connect to the offline backend in <N>
times in a row, the backend is considered as online, and it is
eligible for load balancing again. By default, these feature are
disabled, and backend never be excluded from load balancing group.
Previously, when nghttpx could not connect to the one of backend, it did not use another backend, and just returns 5xx status code. Now it tries another backends in case of connect failure.
We fixed the bug that server push from mruby script did not work.
The server push using Link header field is extended, and now nghttpx can push resources using Link header field in non-final(1xx) response header fields from backend server.