...

Text file src/golang.org/x/net/http2/h2i/README.md

Documentation: golang.org/x/net/http2/h2i

     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 install golang.org/x/net/http2/h2i@latest
    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

View as plain text