Go で HTTP/2 最速実装やってみた

Posted on | 560 words | ~2mins
go HTTP/2

すでに 2 ヶ月も経過してますが、http2 ハッカソン #3 に参加しました。 僕は初心者枠で参加したのですが、初心者向けに HTTP/2 最速実装の解説発表がありました。 HTTP/2 最速実装とは、複雑な機能を省略してできるだけ簡単に HTTP/2 っぽいものを実装するというものです。 参加した時に途中まで書いて放置していたのですが、今回 HTTP/2 Conference に向けて一応動くようにしてみました。

HTTP/2 最速実装について

基本的には @syu_cream さんの資料を参照すると良いと思います。

あとはドラフト日本語訳もあります。

一応簡単に言葉で説明すると、

  1. プロトコルネゴシエーションは相手が HTTP/2 が喋れること前提にサボる
  2. SETTINGS FRAME での設定はしない、全部読み飛ばす
  3. HPACK での HEADER 圧縮は Literal Header Field without Indexing を利用(ハフマン符号化、インデキシングを行わない)

という感じでめんどくさいところは全部省略してるって感じですw

自分の実装について

Go の HTTP/2 実装は @Jxck_ さんの実装がすでにあるのですが、自分が Go を書きたかったので今回は Go で書きました。 一応 GitHub にあげてあります。 突貫で書いてとりあえず動くようにしたという感じで、コードカオスなのでもう触りたくない感じですが…

今回最速実装をやってみて HTTP/2 がどんな感じのものか少し理解が深まった気がします。 みなさんも HTTP/2 最速実装、ぜひ挑戦してみてはいかがでしょうか :)

次は Jxck さんの実装読みながら HPACK の実装でもやってみようとおもいます :D