Node.jsのhttp2.createServer()がHTTP/1のリクエストを受け付けない仕様のテストコードの場所
#Node.js #HTTP/2 #h2c
ここにあった。
ちゃんと、このテストコードでhttp2.createServer()で立てたサーバーにhttp.get()するとエラーする仕様が書かれていた。
経緯
http2.createSecureServer()だとHTTP/1のリクエストを受け付けるのに、 http2.createServer()だと、HTTP/1のリクエストでエラーするので、対応策がないのか以下のissueで質問させてもらっていた。
また、allowHTTP1: trueが、TypeScriptの型定義で、 http2.createServer()のオプションとして使えるようになってしまっていて、これもまた、対応できているのではないかと思わせる原因にもなっていた。
型定義に関しては以下のPRでallowHTTP1オプションを外す変更をマージしてもらった。そのため@types/nodeを最新にすればこの問題は解決する。
結局、現段階だとHTTPS(TLSを使用)しないと、HTTP/1のリクエストがエラーしてしまう。
後方互換性のことを考えると、HTTP/1をTLSなしでリクエストする機会はあるので、許可できるようになるとありがたい。
目的は、Piping Serverの本体で、HTTP/2に対応させたいから。その他にもNode.jsのHTTPサーバーを使っているのプロジェクトでも使いたい。
(関連:Piping ServerをリバースプロキシでHTTP/2に対応させる)