HTTP/2かHTTP/1のリクエストか判別するときに使えそうな、決まり文句的なリクエスト
#HTTP/2 #magic
ALPNを使わずにHTTP/2かHTTP/1かサーバーで判別できる方法を知りたくて調べたもの。
以下がそれぽい。nc -l <ポート>とnghttpでアクセスして調べたもの。
code:txt
PRI * HTTP/2.0
SM
GET パス名 HTTP/1.1の代わりに、PRI * HTTP/2.0が来るのだと思うので、これを使ってHTTP/1なのかHTTP/2のどちらを要求しているのか、サーバー側で識別/判定ができそう。
「PRI HTTP/2」などでググると情報が見つかり、「HTTP/2 Connection Preface」というらしい。
SMの部分もConnection Prefaceになっているぽい。
(HTTP/2 Connection Prefaceの参考:)
HTTP/2のサーバーが実装されているNode.jsでもこれのコードが存在している。
https://github.com/nodejs/node/blob/0ad8c7319d6034fff0175bdf61ba8970db06a8ba/deps/nghttp2/lib/includes/nghttp2/nghttp2.h#L210-L216