|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- # h2i
-
- **h2i** is an interactive HTTP/2 ("h2") console debugger. Miss the good ol'
- days of telnetting to your HTTP/1.n servers? We're bringing you
- back.
-
- Features:
- - send raw HTTP/2 frames
- - PING
- - SETTINGS
- - HEADERS
- - etc
- - type in HTTP/1.n and have it auto-HPACK/frame-ify it for HTTP/2
- - pretty print all received HTTP/2 frames from the peer (including HPACK decoding)
- - tab completion of commands, options
-
- Not yet features, but soon:
- - unnecessary CONTINUATION frames on short boundaries, to test peer implementations
- - request bodies (DATA frames)
- - send invalid frames for testing server implementations (supported by underlying Framer)
-
- Later:
- - act like a server
-
- ## Installation
-
- ```
- $ go get golang.org/x/net/http2/h2i
- $ h2i <host>
- ```
-
- ## Demo
-
- ```
- $ h2i
- Usage: h2i <hostname>
-
- -insecure
- Whether to skip TLS cert validation
- -nextproto string
- Comma-separated list of NPN/ALPN protocol names to negotiate. (default "h2,h2-14")
-
- $ h2i google.com
- Connecting to google.com:443 ...
- Connected to 74.125.224.41:443
- Negotiated protocol "h2-14"
- [FrameHeader SETTINGS len=18]
- [MAX_CONCURRENT_STREAMS = 100]
- [INITIAL_WINDOW_SIZE = 1048576]
- [MAX_FRAME_SIZE = 16384]
- [FrameHeader WINDOW_UPDATE len=4]
- Window-Increment = 983041
-
- h2i> PING h2iSayHI
- [FrameHeader PING flags=ACK len=8]
- Data = "h2iSayHI"
- h2i> headers
- (as HTTP/1.1)> GET / HTTP/1.1
- (as HTTP/1.1)> Host: ip.appspot.com
- (as HTTP/1.1)> User-Agent: h2i/brad-n-blake
- (as HTTP/1.1)>
- Opening Stream-ID 1:
- :authority = ip.appspot.com
- :method = GET
- :path = /
- :scheme = https
- user-agent = h2i/brad-n-blake
- [FrameHeader HEADERS flags=END_HEADERS stream=1 len=77]
- :status = "200"
- alternate-protocol = "443:quic,p=1"
- content-length = "15"
- content-type = "text/html"
- date = "Fri, 01 May 2015 23:06:56 GMT"
- server = "Google Frontend"
- [FrameHeader DATA flags=END_STREAM stream=1 len=15]
- "173.164.155.78\n"
- [FrameHeader PING len=8]
- Data = "\x00\x00\x00\x00\x00\x00\x00\x00"
- h2i> ping
- [FrameHeader PING flags=ACK len=8]
- Data = "h2i_ping"
- h2i> ping
- [FrameHeader PING flags=ACK len=8]
- Data = "h2i_ping"
- h2i> ping
- [FrameHeader GOAWAY len=22]
- Last-Stream-ID = 1; Error-Code = PROTOCOL_ERROR (1)
-
- ReadFrame: EOF
- ```
-
- ## Status
-
- Quick few hour hack. So much yet to do. Feel free to file issues for
- bugs or wishlist items, but [@bmizerany](https://github.com/bmizerany/)
- and I aren't yet accepting pull requests until things settle down.
-
|