NGHTTP(1)
๐ NGHTTP(1) โ the nghttp page, but make it cute
okay bestie, so this is from nghttp2, and we're talking about nghttp โ literally the HTTP/2 client. manual name is NGHTTP(1) if you're keeping score. pull up a chair, we're doing this ๐
โจ NAME โจ
nghttp โ HTTP/2 client. that's it, that's the vibe. ๐ฆ
๐ธ SYNOPSIS ๐ธ
nghttp [OPTIONS]... <URI>...
๐ DESCRIPTION ๐
HTTP/2 client. she's a client. she does HTTP/2. iconic.
- URI โ Specify URI to access. (yes plural possible, look at the synopsis, we're eating good ๐)
๐ OPTIONS ๐
-v,--verboseโ Print debug information such as reception and transmission of frames and name/value pairs. and listen โ Specifying this option multiple times increases verbosity. so if once isn't enough, stack it. no cap. ๐-n,--null-outโ Discard downloaded data. don't want it? don't keep it. bye ๐-O,--remote-nameโ Save download data in the current directory. The filename is derived from URI. If URI ends with/,index.htmlis used as a filename. Not implemented yet. ๐ญ so pretty but she's not here yet fr fr-t,--timeout=<DURATION>โ Timeout each request after DURATION. Set0to disable timeout. zero means never, she's patient โณ-w,--window-bits=<N>โ Sets the stream level initial window size to2**<N>-1. math but make it stream-level ๐งฎ-W,--connection-window-bits=<N>โ Sets the connection level initial window size to2**<N>-1. same energy, but the whole connection this time ๐ซถ-a,--get-assetsโ Download assets such as stylesheets, images and script files linked from the downloaded resource. Only links whose origins are the same with the linking resource will be downloaded. nghttp prioritizes resources using HTTP/2 dependency based priority. The priority order, from highest to lowest, ishtmlitself,css,javascriptandimages. she's got a whole ranking system and honestly? obsessed. ๐-s,--statโ Print statistics. numbers!! love that for us ๐-H,--header=<HEADER>โ Add a header to the requests. Example:-H':method: PUT'. look at that exact syntax, don't freestyle it ๐--trailer=<HEADER>โ Add a trailer header to the requests. HEADER must not include pseudo header field (header field name starting with':'). To send trailer, one must use-doption to send request body. Example:--trailer 'foo: bar'. so like, no colon-starting names in there, and you NEED-dor it's not happening, periodt ๐ซ--cert=<CERT>โ Use the specified client certificate file. The file must be in PEM format. PEM or nothing bestie ๐--key=<KEY>โ Use the client private key file. The file must be in PEM format. also PEM. they match. it's giving couple goals ๐-d,--data=<PATH>โ PostFILEto server. If'-'is given, data will be read from stdin. dash = stdin, you know the drill ๐-m,--multiply=<N>โ Request each URI N times. By default, same URI is not requested twice. This option disables it too. so yeah she's got dedupe on by default and this option turns it ALL the way off ๐-u,--upgradeโ Perform HTTP Upgrade for HTTP/2. This option is ignored if the request URI hashttpsscheme. If-dis used, the HTTP upgrade request is performed withOPTIONSmethod. noted: https? she ignores you. and with-dit'sOPTIONS, not what you'd expect โ love that for her ๐--extpri=<PRI>โ Sets RFC 9218 priority of given URI. PRI must be the wire format of priority header field (e.g.,"u=3,i"). This option can be used multiple times, and N-th--extprioption sets priority of N-th URI in the command line. If the number of this option is less than the number of URI, the last option value is repeated. If there is no--extprioption, urgency is3, and incremental is false. okay so it's positional-ish, and the last one gets copy-pasted down the line, and the default vibe is urgency3, incremental false. got it ๐-M,--peer-max-concurrent-streams=<N>โ Use N asSETTINGS_MAX_CONCURRENT_STREAMSvalue of remote endpoint as if it is received inSETTINGSframe.
Default: 100
fake it like you received it. pretend play but for MAX_CONCURRENT_STREAMS ๐
-c,--header-table-size=<SIZE>โ Specify decoder header table size. If this option is used multiple times, and the minimum value among the given values except for last one is strictly less than the last value, that minimum value is set inSETTINGSframe payload before the last value, to simulate multiple header table size change. yeah this one's a mouthful. the point is: multiple uses can simulate multiple header table size change. don't skim it, she's being precise ๐ง--encoder-header-table-size=<SIZE>โ Specify encoder header table size. The decoder (server) specifies the maximum dynamic table size it accepts. Then the negotiated dynamic table size is the minimum of this option value and the value which server specified. so: whoever's smaller wins. negotiation, but make it table sizes ๐ค-b,--padding=<N>โ Add at most N bytes to a frame payload as padding. Specify0to disable padding. at most!! and0= off ๐-r,--har=<PATH>โ Output HTTP transactions PATH in HAR format. If'-'is given, data is written to stdout. dash again = stdout, and she's writing HAR ๐ฅ--colorโ Force colored log output. colors!! forced, not requested ๐--continuationโ Send large header to testCONTINUATION. she's testing. it's a whole experiment ๐ฌ--no-content-lengthโ Don't sendcontent-lengthheader field. skip it ๐--hexdumpโ Display the incoming traffic in hexadecimal (Canonical hex+ASCII display). If SSL/TLS is used, decrypted data are used. so if it's TLS you get the decrypted stuff, not the scrambled stuff. iconic ๐ข--no-pushโ Disable server push. not today, server! ๐--max-concurrent-streams=<N>โ The number of concurrent pushed streams this client accepts. how many pushes she'll tolerate, that's the number ๐ซถ--expect-continueโ Perform an Expect/Continue handshake: wait to sendDATA(up to a short timeout) until the server sends a100 Continueinterim response. This option is ignored unless combined with the-doption. so she waits (a lil bit) for that100 Continueโ and it does nothing unless you also pass-d. ๐-y,--no-verify-peerโ Suppress warning on server certificate verification failure. it just mutes the warning, and honestly? be careful out there bestie ๐--ktlsโ Enable ktls. short. sweet. enabled. โจ--versionโ Display version information and exit. bye after that ๐ฆ-h,--helpโ Display this help and exit. hi and bye ๐
๐ the small print about <SIZE> and <DURATION> ๐
The SIZE argument is an integer and an optional unit (e.g., 10K is 10 * 1024). Units are K, M and G (powers of 1024).
The DURATION argument is an integer and an optional unit (e.g., 1s is 1 second and 500ms is 500 milliseconds). Units are h, m, s or ms (hours, minutes, seconds and milliseconds, respectively). If a unit is omitted, a second is used as unit.
so like โ no unit on the duration means seconds. don't come for me, that's just what it says ๐ซถ
๐ฅ SEE ALSO ๐ฅ
the whole friend group. go say hi ๐
๐ Author ๐
Tatsuhiro Tsujikawa
๐ธ Copyright ๐ธ
2012, 2015, 2016, Tatsuhiro Tsujikawa
okay that's the whole thing, and one last thing โ this page is from version 1.70.0, dated Jul 29, 2026, out of nghttp2. that's a wrap, bestie, you're gonna do great ๐โจ๐ฆ
๐ฆ where this page comes from
- alpine 3.24: nghttp2-doc 1.70.0-r0 ยท MIT
- nixpkgs unstable: nghttp2 1.70.0
- ubuntu stonking: nghttp2-client 1.70.0-1 ยท MIT
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms