<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[nghttp2.org]]></title>
  <link href="//nghttp2.org/atom.xml" rel="self"/>
  <link href="//nghttp2.org/"/>
  <updated>2025-10-25T17:47:11+09:00</updated>
  <id>//nghttp2.org/</id>
  <author>
    <name><![CDATA[Tatsuhiro Tsujikawa]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.68.0]]></title>
    <link href="//nghttp2.org/blog/2025/10/25/nghttp2-v1-68-0/"/>
    <updated>2025-10-25T17:36:38+09:00</updated>
    <id>//nghttp2.org/blog/2025/10/25/nghttp2-v1-68-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.68.0">v1.68.0</a>.</p>

<p>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.68.0.tar.gz.</p>

<h2>lib</h2>

<p>This release adds more glitch counters for the unexpected builtin
extension frames.</p>

<h2>h2load</h2>

<p>This release changes the default QUIC window-bits to 24 to reduce the
fragmentation on huge packet losses.</p>

<h2>nghttpd</h2>

<p>This release makes the supported groups configurable with <code>--groups</code>
option.</p>

<h2>nghttpx</h2>

<p>TLSv1.0 and TLSv1.1 support has been dropped.</p>

<p>ML-DSA certificates are now selected over ECDSA and RSA.  ML-DSA
certificates are supported by OpenSSL and wolfSSL TLS backends.</p>

<p>Certificate selection based on client capability is extended to
wolfSSL and BoringSSL.</p>

<p><code>--group</code> option has been added.  <code>--ecdh-curves</code> option has been
deprecated, and if it is used, it is treated as if <code>--group</code> option is
used.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.67.1]]></title>
    <link href="//nghttp2.org/blog/2025/09/15/nghttp2-v1-67-1/"/>
    <updated>2025-09-15T21:07:34+09:00</updated>
    <id>//nghttp2.org/blog/2025/09/15/nghttp2-v1-67-1</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.67.1">v1.67.1</a>.</p>

<p>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.67.1.tar.gz.</p>

<h2>lib</h2>

<p>Remove <code>session_update_glitch_ratelim</code> call from
<code>session_handle_invalid_stream2</code>.  Because that makes error handling
quite difficult because it might be called in the nested function
calls, and that might lead to the unexpected result.  It seems to me
that this was accidentally added.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.67.0]]></title>
    <link href="//nghttp2.org/blog/2025/09/02/nghttp2-v1-67-0/"/>
    <updated>2025-09-02T21:04:34+09:00</updated>
    <id>//nghttp2.org/blog/2025/09/02/nghttp2-v1-67-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.67.0">v1.67.0</a>.</p>

<p>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.67.0.tar.gz.</p>

<h2>lib</h2>

<p>This release adds <code>nghttp2_rand_callback</code>, and the internal hash map
is initialized with the seed sampled from this callback.</p>

<p>Some stream errors are now promoted to the connection errors.  This
means that an event that previously just resets a single stream now
closes a connection entirely.  The promoted errors are mostly
implementation errors.</p>

<p>We have some contradictory specifications around
<code>nghttp2_on_invalid_header</code> and <code>nghttp2_on_invalid_header2</code>
callbacks.  <code>nghttp2_on_invalid_header</code> says that if it is omitted, a
stream is reset.  Meanwhile, <code>nghttp2_on_invalid_header2</code> says that if
it is omitted, invalid field is silently ignored.  In actual
implementation, if both omitted, we treat it as stream error.  In
practice, it is often required not to bail out if invalid header is
received.  In this change, if both callbacks are omitted, invalid
field is silently ignored as the documentation of
<code>nghttp2_on_invalid_header2</code> says.</p>

<p>The &ldquo;glitch&rdquo; counter has been introduced.  Any suspicious activity
such as DATA frames to a stream which does not exist are counted to so
called &ldquo;glitch&rdquo; counter.  If it increases more than the configured
rate, GOAWAY is sent and the connection is closed.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.66.0]]></title>
    <link href="//nghttp2.org/blog/2025/06/17/nghttp2-v1-66-0/"/>
    <updated>2025-06-17T19:40:33+09:00</updated>
    <id>//nghttp2.org/blog/2025/06/17/nghttp2-v1-66-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.66.0">v1.66.0</a>.</p>

<p>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.66.0.tar.gz.</p>

<h2>lib</h2>

<p><code>nghttp2_submit_rst_stream</code> now does not add <code>RST_STREAM</code> frame more
than once.</p>

