nghttp2.org

HTTP/2 C library and tools

Nghttp2 v1.65.0

We have released nghttp2 v1.65.0.

Do not download the archive files generated by GitHub. They do not work. Please download the signed and versioned tar balls, such as nghttp2-1.65.0.tar.gz.

lib

RFC 7540 Priorities implementation has been removed. Here is the summary of the behavioral changes in the public API functions:

  • nghttp2_session_change_stream_priority: This function is noop. It always returns 0.
  • nghttp2_session_create_idle_stream: This function is noop. It always returns 0.
  • nghttp2_submit_request: pri_spec is ignored.
  • nghttp2_submit_request2: pri_spec is ignored.
  • nghttp2_submit_headers: pri_spec is ignored.
  • nghttp2_submit_priority: This function is noop. It always returns
  • nghttp2_stream_get_parent: This function always returns NULL.
  • nghttp2_stream_get_next_sibling: This function always returns NULL.
  • nghttp2_stream_get_previous_sibling: This function always returns NULL.
  • nghttp2_stream_get_first_child: This function always returns NULL.
  • nghttp2_stream_get_weight: This function always returns NGHTTP2_DEFAULT_WEIGHT.
  • nghttp2_stream_get_sum_dependency_weight: This function always returns 0.

nghttp2_option_set_server_fallback_rfc7540_priorities and nghttp2_option_set_no_closed_streams have also been deprecated, and have no effect.

QNX build support has been added.

cmake

Disable src tests if BUILD_TESTING is OFF.

src

url-parser has been replaced with urlparse.

h2load

Account for bytes on closing connections.

nghttp

nghttp now does not create the initial dependency tree. --no-dep and --no-rfc7540-pri options have been deprecated.

nghttp now always sends NGHTTP2_SETTINGS_NO_RFC7540_PRIORITIES HTTP/2 setting. --extpri option has been added to set priority for a given URI.

nghttpd

This change deprecates --no-rfc7540-pri option. SETTINGS_NO_RFC7540_PRIORITIES HTTP/2 setting is now always sent.

Nghttp2 v1.64.0

We have released nghttp2 v1.64.0.

Do not download the archive files generated by GitHub. They do not work. Please download the signed and versioned tar balls, such as nghttp2-1.64.0.tar.gz.

lib

The internal :authoriy and host field value validation now treats @ as invalid. nghttp2_check_authority still treats it as a valid character.

cmake

This release fixes c-ares v1.34.0 version detection failure.

h2load

This release fixes race condition on h1 connection close.

It also fixes UDP datagram send/recv metric.

Nghttp2 v1.63.0

We have released nghttp2 v1.63.0.

Do not download the archive files generated by GitHub. They do not work. Please download the signed and versioned tar balls, such as nghttp2-1.63.0.tar.gz.

lib

Compile error emitted by old compilers is suppressed.

nghttp2.h undefines NGHTTP2_NO_SSIZE_T if BUILDING_NGHTTP2 is defined.

src

wolfSSL support has been added.

Nghttp2 v1.62.0

We have released nghttp2 v1.62.0.

Do not download the archive files generated by GitHub. They do not work. Please download the signed and versioned tar balls, such as nghttp2-1.62.0.tar.gz.

Nghttp2 v1.61.0

We have released nghttp2 v1.61.0.

This release includes security advisory.

Security Advisory

CVE-2024-28182: Reading unbounded number of HTTP/2 CONTINUATION frames to cause excessive CPU usage

For more information, read the security advisory.

For other changes, refer to v1.61.0 release notes.

Do not download the archive files generated by GitHub. They do not work. Please download the signed and versioned tar balls, such as nghttp2-1.61.0.tar.gz.

Nghttp2 v1.60.0

We have released nghttp2 v1.60.0.

lib

RFC 7540 priorities (aka stream dependencies) APIs have been deprecated. They work just like before, but in the future release after the end of 2024, the functionality is removed, and the deprecated APIs start behaving differently. See the API documentation for details. RFC 7540 priorities have been deprecated by RFC 9113. Consider migrating RFC 9218 extensible prioritization scheme.

The APIs that use ssize_t, including structs and callback functions, have been deprecated. New APIs that use nghttp2_ssize are introduced as a replacement. The usage of ssize_t is problematic for several reasons. Some platforms do not define ssize_t. The minimum value of ssize_t that POSIX requires is -1 which makes nghttp2 error code out of range. nghttp2_ssize is an alias of ptrdiff_t that is in C standard and covers our error code range.

New code should use new nghttp2_ssize APIs. The existing applications should consider migrating to new APIs.

The deprecated ssize_t APIs continue to work for backward compatibility.

Here is the summary of the deprecated APIs and their replacements:

