NGHTTP(1) nghttp2 NGHTTP(1)NAMEnghttp - HTTP/2 client
SYNOPSISnghttp [OPTIONS]... <URI>...
DESCRIPTION
HTTP/2 client
<URI> Specify URI to access.
OPTIONS-v, --verbose
Print debug information such as reception and trans‐
mission of frames and name/value pairs. Specifying this option
multiple times increases verbosity.
-n, --null-out
Discard downloaded data.
-O, --remote-name
Save download data in the current directory. The file‐
name is derived from URI. If URI ends with '/',
'index.html' is used as a filename. Not implemented yet.
-t, --timeout=<DURATION>
Timeout each request after <DURATION>. Set 0 to disable time‐
out.
-w, --window-bits=<N>
Sets the stream level initial window size to 2**<N>-1.
-W, --connection-window-bits=<N>
Sets the connection level initial window size to
2**<N>-1.
-a, --get-assets
Download assets such as stylesheets, images and script files
linked from the downloaded resource. Only links whose ori‐
gins are the same with the linking resource will be down‐
loaded. nghttp prioritizes resources using HTTP/2 dependency
based priority. The priority order, from highest to lowest,
is html itself, css, javascript and images.
-s, --stat
Print statistics.
-H, --header=<HEADER>
Add a header to the requests. Example: -H':method: PUT'
--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 -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 priority group weight. The valid value range is [1, 256],
inclusive.
Default: 16
-M, --peer-max-concurrent-streams=<N>
Use <N> as SETTINGS_MAX_CONCURRENT_STREAMS value of remote
endpoint as if it is received in SETTINGS frame.
Default: 100
-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.
-b, --padding=<N>
Add at most <N> bytes to a frame payload as padding. Spec‐
ify 0 to disable padding.
-r, --har=<PATH>
Output HTTP transactions <PATH> in HAR format. If '-' is
given, data is written to stdout.
--color
Force colored log output.
--continuation
Send large header to test CONTINUATION.
--no-content-length
Don't send content-length header field.
--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.
--no-push
Disable server push.
--max-concurrent-streams=<N>
The number of concurrent pushed streams this client
accepts.
--version
Display version information and exit.
-h, --help
Display this help 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.
DEPENDENCY BASED PRIORITYnghttp 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 differ‐
ent 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" ele‐
ment 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.
SEE ALSOnghttpd(1), nghttpx(1), h2load(1)AUTHOR
Tatsuhiro Tsujikawa
COPYRIGHT
2012, 2015, Tatsuhiro Tsujikawa
1.6.0 December 23, 2015 NGHTTP(1)