<h2>src</h2>

<p>The support for the draft HTTP/2 ALPNs (e.g., <code>h2-14</code>, <code>h2-16</code>) have
been removed.</p>

<h2>doc</h2>

<p>This release fixes build failure with rubydomain namespace.</p>

<h2>h2load</h2>

<p>QUIC is now enabled with OpenSSL >= 3.5.0.</p>

<h2>nghttpx</h2>

<p>QUIC is now enabled with OpenSSL >= 3.5.0.</p>

<p>The bug in Forwarded By parameter value that exhibits when a frontend
socket listens on wildcard address has been fixed.</p>

<p>The rate limiting for incoming QUIC traffic has been implemented.
<code>--read-rate</code> and <code>--read-burst</code> options are now applied to QUIC
connection as well.</p>

<p>Each worker thread has its listening TCP sockets.</p>

<p>The usage counts of a weight group are preserved after replacing
backends with backendconfig API if the name and weight of the groups
under the pattern have not changed.</p>

<p>OCSP stapling feature has been removed.</p>

<p>TLS session cache via memcached has been removed.</p>

<h2>nghttpd</h2>

<p>Support for <code>SSLKEYLOGFILE</code> has been added.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.65.0]]></title>
    <link href="//nghttp2.org/blog/2025/03/02/nghttp2-v1-65-0/"/>
    <updated>2025-03-02T16:31:58+09:00</updated>
    <id>//nghttp2.org/blog/2025/03/02/nghttp2-v1-65-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.65.0">v1.65.0</a>.</p>

<p>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.</p>

<h2>lib</h2>

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

<ul>
<li><code>nghttp2_session_change_stream_priority</code>: This function is noop.  It
always returns 0.</li>
<li><code>nghttp2_session_create_idle_stream</code>: This function is noop.  It
always returns 0.</li>
<li><code>nghttp2_submit_request</code>: <code>pri_spec</code> is ignored.</li>
<li><code>nghttp2_submit_request2</code>: <code>pri_spec</code> is ignored.</li>
<li><code>nghttp2_submit_headers</code>: <code>pri_spec</code> is ignored.</li>
<li><code>nghttp2_submit_priority</code>: This function is noop.  It always returns

<ol>
<li></li>
</ol>
</li>
<li><code>nghttp2_stream_get_parent</code>: This function always returns NULL.</li>
<li><code>nghttp2_stream_get_next_sibling</code>: This function always returns
NULL.</li>
<li><code>nghttp2_stream_get_previous_sibling</code>: This function always returns
NULL.</li>
<li><code>nghttp2_stream_get_first_child</code>: This function always returns NULL.</li>
<li><code>nghttp2_stream_get_weight</code>: This function always returns
<code>NGHTTP2_DEFAULT_WEIGHT</code>.</li>
<li><code>nghttp2_stream_get_sum_dependency_weight</code>: This function always
returns 0.</li>
</ul>


<p><code>nghttp2_option_set_server_fallback_rfc7540_priorities</code> and
<code>nghttp2_option_set_no_closed_streams</code> have also been deprecated, and
have no effect.</p>

<p>QNX build support has been added.</p>

<h2>cmake</h2>

<p>Disable src tests if <code>BUILD_TESTING</code> is <code>OFF</code>.</p>

<h2>src</h2>

<p>url-parser has been replaced with
<a href="https://github.com/ngtcp2/urlparse">urlparse</a>.</p>

<h2>h2load</h2>

<p>Account for bytes on closing connections.</p>

<h2>nghttp</h2>

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

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

<h2>nghttpd</h2>

<p>This change deprecates -<code>-no-rfc7540-pri</code> option.
<code>SETTINGS_NO_RFC7540_PRIORITIES</code> HTTP/2 setting is now always sent.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.64.0]]></title>
    <link href="//nghttp2.org/blog/2024/10/21/nghttp2-v1-64-0/"/>
    <updated>2024-10-21T20:47:53+09:00</updated>
    <id>//nghttp2.org/blog/2024/10/21/nghttp2-v1-64-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.64.0">v1.64.0</a>.</p>

<p>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.</p>

<h2>lib</h2>

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

<h2>cmake</h2>

<p>This release fixes c-ares v1.34.0 version detection failure.</p>

<h2>h2load</h2>

<p>This release fixes race condition on h1 connection close.</p>

