chrome-http2-log-parser
chrome-http2-log-parser copied to clipboard
nghttp output parser
The nghttp
tool outputs a different style log than Chrome. It would be great if a log like this could be another input type.
-> % nghttp -navs https://localhost:9000/index-separate.html
[ 0.002] Connected
[ 0.009][NPN] server offers:
* h2
* http/1.1
The negotiated protocol: h2
[ 0.025] send SETTINGS frame <length=12, flags=0x00, stream_id=0>
(niv=2)
[SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
[SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
[ 0.025] send PRIORITY frame <length=5, flags=0x00, stream_id=3>
(dep_stream_id=0, weight=201, exclusive=0)
[ 0.025] send PRIORITY frame <length=5, flags=0x00, stream_id=5>
(dep_stream_id=0, weight=101, exclusive=0)
[ 0.025] send PRIORITY frame <length=5, flags=0x00, stream_id=7>
(dep_stream_id=0, weight=1, exclusive=0)
[ 0.025] send PRIORITY frame <length=5, flags=0x00, stream_id=9>
(dep_stream_id=7, weight=1, exclusive=0)
[ 0.025] send PRIORITY frame <length=5, flags=0x00, stream_id=11>
(dep_stream_id=3, weight=1, exclusive=0)
[ 0.025] send HEADERS frame <length=53, flags=0x25, stream_id=13>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=11, weight=16, exclusive=0)
; Open new stream
:method: GET
:path: /index-separate.html
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.057] recv SETTINGS frame <length=18, flags=0x00, stream_id=0>
(niv=3)
[SETTINGS_ENABLE_PUSH(0x02):0]
[SETTINGS_INITIAL_WINDOW_SIZE(0x04):1048576]
[SETTINGS_MAX_HEADER_LIST_SIZE(0x06):81920]
[ 0.057] recv WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=983041)
[ 0.057] recv SETTINGS frame <length=0, flags=0x01, stream_id=0>
; ACK
(niv=0)
[ 0.057] recv (stream_id=13) :status: 200
[ 0.057] recv (stream_id=13) content-type: text/html
[ 0.058] recv HEADERS frame <length=10, flags=0x04, stream_id=13>
; END_HEADERS
(padlen=0)
; First response header
[ 0.058] send SETTINGS frame <length=0, flags=0x01, stream_id=0>
; ACK
(niv=0)
[ 0.069] recv DATA frame <length=874, flags=0x00, stream_id=13>
[ 0.069] recv DATA frame <length=0, flags=0x01, stream_id=13>
; END_STREAM
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=15>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=0
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=17>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=1
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=19>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=2
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=21>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=3
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=23>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=4
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=25>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=5
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=27>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=6
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=29>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=7
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=31>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=8
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.073] send HEADERS frame <length=36, flags=0x25, stream_id=33>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=5, weight=2, exclusive=0)
; Open new stream
:method: GET
:path: /common/libs/jquery.min.js?z=9
:scheme: https
:authority: localhost:9000
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.3.4
[ 0.100] recv (stream_id=15) :status: 200
[ 0.100] recv (stream_id=15) content-type: application/javascript
[ 0.100] recv HEADERS frame <length=19, flags=0x04, stream_id=15>
; END_HEADERS
(padlen=0)
; First response header
[ 0.100] recv (stream_id=17) :status: 200
[ 0.100] recv (stream_id=17) content-type: application/javascript
[ 0.100] recv HEADERS frame <length=2, flags=0x04, stream_id=17>
; END_HEADERS
(padlen=0)
; First response header
[ 0.100] recv (stream_id=19) :status: 200
[ 0.100] recv (stream_id=19) content-type: application/javascript
[ 0.100] recv HEADERS frame <length=2, flags=0x04, stream_id=19>
; END_HEADERS
(padlen=0)
; First response header
[ 0.100] recv (stream_id=21) :status: 200
[ 0.117] recv (stream_id=21) content-type: application/javascript
[ 0.117] recv HEADERS frame <length=2, flags=0x04, stream_id=21>
; END_HEADERS
(padlen=0)
; First response header
[ 0.117] recv (stream_id=23) :status: 200
[ 0.117] recv (stream_id=23) content-type: application/javascript
[ 0.117] recv HEADERS frame <length=2, flags=0x04, stream_id=23>
; END_HEADERS
(padlen=0)
; First response header
[ 0.118] recv (stream_id=25) :status: 200
[ 0.118] recv (stream_id=25) content-type: application/javascript
[ 0.118] recv HEADERS frame <length=2, flags=0x04, stream_id=25>
; END_HEADERS
(padlen=0)
; First response header
[ 0.118] recv (stream_id=27) :status: 200
[ 0.118] recv (stream_id=27) content-type: application/javascript
[ 0.132] recv HEADERS frame <length=2, flags=0x04, stream_id=27>
; END_HEADERS
(padlen=0)
; First response header
[ 0.132] recv (stream_id=29) :status: 200
[ 0.132] recv (stream_id=29) content-type: application/javascript
[ 0.132] recv HEADERS frame <length=2, flags=0x04, stream_id=29>
; END_HEADERS
(padlen=0)
; First response header
[ 0.132] recv (stream_id=31) :status: 200
[ 0.132] recv (stream_id=31) content-type: application/javascript
[ 0.132] recv HEADERS frame <length=2, flags=0x04, stream_id=31>
; END_HEADERS
(padlen=0)
; First response header
[ 0.132] recv (stream_id=33) :status: 200
[ 0.132] recv (stream_id=33) content-type: application/javascript
[ 0.132] recv HEADERS frame <length=2, flags=0x04, stream_id=33>
; END_HEADERS
(padlen=0)
; First response header
[ 0.132] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.132] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.132] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.132] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.132] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.132] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.132] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.132] recv DATA frame <length=7317, flags=0x00, stream_id=21>
[ 0.132] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=33642)
[ 0.132] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=21>
(window_size_increment=32768)
[ 0.134] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.134] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.134] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=40085)
[ 0.135] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.135] recv DATA frame <length=874, flags=0x00, stream_id=21>
[ 0.135] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.135] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=21>
(window_size_increment=32767)
[ 0.136] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.137] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.137] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.137] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.137] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=33642)
[ 0.137] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.137] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.138] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.138] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.138] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.138] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.138] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.140] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.140] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.140] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.140] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.140] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.140] recv DATA frame <length=1, flags=0x00, stream_id=21>
[ 0.141] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.141] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.142] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.142] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.142] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32769)
[ 0.143] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.143] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.144] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.144] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.144] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.146] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.146] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.146] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=19>
(window_size_increment=32768)
[ 0.146] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.146] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.146] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=15>
(window_size_increment=32768)
[ 0.146] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.149] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.149] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.149] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.149] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.149] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=25>
(window_size_increment=32768)
[ 0.149] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=27>
(window_size_increment=32768)
[ 0.149] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=17>
(window_size_increment=32768)
[ 0.149] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.150] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.150] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.150] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=29>
(window_size_increment=32768)
[ 0.150] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.151] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.151] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=33>
(window_size_increment=32768)
[ 0.151] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.151] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=23>
(window_size_increment=32768)
[ 0.152] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.152] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.153] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.153] recv DATA frame <length=8192, flags=0x00, stream_id=21>
[ 0.153] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.156] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.156] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.157] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.157] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.157] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.157] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=31>
(window_size_increment=32768)
[ 0.159] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.159] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.159] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.159] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.159] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.161] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.161] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.162] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.162] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.162] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.162] recv DATA frame <length=2460, flags=0x00, stream_id=21>
[ 0.162] recv DATA frame <length=0, flags=0x01, stream_id=21>
; END_STREAM
[ 0.165] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.165] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.165] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.165] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.165] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=35228)
[ 0.166] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.166] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.166] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=19>
(window_size_increment=32768)
[ 0.166] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.166] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.166] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.167] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.167] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.167] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=25>
(window_size_increment=32768)
[ 0.167] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=27>
(window_size_increment=32768)
[ 0.167] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.167] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.167] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.168] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.168] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.168] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=29>
(window_size_increment=32768)
[ 0.182] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.182] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.182] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.182] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.182] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.182] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.182] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=15>
(window_size_increment=32768)
[ 0.182] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.182] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=33>
(window_size_increment=32768)
[ 0.182] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=17>
(window_size_increment=32768)
[ 0.182] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.184] recv DATA frame <length=8192, flags=0x00, stream_id=19>
[ 0.184] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.184] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.184] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.184] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.186] recv DATA frame <length=8192, flags=0x00, stream_id=25>
[ 0.186] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.186] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.186] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.186] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=32768)
[ 0.186] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=23>
(window_size_increment=32768)
[ 0.188] recv DATA frame <length=2460, flags=0x00, stream_id=19>
[ 0.188] recv DATA frame <length=8192, flags=0x00, stream_id=27>
[ 0.188] recv DATA frame <length=8192, flags=0x00, stream_id=29>
[ 0.188] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.188] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.188] recv DATA frame <length=0, flags=0x01, stream_id=19>
; END_STREAM
[ 0.188] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=35228)
[ 0.188] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=31>
(window_size_increment=32768)
[ 0.189] recv DATA frame <length=2460, flags=0x00, stream_id=25>
[ 0.189] recv DATA frame <length=2460, flags=0x00, stream_id=27>
[ 0.189] recv DATA frame <length=2460, flags=0x00, stream_id=29>
[ 0.189] recv DATA frame <length=8192, flags=0x00, stream_id=33>
[ 0.189] recv DATA frame <length=8192, flags=0x00, stream_id=15>
[ 0.189] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.189] recv DATA frame <length=0, flags=0x01, stream_id=25>
; END_STREAM
[ 0.189] recv DATA frame <length=0, flags=0x01, stream_id=27>
; END_STREAM
[ 0.189] recv DATA frame <length=0, flags=0x01, stream_id=29>
; END_STREAM
[ 0.191] recv DATA frame <length=2460, flags=0x00, stream_id=33>
[ 0.191] recv DATA frame <length=2460, flags=0x00, stream_id=15>
[ 0.191] recv DATA frame <length=8192, flags=0x00, stream_id=17>
[ 0.191] recv DATA frame <length=8192, flags=0x00, stream_id=23>
[ 0.191] recv DATA frame <length=8192, flags=0x00, stream_id=31>
[ 0.191] recv DATA frame <length=0, flags=0x01, stream_id=33>
; END_STREAM
[ 0.191] recv DATA frame <length=0, flags=0x01, stream_id=15>
; END_STREAM
[ 0.191] recv DATA frame <length=2460, flags=0x00, stream_id=17>
[ 0.191] recv DATA frame <length=2460, flags=0x00, stream_id=23>
[ 0.191] recv DATA frame <length=0, flags=0x01, stream_id=17>
; END_STREAM
[ 0.191] recv DATA frame <length=0, flags=0x01, stream_id=23>
; END_STREAM
[ 0.191] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=34416)
[ 0.192] recv DATA frame <length=4083, flags=0x00, stream_id=31>
[ 0.192] recv DATA frame <length=6569, flags=0x00, stream_id=31>
[ 0.192] recv DATA frame <length=0, flags=0x01, stream_id=31>
; END_STREAM
[ 0.192] send WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=36039)
[ 0.192] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
(last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[])
I think @summerwind may be doing similar parsing of the nghttpd server output on an as-yet unpublished piece of work
@LPardue it was actually @summerwind's screenshot (much prettier than what I've made so far!) from earlier this year that inspired me to make this.
I have released very rough prototype ;-) https://github.com/summerwind/nghttp2-stream-analyzer
Awesome both!
I really like this visualisation.
BTW @summerwind, I saw you had a desire to be able to analyze Wireshark/PCAP files, in order to make this kind of parser a little less tool specific. Did you have much luck?
Yeah, I'd like to analyze h2 communication between each browsers and servers. I thought that the Wireshark meets my requirements but I didn't. Instead of that, I'm working on the "proxy style" analyzer for h2. I will publish that in few weeks ;)