HTTP/2 over TCP (h2c)

V
Aug 29, 2023

--

仕様が正式に公開されて 8 年以上たっている HTTP/2 の TLS を利用しない HTTP/2 over TCP (h2c) が便利という話を今更ですが雑に書いていこうと思います。

まとめ

Tailscale 使ってサーバー間通信をしてると h2c で十分。

前提

  • HTTP/1.1 は利用しておらず HTTP/2 のみ
  • HTTP/2 のストリームを利用したい

HTTP/2 はブラウザが主な利用ですが、gRPC でも利用されたりしています。多くの場所で活躍していると思いますが、そんな中 HTTP/2 over TCP (以降 h2c) についてはほとんど情報がありません。そもそも h2c はブラウザが話せない時点で使われないわけなので、なんだそれ?って人もいると思います。

なので、h2c なんてどこで使うんだよ。って思いの人いるとおもいます。わかります、その気持ち。

自社ではサーバー間通信に利用しています。もちろん mTLS を利用して HTTP/2 over TLS も利用可能ですが、そもそも弊社のサーバー間は全て Tailscale で仮想プライベートネットワークが組まれています。

なので HTTP/2 over TLS 使いたくない無駄に CPU 使用率増やしたくないというのがありました。

となると h2c で通信できるようにしてしまった方が嬉しいです。

自分たちが利用している Erlang/OTP の HTTP/2 クライアント gun は h2c に対応しています。

さらに Go のウェブフレームワーク echo も h2c に対応してます。そもそも Go の HTTP/2 ライブラリが h2c に対応しています

Tailscale を利用して h2c はただ http://<tailscale ip>:port/ でアクセスするだけでいいのも楽です。

Tailcale のようなサーバ間通信を気軽に暗号化できる仕組みが流行ってくるとサーバー間で TLS を頑張って使うというのは少なくなってくるのかも知れません。

h2c を利用可能にしておくと、実は開発やお試しする歳に証明書がいらなくて楽というのもあります。思わぬ副作用です。

ちなみに、もともとあまり使われていなかった HTTP/2 over TLS から HTTP/2 over TCP へのアップグレードは廃止されました。

--

--