SENAN

4人の仲間が交代で書く雑記

HTTP/2.0の波がくる?HTTP/2.0の特徴

      2015/12/07

HTTP/2について最近個人的によく耳にするので、今回ちょっと調べてみて、簡単にまとめてみました。
(wikiには2015年5月にRFCで文書化されたと書いてあったのでやっぱり話が盛り上がって来たのは最近みたい)

現状のwebの課題


私自身がフロントエンドの開発をしはじめたのがつい最近なので、
HTTP/1の基盤技術やそれによる性能問題などは詳しく説明できないですが
現状のwebの問題点をざっくり説明すると、以下の2つがあります。

  1. ブラウザのレンダリング速度がレイテンシに依存する
  2. 無駄なデータが流れて帯域の利用効率が悪い

まず、ブラウザのレンダリング速度がレイテンシに依存するというのは、現状のHTTP/1.1では1リクエストが1つのTCPセッションを占有するのが影響しています。
具体的に言うと、ページが最終的に画面に表示されるまでにブラウザはHTML→CSS→JS→画像の順番でファイルを取得してきます。そして、全部そろってから描画。
なので、ブラウザの処理性能がめちゃくちゃすごくてJSなんかもサクサク動かせるようになったとしても、結局はレイテンシが悪いと描画がすごい遅いという事態になります。

加えて、現在のブラウザは並列でファイルを取得するために複数のTCPセッションを張っています。
これはそんなに問題なさそうに見えるけど、サーバーに余計な負荷をかけることにつながります。(同時接続数がすごく大きいサービスじゃないと影響はそんなにないかも)

そして、無駄なデータが流れているというのは、そもそもHTMLがテキストデータであるということや、毎回パケットに記載されるヘッダー情報などです。

これらの課題はどちらも、モバイル端末へ快適にページを提供する必要が出てきたことにより、より注目されるようになりました。
モバイルは通信速度も帯域もそこまで期待できないので、より効率的にする必要があるのです。

HTTP/2.0はどうやって課題を解決するか


HTTP/2はたくさんの新しい機能がありますが、有名なので以下のようなものがあります。

  1. バイナリによるデータ通信
  2. 並列リクエスト処理
  3. ヘッダー情報の圧縮
  4. サーバープッシュ

上の3つは名前からなんとなく判断できると思うので、最後のサーバープッシュだけ説明します。

サーバープッシュによりサーバ側からクライアントへファイルを送り込むことができます。
これはどこで役に立つかというと、今まではHTML→CSS→JS→画像の順番でブラウザが順番にデータを取得していましたが、
サーバプッシュを使うと、クライアントがHTMLを取りに来たタイミングで、サーバは後で必要になると分かっているCSSや画像などのファイルを事前に送り込むことができます。
こうすることで、無駄なリクエストも減るし、クライアントは画面のレンダリングに必要なファイルを短い時間で揃えることができます。

まだある課題


実はHTTP/2にもいろいろな課題があるらしいです。
たとえば、サーバプッシュではブラウザのキャッシュを考慮できないと、逆に無駄にファイルを送り込むことになったりする。
(これはHTTP/2に最適化された次世代WebサーバのH2Oが独自の機能で解決しているようです)

その他にもいろいろある、らしいです。。。調べきれてません<(_ _)>

さいごに


一般にHTTP/2が流行るかどうかはわかりませんが、大手のサービスが対応してくるのは確実と思います。(もう使ってるかもしれないが)
AngularJSだとかReactだとか言ったフロントの技術と相性がよさそうに見えるので、近いうちにHTTP/2を前提としたいろいろなフレームワークとが出てくるんじゃないかなー。。。
というわけで、いまのうちに勉強しとこう。

次は余裕があったら次世代WebサーバのH2Oを触ってみたいと思います。

 - その他