<p>It also fixes UDP datagram send/recv metric.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.63.0]]></title>
    <link href="//nghttp2.org/blog/2024/08/27/nghttp2-v1-63-0/"/>
    <updated>2024-08-27T18:29:16+09:00</updated>
    <id>//nghttp2.org/blog/2024/08/27/nghttp2-v1-63-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.63.0">v1.63.0</a>.</p>

<p>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.</p>

<h2>lib</h2>

<p>Compile error emitted by old compilers is suppressed.</p>

<p>nghttp2.h undefines <code>NGHTTP2_NO_SSIZE_T</code> if <code>BUILDING_NGHTTP2</code> is
defined.</p>

<h2>src</h2>

<p>wolfSSL support has been added.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.62.0]]></title>
    <link href="//nghttp2.org/blog/2024/05/13/nghttp2-v1-62-0/"/>
    <updated>2024-05-13T17:44:24+09:00</updated>
    <id>//nghttp2.org/blog/2024/05/13/nghttp2-v1-62-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.62.0">v1.62.0</a>.</p>

<p>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.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.61.0]]></title>
    <link href="//nghttp2.org/blog/2024/04/04/nghttp2-v1-61-0/"/>
    <updated>2024-04-04T17:52:27+09:00</updated>
    <id>//nghttp2.org/blog/2024/04/04/nghttp2-v1-61-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.61.0">v1.61.0</a>.</p>

<p>This release includes security advisory.</p>

<h2>Security Advisory</h2>

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

<p>For more information, read <a href="https://github.com/nghttp2/nghttp2/security/advisories/GHSA-x6x3-gv8h-m57q">the security advisory</a>.</p>

<p>For other changes, refer to
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.61.0">v1.61.0</a>
release notes.</p>

<p>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.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.60.0]]></title>
    <link href="//nghttp2.org/blog/2024/03/01/nghttp2-v1-60-0/"/>
    <updated>2024-03-01T17:28:36+09:00</updated>
    <id>//nghttp2.org/blog/2024/03/01/nghttp2-v1-60-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.60.0">v1.60.0</a>.</p>

<h2>lib</h2>

<p><a href="https://datatracker.ietf.org/doc/html/rfc7540">RFC 7540</a> 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 <a href="https://datatracker.ietf.org/doc/html/rfc9113">RFC 9113</a>.  Consider
migrating <a href="https://datatracker.ietf.org/doc/html/rfc9218">RFC 9218</a>
extensible prioritization scheme.</p>

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

<p>New code should use new <code>nghttp2_ssize</code> APIs.  The existing
applications should consider migrating to new APIs.</p>

<p>The deprecated <code>ssize_t</code> APIs continue to work for backward
compatibility.</p>

<p>Here is the summary of the deprecated APIs and their replacements:</p>

<p>Callback functions:</p>

<ul>
<li><code>nghttp2_data_source_read_callback</code> => <code>nghttp2_data_source_read_callback2</code></li>
<li><code>nghttp2_data_source_read_length_callback</code> => <code>nghttp2_data_source_read_length_callback2</code></li>
<li><code>nghttp2_pack_extension_callback</code> => <code>nghttp2_pack_extension_callback2</code></li>
<li><code>nghttp2_recv_callback</code> => <code>nghttp2_recv_callback2</code></li>
<li><code>nghttp2_select_padding_callback</code> => <code>nghttp2_select_padding_callback2</code></li>
<li><code>nghttp2_send_callback</code> => <code>nghttp2_send_callback2</code></li>
</ul>


<p>Structs:</p>

<ul>
<li><code>nghttp2_data_provider</code> => <code>nghttp2_data_provider2</code></li>
</ul>


<p>Functions:</p>

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


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

<h2>build</h2>

<p>cmake build and install trees are now fixed.</p>

<p>The following dependencies have been updated:</p>

<ul>
<li>ngtcp2</li>
<li>nghttp3</li>
</ul>


<p>CUnit has been replaced with
<a href="https://github.com/ngtcp2/munit">ngtcp2/munit</a>.  munit is pulled via
git submodule.</p>

<p>The flags to build applications with libbrotli have been added.</p>

<h2>third-party</h2>

<p>llhttp has been updated.</p>

<p>mruby is updated to v3.3.0.</p>

<h2>h2load</h2>

<p><code>--sni</code> option has been added.</p>

<h2>src</h2>

