nghttp2 is a C library. It is an implementation of HTTP/2.
nghttp2 was created by Tatsuhiro Tsujikawa as a derivative of spdylay, an implementation of SPDY, a communications protocol created by Google in 2009, in C.
Several well-known projects use nghttp2 to implement HTTP/2, including Apache and cURL.
nghttp2 will send a <code>WINDOW_UPDATE</code> frame upon consuming more than half of the flow control window. For instance, if the sender specifies the <code>SETTINGS_INITIAL_WINDOW_SIZE</code> as 65,535 octets in the <code>SETTINGS</code> frame, nghttp2 will send a <code>WINDOW_UPDATE</code> frame upon exceeding 32,768 octets. The initial window size may be changed using the <code>-w</code> and <code>-W</code> flags.
nghttp2 offers multiple tools. nghttp is a command-line tool that uses nghttp2 to output HTTP/2 messages from a URL. nghttp's dependency-based priority is based on Firefox; when a connection is established, nghttp sends five <code>PRIORITY</code> frames. Other tools provided include nghttpd, an HTTP/2 server, nghttpx, an HTTP/2 proxy, h2load, an HTTP/2 load testing tool, and inflatehd and deflatehd, tools to decompress and compress using the HPACK header compression algorithm.
nghttp3 is an implementation of HTTP/3 in C and authored by Tsujikawa. nghttp3 uses the QUIC network protocol designed by Jim Roskind at Google.