HTTP/2について勉強してみる

HTTP/2という言葉、遅ればせながらやっと認識し始めた今日この頃。
Hetemlサーバは2017年にすでに対応していたんですね。

さくらも先日やっとこさHTTP/2対応したみたいです。

さてHTTP/2は、インターネットの通信プロトコルHTTPの最新バージョンなのだということは名前から推測できますが、いったい何がどうよくなったのか勉強がてらまとめてみました。

 

ソフトウェアデザイン 2015年 11 月号 [雑誌]

ソフトウェアデザイン 2015年 11 月号 [雑誌]

 

 

 HTTP/2を利用するメリット

通信の効率化=高速化

クライアント-サーバー間の通信が効率化されることでコンテンツの伝送が10%〜20%高速化されると言われている。優先度制御や非同期でのリクエスト/レスポンス処理が可能になり、Webブラウザにおけるページレンダリングの時間を短縮できる可能性がある。

HTTP/2を使うには?

SSL通信を行えば、何もせずともHTTP/2プロトコルが利用できるので利用するために特に何かコードを書いたりする必要はありません。

ただしアプリなどで通信を任せるライブラリなどをいれている場合は、対応しているかどうか確認が必要です。

(実際、私の周辺でもAndroidアプリ内で利用しているライブラリがHTTP/2に対応していなかったため、ダウンロード障害がでた案件がありました。)

 

従来のHTTP/1、HTTP/1.1、HTTP/2何が違う?

HTTP/1

クライアントが1リクエストを送る

サーバーが1レスポンスを返却

のように、必ず1リクエストに対して1レスポンスの形式となるため、サーバーからのレスポンスが帰らないと次の処理に進めないので、表示や処理が遅い。

HTTP/1.1

クライアントが同時に複数のリクエストを送ることが可能になった。

しかしサーバーはリクエストされた順に1レスポンスを返すので、容量の大きいファイルや、処理に時間がかかるような場合には、前のレスポンスが完了するのを待たなくてはならない。

 

HTTP/2

近年の一回の処理におけるデータ通信量の増大によるレスポンスの遅延を解消するために新たに開発されたのがHTTP/2。

HTTP/2は従来のHTTPを踏襲しつつも、新たな転送手段を追加して少ない通信量でより多くの転送を行える。最大の特徴は、「ストリーム」という概念の導入で、ストリームよって1つのコネクション内で同時並行で、クライアントが複数のリクエストを送り、それぞれのリクエストに対し、サーバーがそれぞれ同時平行で処理してレスポンスを同時に複数返却できるようになった。

 

 

HTTP/2の新機能

ストリーム

あるストリームでの処理がほかのストリームに影響を及ぼすことがないため複数のリクエスト/レスポンスを同時並行的に処理でき、処理に時間がかかるような場合でも他のストリームの処理は影響を受けずに処理できる。

バイナリベース

従来のHTTPはクライアント/サーバー間を「テキストベース」で通信が行われていたが、HTTP/2では「バイナリベース」で行われるようになった。

サーバープッシュ

リクエストされていないコンテンツをサーバーがクライアントに送信する「サーバープッシュ」ができる。クライアントがHTMLファイルをリクエストした場合、それに続いてそのHTMLファイル内で指定されているCSSファイルやスクリプトファイルなどがリクエストされる可能性が高いなど、サーバープッシュ機能を利用して自動的に関連ファイルをプッシュ送信できる。

識別子

使用するデフォルトのポート番号はhttpの場合80番、httpsの場合443番で従来から変更なし。しかし新たに識別子という概念が追加された。

h2(HTTP/2 over TLS)

※https通信でTLS暗号化で保護されたコネクションを行う

h2c (HTTP/2 over TCP)

※http通信で保護されない平文のコネクションを行う

 

 

サイトをSSL化するのは、もはや当たり前みたいな風潮になってきている昨今で、もはやHTTP/2はあたりまえになってきているのですね。 

 

 

Learning HTTP/2: A Practical Guide for Beginners

Learning HTTP/2: A Practical Guide for Beginners