We happily announce immediate availability of nghttp2
v0.6.2.
It still implements h2-14 and HPACK-09. This release fixes memory
leaks. We added nghttp2_option_set_recv_client_preface()
function.
Previously, nghttp2 library only handles HTTP/2 frames and does not
recognize first 24 bytes of client connection preface. This design
choice is done due to the fact that server may want to detect the
application protocol based on first few bytes on clear text
communication. But for simple servers which only speak HTTP/2, it is
easier for developers if nghttp2 library takes care of client
connection preface as well. If this option is enabled, nghttp2
library checks first 24 bytes client connection preface. If it is not
a valid one, nghttp2_session_recv()
and nghttp2_session_mem_recv()
will return new error code NGHTTP2_ERR_BAD_PREFACE
, which is fatal
error. By default, the option is turned off for backward
compatibility.
The other thing worth mentioning is that now
nghttp2_stream_resume_deferred_data()
does not fail if data is
deferred by flow control.
Previously processing incoming connection level WINDOW_UPDATE frame is quite expensive, but it is fixed and now 2x faster than v0.6.1.
We introduced the experimental libnghttp2_asio C++ library. It is built on top of libnghttp2 and intended to provide higher level APIs to build HTTP/2 client/server easily. Currently, only server APIs are provided. It depends on Boost::Asio and Boost::Thread libraries. For example, the rather useless simple HTTP/2 server which returns “hello, world” for any HTTP request is as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
For more details, consult library documentation.
We added examples/tiny-nghttpd server, which is stripped faster version of nghttpd. Its purpose is measure performance bottleneck in libnghttp2 code, avoding any overhead in external I/O library. Currently it requires epoll, so it can be built only on linux.