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のダイナミックテーブルの情報なども仕様上は定義されているが、セキュリティ上の理由により検討して仕様すべきとされている。