<p>The certificate compression support with boringssl (or aws-lc) and
libbrotli has been added.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.59.0]]></title>
    <link href="//nghttp2.org/blog/2024/01/21/nghttp2-v1-59-0/"/>
    <updated>2024-01-21T18:21:58+09:00</updated>
    <id>//nghttp2.org/blog/2024/01/21/nghttp2-v1-59-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.59.0">v1.59.0</a>.</p>

<h2>lib</h2>

<p>This release adds API to get and parse RFC 9218 priority.</p>

<p><code>nghttp2_select_next_protocol()</code> has been deprecated.  Use
<code>nghttp2_select_alpn()</code> instead.</p>

<h2>build</h2>

<p>The following dependencies have been updated:</p>

<ul>
<li>ngtcp2</li>
<li>libbpf</li>
</ul>


<h2>h2load</h2>

<p>h2load now considers all h2 HEADERS when counting bytes and recording
TTFB.</p>

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

<p>h2load now ignores 1xx status code.</p>

<p>IPv6 address is now enclosed by square brackets when set in
<code>:authority</code> header field.</p>

<h2>nghttpx</h2>

<p>This release adds <code>SSL_CTX_set_recv_max_early_data()</code> call which
OpenSSL requires.</p>

<p><code>__FILE_NAME__</code> macro is preferred if available.</p>

<p>nghttpx now propagates stream priority from backend to frontend.</p>

<p>This release fixes the bug that nghttpx sends QUIC <code>RESET_STREAM</code> when
it receives <code>RESET_STREAM</code> from client.</p>

<h2>src</h2>

<p>This release drops old OpenSSL (&lt; 1.1.1) support.</p>

<p>Now bundled applications can be built with aws-lc.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.58.0]]></title>
    <link href="//nghttp2.org/blog/2023/10/27/nghttp2-v1-58-0/"/>
    <updated>2023-10-27T22:34:21+09:00</updated>
    <id>//nghttp2.org/blog/2023/10/27/nghttp2-v1-58-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.58.0">v1.58.0</a>.</p>

<h2>lib</h2>

<p>This release fixes build issues with cygwin and mingw.</p>

<h2>build</h2>

<p>This release speeds up warning option detection with cmake.</p>

<p>The following dependencies have been updated:</p>

<ul>
<li>ngtcp2</li>
<li>nghttp3</li>
</ul>


<h2>third-party</h2>

<p>neverbleed has been updated.</p>

<h2>nghttpx</h2>

<p>This release introduces stricter transfer-encoding checks.</p>

<h2>integration</h2>

<p>Enable http3 test with cmake.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.57.0]]></title>
    <link href="//nghttp2.org/blog/2023/10/10/nghttp2-v1-57-0/"/>
    <updated>2023-10-10T23:02:58+09:00</updated>
    <id>//nghttp2.org/blog/2023/10/10/nghttp2-v1-57-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.57.0">v1.57.0</a>.</p>

<p>This release includes security advisory.</p>

<h2>Security Advisory</h2>

<p>CVE-2023-44487: HTTP/2 Rapid Reset</p>

<p>For more information, read <a href="https://github.com/nghttp2/nghttp2/security/advisories/GHSA-vx74-f528-fxqg">the security advisory</a>.</p>

<h2>lib</h2>

<p>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
<code>nghttp2_option_set_stream_reset_rate_limit</code>.  It can also implement
its own rate limit by implementing <code>nghttp2_on_frame_recv_callback</code>
and check RST_STREAM frame.</p>

<h2>nghttpx</h2>

<p>This release fixes the bug that <code>--single-process</code> does not work.
It also fixes the bug that TLS connection is not rate limited.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.56.0]]></title>
    <link href="//nghttp2.org/blog/2023/09/04/nghttp2-v1-56-0/"/>
    <updated>2023-09-04T18:22:35+09:00</updated>
    <id>//nghttp2.org/blog/2023/09/04/nghttp2-v1-56-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.56.0">v1.56.0</a>.</p>

<h2>build</h2>

<p>The following dependencies have been updated:</p>

<ul>
<li>ngtcp2</li>
<li>nghttp3</li>
<li>BoringSSL</li>
<li>quictls</li>
<li>libbpf</li>
</ul>


<h2>third-party</h2>

<p>llhttp has been updated.</p>

<h2>nghttpx</h2>

<p>Rework is done in functions that send ECN bits.</p>

<p><code>--frontend-quic-congestion-controller=bbr2</code> has been renamed to
<code>--frontend-quic-congestion-controller=bbrv2</code>.</p>

<h2>nghttpx, h2load</h2>

