今更ながら HTTP/2 について調べてまとめてみた

2018-12-23
2018-12-23
  • HTTP/2,
  • HTTP/1.1
  • HTTP
  • プロトコル

この記事の目的

今更ながら HTTP/2 がどのようなものかを調べたくなったので、その結果をまとめた記事になります。
あくまで概要をまとめたもので、今はたくさんの良記事があるので、詳細が知りたい場合は最後の参考文献のリンク先を見ると参考になると思います。

HTTP/2 の特徴

ストリームとは?

HTTP/1.1 の欠点

HTTP/1.1 では、1回目のリクエスト→1回目のレスポンス→2回目のリクエスト→・・・というように、一度リクエストをするとそのレスポンスを受け取ってから次のリクエストを行う必要があります。
大量の画像やファイルで構成されているページを表示する際には、この制約が大きなネックになります。そのため、モダンブラウザでは複数のコネクションを同時に使用することで高速化を図っているそうです。
また、HTTP/1.1 では HTTP パイプラインという高速化手法もありますが、問題があることから、ほとんどのブラウザでは既定で無効になっています。

ストリームを導入することでどう変わるか?

ストリームとは、1つのコネクションの中に独立した複数の仮想的なコネクションのようなものがあり、リクエストとレスポンスを並列で行えるようになるため、1つのコネクションで効率的に通信が行えるようになります。

ヘッダー圧縮とは?

HTTP/1.1 は数百バイト〜数KBあるヘッダーを非圧縮かつ全てのヘッダーを毎回送受信する必要があります。
HTTP/2 では HPACK という圧縮方式を使用し、データ自体を圧縮するとともに、ヘッダーのキャッシュを行うことで差分のみを送受信することが可能になり、ヘッダーを効率よくやり取りできます。

サーバープッシュとは?

HTTP/1.1 では、通常最初に HTML ファイルを受け取ってから、再度描画に必要なリソースをリクエストする、という形になっています。
HTTP/2 では、リクエストに対し(クライアントからのリクエスト無しに)予めサーバーから必要と思われるリソースを送信することが可能になっています。
これにより、ラウンドトリップ回数を減らし、リソースの読み込みまでの時間を短縮することができます。

HTTP/1.1 との互換性

HTTP/2 通信を開始する際は、最初に従来どおりの HTTP リクエストの中に、以下のヘッダー情報を加えて送信し、サーバーから 101 Switching Protocols のレスポンスを受け取ってから HTTP/2 の通信を開始することで、互換性を保っています。

HTTP/2 を使うメリット

HTTP/2 はここまでの説明の通り、様々な手法で効率よく通信を行えるようになるため、 HTTP/1.1 よりページの読み込み時間が短縮されることが、最大のメリットだと思います。
また HTTP/1.1 との互換性があるため、HTTP/2 非対応のブラウザであってもアクセス可能であるため、導入が容易であることもメリットであると思います。

HTTP/2 を使うデメリット

全てのサイトで高速化されるわけではないことだと思います。例えば、もともと必要なソースが少なく、リクエスト数が少ない場合はあまり恩恵が受けられないと思います。 ただ、遅くなるわけではないので、デメリットという程でもないかと思います。
あとは HTTP/2 に対応する作業コストといったところかと思いますので、実質デメリットはないかな、と思いました。

調べてみた感想

HTTP というプロトコルはステートレスでシンプルなプロトコルが最大の特徴だと個人的には思っているのですが、HTTP/2 は結構複雑だな、という印象です。ヘッダーの圧縮とか、ステートレスな点もありますし。
ただそれも、HTTP が世界で圧倒的に普及した結果、僅かな高速化でも大きな影響があるため、あらゆる手法を取り入れていこうとした結果なのだろうな、とも思います。
デメリットもほぼないと言っても良さそうなので、利用できる時は積極的に使っていくべき技術だと感じました。

参考文献