HTTP/2 Implementation Debug State
「HTTP/2 Implementation Debug State」というHTTP/2用のデバッグ情報を表示するエンドポイントの仕様が、IETFに提出されています。
https://tools.ietf.org/html/draft-benfield-http2-debug-state-01
サーバの「.well-known/h2/state」にアクセスすることでそのコネクションの状態を表示するサーバ側のエンドポイント、及びその内容を定義しています。
mod-h2 http2-status
mod-h2のversion 1.6.0より http2-status が、この仕様に準拠したので簡単に動作確認する。
ubuntu16.04(openssl 1.0.2)で、今回は svn のtrunkからビルドする
#nghttp2をインストールしておく sudo apt-get install -y libtool libtool-bin libpcre3-dev autoconf libssl-dev libxml2-dev libev-dev build-essential svn checkout http://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x httpd-2.4.x cd ../httpd-2.4.x/ svn co http://svn.apache.org/repos/asf/apr/apr/trunk srclib/apr ./buildconf ./configure make
証明書の設定及びSSL(TLS)とHTTP/2を有効にし、confにhttp-2statusの設定を加える
Protocols h2c http/1.1
<Location "/.well-known/h2/state">
SetHandler http2-status
</Location>
結果
/.well-known/h2/state
{
"version": "draft-01",
"settings": {
"SETTINGS_MAX_CONCURRENT_STREAMS": 100,
"SETTINGS_MAX_FRAME_SIZE": 16384,
"SETTINGS_INITIAL_WINDOW_SIZE": 65535,
"SETTINGS_ENABLE_PUSH": 1
},
"peerSettings": {
"SETTINGS_MAX_CONCURRENT_STREAMS": 1000,
"SETTINGS_MAX_FRAME_SIZE": 16384,
"SETTINGS_INITIAL_WINDOW_SIZE": 6291456,
"SETTINGS_ENABLE_PUSH": 1,
"SETTINGS_HEADER_TABLE_SIZE": 4096,
"SETTINGS_MAX_HEADER_LIST_SIZE": -1
},
"connFlowIn": 2147483647,
"connFlowOut": 15707901,
"sentGoAway": 0,
"streams": {
"41": {
"state": "HALF_CLOSED_REMOTE",
"created": 1473179424.329667,
"flowIn": 65535,
"flowOut": 6291456,
"dataIn": 0,
"dataOut": 0
}
},
"stats": {
"in": {
"requests": 21,
"resets": 0,
"frames": 24,
"octets": 1250
},
"out": {
"responses": 20,
"frames": 43,
"octets": 21712
},
"push": {
"cacheDigest": "AQg",
"promises": 0,
"submits": 0,
"resets": 0
}
}
}
幾つかの仕様上でオプショナルな物は表示されない。例えばHPACKのダイナミックテーブルの情報なども仕様上は定義されているが、セキュリティ上の理由により検討して仕様すべきとされている。