README.md
1# h2i
2
3**h2i** is an interactive HTTP/2 ("h2") console debugger. Miss the good ol'
4days of telnetting to your HTTP/1.n servers? We're bringing you
5back.
6
7Features:
8- send raw HTTP/2 frames
9 - PING
10 - SETTINGS
11 - HEADERS
12 - etc
13- type in HTTP/1.n and have it auto-HPACK/frame-ify it for HTTP/2
14- pretty print all received HTTP/2 frames from the peer (including HPACK decoding)
15- tab completion of commands, options
16
17Not yet features, but soon:
18- unnecessary CONTINUATION frames on short boundaries, to test peer implementations
19- request bodies (DATA frames)
20- send invalid frames for testing server implementations (supported by underlying Framer)
21
22Later:
23- act like a server
24
25## Installation
26
27```
28$ go get golang.org/x/net/http2/h2i
29$ h2i <host>
30```
31
32## Demo
33
34```
35$ h2i
36Usage: h2i <hostname>
37
38 -insecure
39 Whether to skip TLS cert validation
40 -nextproto string
41 Comma-separated list of NPN/ALPN protocol names to negotiate. (default "h2,h2-14")
42
43$ h2i google.com
44Connecting to google.com:443 ...
45Connected to 74.125.224.41:443
46Negotiated protocol "h2-14"
47[FrameHeader SETTINGS len=18]
48 [MAX_CONCURRENT_STREAMS = 100]
49 [INITIAL_WINDOW_SIZE = 1048576]
50 [MAX_FRAME_SIZE = 16384]
51[FrameHeader WINDOW_UPDATE len=4]
52 Window-Increment = 983041
53
54h2i> PING h2iSayHI
55[FrameHeader PING flags=ACK len=8]
56 Data = "h2iSayHI"
57h2i> headers
58(as HTTP/1.1)> GET / HTTP/1.1
59(as HTTP/1.1)> Host: ip.appspot.com
60(as HTTP/1.1)> User-Agent: h2i/brad-n-blake
61(as HTTP/1.1)>
62Opening Stream-ID 1:
63 :authority = ip.appspot.com
64 :method = GET
65 :path = /
66 :scheme = https
67 user-agent = h2i/brad-n-blake
68[FrameHeader HEADERS flags=END_HEADERS stream=1 len=77]
69 :status = "200"
70 alternate-protocol = "443:quic,p=1"
71 content-length = "15"
72 content-type = "text/html"
73 date = "Fri, 01 May 2015 23:06:56 GMT"
74 server = "Google Frontend"
75[FrameHeader DATA flags=END_STREAM stream=1 len=15]
76 "173.164.155.78\n"
77[FrameHeader PING len=8]
78 Data = "\x00\x00\x00\x00\x00\x00\x00\x00"
79h2i> ping
80[FrameHeader PING flags=ACK len=8]
81 Data = "h2i_ping"
82h2i> ping
83[FrameHeader PING flags=ACK len=8]
84 Data = "h2i_ping"
85h2i> ping
86[FrameHeader GOAWAY len=22]
87 Last-Stream-ID = 1; Error-Code = PROTOCOL_ERROR (1)
88
89ReadFrame: EOF
90```
91
92## Status
93
94Quick few hour hack. So much yet to do. Feel free to file issues for
95bugs or wishlist items, but [@bmizerany](https://github.com/bmizerany/)
96and I aren't yet accepting pull requests until things settle down.
97
98