nghttp [OPTIONS]... <URI>...
HTTP/2 client
- <URI>
- Specify URI to access.
- -v, --verbose
- Print debug information such as reception and transmission of frames and
name/value pairs. Specifying this option multiple times increases
verbosity.
- -O, --remote-name
- Save download data in the current directory. The filename is derived from
URI. If URI ends with '/', 'index.html' is used as a filename. Not
implemented yet.
- -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, is html itself, css, javascript and images.
- 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 -d option to send request body. Example:
--trailer 'foo: bar'.
- --cert=<CERT>
- Use the specified client certificate file. The file must be in PEM
format.
- --key=<KEY>
- Use the client private key file. The file must be in PEM format.
- -d,
--data=<PATH>
- Post FILE to server. If '-' is given, data will be read from stdin.
- -m,
--multiply=<N>
- Request each URI <N> times. By default, same URI is not requested
twice. This option disables it too.
- -u, --upgrade
- Perform HTTP Upgrade for HTTP/2. This option is ignored if the request URI
has https scheme. If -d is used, the HTTP upgrade request is
performed with OPTIONS method.
- -p,
--weight=<WEIGHT>
- Sets weight of given URI. This option can be used multiple times, and N-th
-p option sets weight of N-th URI in the command line. If the
number of -p option is less than the number of URI, the last
-p option value is repeated. If there is no -p option,
default weight, 16, is assumed. The valid value range is [1, 256],
inclusive.
- -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 in SETTINGS
frame payload before the last value, to simulate multiple header table
size change.
- --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.
- -b,
--padding=<N>
- Add at most <N> bytes to a frame payload as padding. Specify 0 to
disable padding.
- -r,
--har=<PATH>
- Output HTTP transactions <PATH> in HAR format. If '-' is given, data
is written to stdout.
- --no-dep
- Don't send dependency based priority hint to server.
- --hexdump
- Display the incoming traffic in hexadecimal (Canonical hex+ASCII display).
If SSL/TLS is used, decrypted data are used.
- --expect-continue
- Perform an Expect/Continue handshake: wait to send DATA (up to a short
timeout) until the server sends a 100 Continue interim response. This
option is ignored unless combined with the -d option.
- --version
- Display version information and exit.
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.
nghttp sends priority hints to server by default unless
--no-dep is used. nghttp mimics the way Firefox employs to manages
dependency using idle streams. We follows the behaviour of Firefox Nightly
as of April, 2015, and nghttp's behaviour is very static and could be
different from Firefox in detail. But reproducing the same behaviour of
Firefox is not our goal. The goal is provide the easy way to test out the
dependency priority in server implementation.
When connection is established, nghttp sends 5 PRIORITY frames to
idle streams 3, 5, 7, 9 and 11 to create "anchor" nodes in
dependency tree:
+-----+
|id=0 |
+-----+
^ ^ ^
w=201 / | \ w=1
/ | \
/ w=101| \
+-----+ +-----+ +-----+
|id=3 | |id=5 | |id=7 |
+-----+ +-----+ +-----+
^ ^
w=1 | w=1 |
| |
+-----+ +-----+
|id=11| |id=9 |
+-----+ +-----+
In the above figure, id means stream ID, and w means
weight. The stream 0 is non-existence stream, and forms the root of the
tree. The stream 7 and 9 are not used for now.
The URIs given in the command-line depend on stream 11 with the
weight given in -p option, which defaults to 16.
If -a option is used, nghttp parses the resource pointed by
URI given in command-line as html, and extracts resource links from it. When
requesting those resources, nghttp uses dependency according to its resource
type.
For CSS, and Javascript files inside "head" element,
they depend on stream 3 with the weight 2. The Javascript files outside
"head" element depend on stream 5 with the weight 2. The mages
depend on stream 11 with the weight 12. The other resources (e.g., icon)
depend on stream 11 with the weight 2.
2012, 2015, 2016, Tatsuhiro Tsujikawa