<p>Fix issue that CMSG_DATA does not necessarily return an aligned
pointer.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.55.1]]></title>
    <link href="//nghttp2.org/blog/2023/07/14/nghttp2-v1-55-1/"/>
    <updated>2023-07-14T22:54:39+09:00</updated>
    <id>//nghttp2.org/blog/2023/07/14/nghttp2-v1-55-1</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.55.1">v1.55.1</a>.</p>

<p>This release includes security advisory.</p>

<h2>Security Advisory</h2>

<p>CVE-2023-35945: HTTP/2 memory leak in nghttp2 codec</p>

<p>For more information, read <a href="https://github.com/envoyproxy/envoy/security/advisories/GHSA-jfxv-29pc-x22r">the security advisory</a>.</p>

<p>This CVE was filed by envoyproxy/envoy project, and has already been
made public, and we did not take usual security procedure.  See below
why.</p>

<h2>lib</h2>

<p>This release fixes memory leak that happens when PUSH_PROMISE or
HEADERS frame cannot be sent, and <code>nghttp2_on_stream_close_callback</code>
fails with a fatal error.  For example, if GOAWAY frame has been
received, a HEADERS frame that opens new stream cannot be sent.</p>

<p>This issue has already been made public via
<a href="https://github.com/envoyproxy/envoy/security/advisories/GHSA-jfxv-29pc-x22r">CVE-2023-35945</a>
issued by envoyproxy/envoy project.  During embargo period,
<a href="https://github.com/nghttp2/nghttp2/pull/1929">the patch</a> to fix this bug
was accidentally submitted to nghttp2/nghttp2 repository.  And
they decided to disclose CVE early.  I was notified just 1.5 hours
before disclosure.  I had no time to respond.</p>

<p>PoC described in CVE is quite simple, but I think it is not enough to
trigger this bug.  While it is true that receiving GOAWAY prevents a
client from opening new stream, and nghttp2 enters error handling
branch, in order to cause the memory leak,
<code>nghttp2_session_close_stream</code> function must return a fatal error.
nghttp2 defines 2 fatal error codes:</p>

<ul>
<li><code>NGHTTP2_ERR_NOMEM</code></li>
<li><code>NGHTTP2_ERR_CALLBACK_FAILURE</code></li>
</ul>


<p><code>NGHTTP2_ERR_NOMEM</code>, as its name suggests, indicates out of memory.
It is unlikely that a process gets short of memory with this simple
PoC scenario unless application does something memory heavy
processing.</p>

<p><code>NGHTTP2_ERR_CALLBACK_FAILURE</code> is returned from application defined
callback function (<code>nghttp2_on_stream_close_callback</code>, in this case),
which indicates something fatal happened inside a callback, and a
connection must be closed immediately without any further action.  As
<code>nghttp2_on_stream_close_error_callback</code> documentation says, any error
code other than 0 or <code>NGHTTP2_ERR_CALLBACK_FAILURE</code> is treated as
fatal error code.  More specifically, it is treated as if
<code>NGHTTP2_ERR_CALLBACK_FAILURE</code> is returned.  I guess that envoy
returns <code>NGHTTP2_ERR_CALLBACK_FAILURE</code> or other error code which is
translated into <code>NGHTTP2_ERR_CALLBACK_FAILURE</code>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.55.0]]></title>
    <link href="//nghttp2.org/blog/2023/07/12/nghttp2-v1-55-0/"/>
    <updated>2023-07-12T17:37:27+09:00</updated>
    <id>//nghttp2.org/blog/2023/07/12/nghttp2-v1-55-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.55.0">v1.55.0</a>.</p>

<h2>build</h2>

<p>The following dependencies have been updated:</p>

<ul>
<li>ngtcp2</li>
<li>nghttp3</li>
<li>BoringSSL</li>
</ul>


<p>This release fixes build error without libev.</p>

<h2>third-party</h2>

<p>llhttp has been updated.</p>

<p>Cross-compiling mruby is now supported.</p>

<h2>nghttpx</h2>

<p>UDP_GRO is enabled for QUIC socket.</p>

<p>The initial QUIC packet number is now randomized.</p>

<h2>h2load</h2>

<p>UDP_GRO is enabled for QUIC socket.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.54.0]]></title>
    <link href="//nghttp2.org/blog/2023/06/07/nghttp2-v1-54-0/"/>
    <updated>2023-06-07T19:03:00+09:00</updated>
    <id>//nghttp2.org/blog/2023/06/07/nghttp2-v1-54-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.54.0">v1.54.0</a>.</p>

