SSL/TLSなしのHTTPでもHTTP/2に対応してくれるWebサーバーのリバースプロキシ
背景
追記: @flano_yukiさんcurlであれば--http2-prior-knowledgeオプションで上手くいくのではという情報をもらい、それで上手くいった。 追記: Nginxでもcurlであれば--http2-prior-knowledgeを使ってHTTP/2を話すことを確認できる。 結果
以前「」で立てたサーバーにcurl -vvv --http2 http://localhost:8080/をしてみると、以下のようにHTTP/2で話してくれた。 code:ログ
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
GET / HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.54.0
Accept: */*
Connection: Upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
< HTTP/1.1 101 Switching Protocols
< Connection: Upgrade
< Upgrade: h2c
* Received 101
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=27
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 200
< content-length: 2246
< content-type: text/html
< date: Sun, 05 Jan 2020 04:11:17 GMT
< server: nghttpx
< via: 1.1 nghttpx
<
<html>
...
</html>
* Connection #0 to host localhost left intact hr.icon
追記: 2020/1/7
nginxのlisten 80 http2は、仕様で言うとアップグレードではなくdirectの接続になるので、curlで言えば--http2-prior-knowledgeつけたらどうでしょうか
上手くいった。
https://gyazo.com/3ecd12dae9d8d893302f95358159cbcd
HTTP/2のdirectの接続というものなど知ると理解が深まりそうな感じ。 簡単に調べた感じ以下の各ライブラリなどのHTTP/2実装の表が見つかった。関係があるかもしれない。HTTPとHTTPSで差異があったりとかするような気がするのでそういうのも調べると良さそうな感じ。 https://gyazo.com/740df92717462bc704cac81a88babcaf
https://gyazo.com/535792df7e9fd5b9c8abc6f96f0bc204
個人的には一番きになるのはブラウザがちゃんと対応しているかということなのでそれも合わせて調べたい。
https://gyazo.com/6b3e485620cb3c5c4401259332e6710d
https://gyazo.com/cbfd19ba236a8ce93ac53f643c22a9a6