クライアント - Nginx HTTP2 - Apache HTTP1.1はRFC違反にあたるらしい

2 min read

こんにちは、無能です。 なんか気づいたらDenoへのプルリクエストがマージされてました。やったね!

問題

タイトルの通りなのですが、これRFC違反だとどうなるかというと
curlが打てない

curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)

HTTP/2は常にHTTPS通信が求められているのにNginxでリバースプロキシしてバックエンドのApacheサーバーにHTTP通信しているとこれが起こるみたい。
回避策 : HTTP/2を無効化する
とかいうアホみたいな…感じでちょこちょこGithub上でもこの問題に関する話題は色んなところで起きてるみたい。
一旦はHTTP/2だけ停止にした。

ついでにこの状態だとMacOS/IOSのブラウザからは見れない状態になったりならなかったり、と解決した情報があまりにない。curlオプションに--http1.1を指定すればとりあえずは出来るが…

HTTP2の仕様

http2の仕様上はhttpでもhttpsでも利用は出来るがブラウザ側はHTTPS通信しか許可していないようだ。なんだそれ…

効かぬ自己署名

バックエンド側のApacheで自己署名でとりあえずのHTTPS通信と、バックエンド側でも Protocols h2 http/1.1
を記述しa2enmodでモジュールの有効化したけどやっぱりこれでも駄目なようだ。

HTTP/2の必要性

HTTP/1.1とHTTP/2で複数画像のダウンロード速度を比較してみる
実際、ちゃんとHTTP/2対応したい気持ちがあるのですが必要に応じてになるんでしょうか…。
ちょっと昨日の今日のことなのでもう少しゆっくりにでも調査する必要がありそうです👀