<h2>build</h2>

<p>The following dependencies have been updated:</p>

<ul>
<li>ngtcp2</li>
<li>nghttp3</li>
<li>OpenSSL(quictls)</li>
<li>BoringSSL</li>
<li>libbpf</li>
</ul>


<h2>h2load</h2>

<p>This release fixes HTTP/3 upload stall bug.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.53.0]]></title>
    <link href="//nghttp2.org/blog/2023/05/10/nghttp2-v1-53-0/"/>
    <updated>2023-05-10T18:33:26+09:00</updated>
    <id>//nghttp2.org/blog/2023/05/10/nghttp2-v1-53-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.53.0">v1.53.0</a>.</p>

<h2>lib</h2>

<p>libnghttp2 uses ngtcp2/sfparse to parse Structured Field Values.</p>

<h2>build</h2>

<p>The following dependencies have been updated:</p>

<ul>
<li>ngtcp2</li>
<li>nghttp3</li>
<li>OpenSSL(quictls)</li>
<li>BoringSSL</li>
</ul>


<h2>third-party</h2>

<p>Bumped mruby to 3.2.0.</p>

<h2>nghttpx</h2>

<p>nghttpx now sends NEW_TOKEN on path change.</p>

<p>This release fixes numeric hostname verification in peer certificate.</p>

<p>When quitting, nghttpx now waits for all worker processes to stop.
Previously, we just exit the event loop when the last process exits.
But the because of the bug, it does not work as intended.</p>

<p>nghttpx logs a correct PID on fork.</p>

<p>nghttpx now waits for new worker process to be ready before sending
graceful shutdown event to the existing worker processes to avoid down
time during configuration reload.</p>

<p>Fixes the bug that causes 400 response after HTTP upgrade failure.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.52.0]]></title>
    <link href="//nghttp2.org/blog/2023/02/13/nghttp2-v1-52-0/"/>
    <updated>2023-02-13T21:19:56+09:00</updated>
    <id>//nghttp2.org/blog/2023/02/13/nghttp2-v1-52-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.52.0">v1.52.0</a>.</p>

<h2>doc</h2>

<p><code>sphinx_rtd_theme</code> has been removed from the repository and archive.</p>

<h2>build</h2>

<p>The following dependencies have been updated:</p>

<ul>
<li>ngtcp2</li>
<li>nghttp3</li>
<li>OpenSSL(quictls)</li>
<li>BoringSSL</li>
<li>libbpf</li>
</ul>


<p>CMake build now checks core and extra components to find libevent.</p>

<h2>python</h2>

<p>The deprecated Python bindings has been removed.</p>

<h2>libnghttp2_asio</h2>

<p>The deprecated libnghttp2_asio has been removed.</p>

<h2>third-party</h2>

<p>llhttp and neverbleed have been updated.</p>

<h2>nghttpx</h2>

<p>This release fixes the bug that stalls TLS connection.</p>

<h2>integration</h2>

<p>This release adds more http3 integration tests.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Nghttp2 v1.51.0]]></title>
    <link href="//nghttp2.org/blog/2022/11/13/nghttp2-v1-51-0/"/>
    <updated>2022-11-13T16:06:01+09:00</updated>
    <id>//nghttp2.org/blog/2022/11/13/nghttp2-v1-51-0</id>
    <content type="html"><![CDATA[<p>We have released nghttp2
<a href="https://github.com/nghttp2/nghttp2/releases/tag/v1.51.0">v1.51.0</a>.</p>

<h2>lib</h2>

<p>This release adds casts to silence implicit conversion warnings for
windows build.</p>

<h2>doc</h2>

<p>Updated packages described in README based on Ubuntu 22.04.</p>

<p>Android documentation has been updated.</p>

<h2>build</h2>

<p>The following dependencies have been updated:</p>

<ul>
<li>Android NDK</li>
<li>libbpf</li>
<li>OpenSSL</li>
<li>ngtcp2</li>
</ul>


<p>Python bindings are now disabled by default because it has been
deprecated.</p>

<h2>third-party</h2>

<p>llhttp has been updated.</p>

<h2>nghttpx</h2>

<p>This release fixes <code>affinity-cookie-stickiness</code> parameter handling.</p>

<h2>integration</h2>

<p>This release adds http3 integration test.</p>
]]></content>
  </entry>
  
</feed>