Callback functions:

  • nghttp2_data_source_read_callback => nghttp2_data_source_read_callback2
  • nghttp2_data_source_read_length_callback => nghttp2_data_source_read_length_callback2
  • nghttp2_pack_extension_callback => nghttp2_pack_extension_callback2
  • nghttp2_recv_callback => nghttp2_recv_callback2
  • nghttp2_select_padding_callback => nghttp2_select_padding_callback2
  • nghttp2_send_callback => nghttp2_send_callback2

Structs:

  • nghttp2_data_provider => nghttp2_data_provider2

Functions:

  • nghttp2_hd_deflate_hd => nghttp2_hd_deflate_hd2
  • nghttp2_hd_deflate_hd_vec => nghttp2_hd_deflate_hd_vec2
  • nghttp2_hd_inflate_hd2 => nghttp2_hd_inflate_hd3
  • nghttp2_pack_settings_payload => nghttp2_pack_settings_payload2
  • nghttp2_session_callbacks_set_data_source_read_length_callback => nghttp2_session_callbacks_set_data_source_read_length_callback2
  • nghttp2_session_callbacks_set_pack_extension_callback => nghttp2_session_callbacks_set_pack_extension_callback2
  • nghttp2_session_callbacks_set_recv_callback => nghttp2_session_callbacks_set_recv_callback2
  • nghttp2_session_callbacks_set_select_padding_callback => nghttp2_session_callbacks_set_select_padding_callback2
  • nghttp2_session_callbacks_set_send_callback => nghttp2_session_callbacks_set_send_callback2
  • nghttp2_session_mem_recv => nghttp2_session_mem_recv2
  • nghttp2_session_mem_send => nghttp2_session_mem_send2
  • nghttp2_submit_data => nghttp2_submit_data2
  • nghttp2_submit_request => nghttp2_submit_request2
  • nghttp2_submit_response => nghttp2_submit_response2

For those applications that do not want to see ssize_t in nghttp2.h header file at all, define NGHTTP2_NO_SSIZE_T macro before including nghttp2.h. It hides all ssize_t APIs.

build

cmake build and install trees are now fixed.

The following dependencies have been updated:

  • ngtcp2
  • nghttp3

CUnit has been replaced with ngtcp2/munit. munit is pulled via git submodule.

The flags to build applications with libbrotli have been added.

third-party

llhttp has been updated.

mruby is updated to v3.3.0.

h2load

--sni option has been added.

src

The certificate compression support with boringssl (or aws-lc) and libbrotli has been added.

Nghttp2 v1.59.0

We have released nghttp2 v1.59.0.

lib

This release adds API to get and parse RFC 9218 priority.

nghttp2_select_next_protocol() has been deprecated. Use nghttp2_select_alpn() instead.

build

The following dependencies have been updated:

  • ngtcp2
  • libbpf

h2load

h2load now considers all h2 HEADERS when counting bytes and recording TTFB.

This release fixes the bug that TTFB is not recorded if h3 stream has no data.

h2load now ignores 1xx status code.

IPv6 address is now enclosed by square brackets when set in :authority header field.

nghttpx

This release adds SSL_CTX_set_recv_max_early_data() call which OpenSSL requires.

__FILE_NAME__ macro is preferred if available.

nghttpx now propagates stream priority from backend to frontend.

This release fixes the bug that nghttpx sends QUIC RESET_STREAM when it receives RESET_STREAM from client.

src

This release drops old OpenSSL (< 1.1.1) support.

Now bundled applications can be built with aws-lc.

Nghttp2 v1.58.0

We have released nghttp2 v1.58.0.

lib

This release fixes build issues with cygwin and mingw.

build

This release speeds up warning option detection with cmake.

The following dependencies have been updated:

  • ngtcp2
  • nghttp3

third-party

neverbleed has been updated.

nghttpx

This release introduces stricter transfer-encoding checks.

integration

Enable http3 test with cmake.

Nghttp2 v1.57.0

We have released nghttp2 v1.57.0.

This release includes security advisory.

Security Advisory

CVE-2023-44487: HTTP/2 Rapid Reset

For more information, read the security advisory.

lib

This release has a fix to mitigate CVE-2023-44487: HTTP/2 Rapid Reset. It has reasonable amount of default budgets for incoming RST_STREAM frames. Application can tune the rate limit by using nghttp2_option_set_stream_reset_rate_limit. It can also implement its own rate limit by implementing nghttp2_on_frame_recv_callback and check RST_STREAM frame.

nghttpx

This release fixes the bug that --single-process does not work. It also fixes the bug that TLS connection is not rate limited.

Nghttp2 v1.56.0

We have released nghttp2 v1.56.0.

build

The following dependencies have been updated:

  • ngtcp2
  • nghttp3
  • BoringSSL
  • quictls
  • libbpf

third-party

llhttp has been updated.

nghttpx

Rework is done in functions that send ECN bits.

--frontend-quic-congestion-controller=bbr2 has been renamed to --frontend-quic-congestion-controller=bbrv2.

nghttpx, h2load

Fix issue that CMSG_DATA does not necessarily return an aligned pointer.