I am unable to decode HTTP2 traffic generated by nghttp client and nghttpd server from nghttp2 library (https://github.com/tatsuhiro-t/nghttp2). I used plain-text mode ("http" URI scheme, without Upgrade option), sent request to the server and download small txt file. Logs from the server and the client show, that everything was OK: connection was established and the file was downloaded. However, Wireshark recognized only "magic" frame (i.e. preface) as "HTTP2", any other HTTP2 frames were displayed. Useful info Linux Ubuntu 14.04 (Virtualbox VM running on Windows 8.1) nghttp2 v0.7.9 (client and server applications, server running with --no-tls option, port 80) Wireshark 1.9.3 asked 15 Apr '15, 06:52 kazimierz_oc... |
2 Answers:
The heuristic dissector for HTTP2 is disabled by default. If you enable it, the protocol will be detected, at least in your sample capture file.
Hint from the code:
answered 16 Apr ‘15, 17:13 Kurt Knochner ♦ |
Using that version on Windows I had to use "Decode As ..." to decode all traffic to tcp port 80 as HTTP2 to get it all to dissect correctly. answered 15 Apr '15, 06:58 grahamb ♦ |
With Version 1.9.3 I had the same problem with your tracefile. After I have installed Version 1.9.5 the trace looked fine.
Did Kurt's solution solve your problem? I met the exact same issue in version 2.2, but there's no Enable HTTP2 heuristic option there!!!
@laike9m HTTP/2 got multiple heuristics, the Magic packet (enabled by default) and the very weak frame type check (removed since v1.99.9rc0-56-g78ca0af).
@Lekensteyn So what do you think of my question? I've provided all information I have. Is it a bug or I'm doing something wrong?
@laike9m The heuristics option is gone, that is not a bug. The bug is that http2 detection somehow failed due to an issue in handling the ALPN extension. A fix has been developed for the next versions of Wireshark.