HTTP/2は標準化から3年が経過し、意識こそしていないものの普通に使われるようになってきました。
下記のようにPageSpeed InsightsでもHTTP/2を使用してくださいとメッセージが表示されるようになりました。2015年に公開されたHTTP/2はより効率よくリクエストの処理ができるようになっており、表示速度の改善され、スムーズウェブページを見ることができると期待されています。
下記はPageSpeedInsightの画面です。
HTTP/2とは?HTTP/1.1との違いや比較!
HTTP/2は2015年5月に標準化され、現在では多くのWebサイトやWebアプリケーションがHTTP/2を利用しています。
Apache HTTP ServerやNGINXでも比較的容易にHTTP/2が利用できる状況となっています。
また、WindowsやWindows Serverなどで提供されているWebサーバーであるInternet Information Services(IIS)についても、Windows 10およびWindows Server 2016でHTTP/2が利用できるようになっているのです。
Apacheでは?米グーグル(Google)社が「SPDY」(スピーディ)の名称で提唱・実装してきたHTTPの改善策を取り入れたもので、基本的な仕様はHTTP/1.1と互換性を保ちつつ、データ伝送の高速化や効率化のための拡張が行われている。
特に利用者やデータ伝送量の多い大規模サイト・サービスで効力を発揮する。
Apache HTTP Server 2.4.17以降でHTTP/2を使っています。
Apache HTTP Serverでは、バージョン2.4.17以降で「mod_http2」というモジュールを導入することでHTTP/2を利用可能になります。
HTTPとは?歴史は?
HTTPはモットとも有名なプロトコルの名称ですね。
正式な名前はHyper Text Transfer Protoclと言います。
ハイパーテキスト(HTMLのことですね)をやりとりするためだけのプロトコルとして誕生しました。
HTMLだけではなくJSON/XMLのやりとりや画像などのバイナリデータのやりとりなどの用途がおこなわれています。
歴史は?
HTTPにはいくつかのバージョンがあります。
1990年代に発表された最初期のHTTPは0.9、つい最近まで広く用いられてHTTPが1.1です。ただ、PageSpeed InsightsでもHTTP/2を使用してくださいと表示されるようになりました。
HTTP/1.1は1997年に策定されました。
現在まで広く用いられているとても歴史の長いプロトコルです。
十数年利用されてきた中で、生まれた欠点を克服するために誕生しました。
HTTP/2とは?HTTP/1.1との違いは?
ウェブサーバーからウェブページのデータを取得するためのプロトコルとして現在よく使われているHTTP/1.1とHTTP/2の違いを紹介します。
HTTP/1.1では?
HTTP/1.1では、ウェブサーバーに対して原則1つずつしかリクエストを送ることができません。たとえばウェブページに表示する画像が2つあったとして、1つ目の画像を読み込み終わってから、ようやくもう1つの画像を読み込み始めるということです。
HTTP/2では?
一方、新しく登場したHTTP/2では、複数のリクエストを同時に処理することができます。
先ほどの例にあてはめると、仮にウェブページに2つの画像があれば、その2つを同時に読み込むことができるわけです。これにより通信の効率が改善し、ウェブページの読み込みが早くなります。
HTTP/2のメリット・特徴は!普及率!
HTTP/2を導入することで通信が効率化され、結果的にウェブページの読み込み速度が向上するといったメリットがあります。ただしHTTP/2に課題がないわけではありません。
表示速度の改善され、スムーズウェブページを見ることができると期待されています。
- ストリームという概念を導入したことで HTTP/1.1 に比べて効率的に通信できます
- ヘッダー圧縮を行うことで HTTP/1.1 より通信量を減らすことができます
- サーバープッシュによりリクエストされる前にサーバーからリソースを送信することで HTTP/1.1 よりラウンドトリップ回数を減らすことができます
- HTTP/1.1 と互換性があります
- 事実上
TLS
による暗号化が必須になります- モダンブラウザは対応済です
HTTP/2を利用する場合の課題・デメリット
全てのサイトで高速化されるわけではないことだと思います。
例えば、もともと必要なソースが少なく、リクエスト数が少ない場合はあまり恩恵が受けられないと思いますね。
①無効化されていることが多い
ただし、多くのLinuxディストリビューションにおいてApache HTTP Serverは標準パッケージとして提供されているものの、提供されているバージョンが2.4.16以前であったり、mod_http2が無効化されていたりする場合が多いです。
②スレッドやメモリを多く利用する
HTTP/2を有効にすると無効の場合と比べてより多くのスレッドやメモリが必要となります。
特に多くのリクエストを処理するようなサーバーではこれによる影響が大きくなる可能性があるため、導入の際には十分に注意したいですね。
HTTP/2を有効にしているサイトでワイルドカード証明書(「*.example.com」のように複数のサブドメインを対象にしている証明書)を利用し、かつバーチャルホストを使って1つのIPアドレスでそれらを運用している場合も注意が必要です。
③バイナリデータに変更
HTTP/2.0 となると、 通信が平文(単純に通信をのぞくとテキスト形式で転送されている)から、バイナリデータに変更されます。
バイナリベースでの通信で、HTTP/1.X とは互換性がないため、HTTP/2.0 とメジャーバージョンアップした表記となっているようです。
バイナリファイルをバイナリのまま転送できるため、単純に通信パケットのみをのぞいても、通信内容を読み取りづらいというデメリットがあります。
④Youtubeなど動作サイトではデメリットも?
つのファイルやYoutube などの動画データを受信する場合には、 一つのリクエストを処理するのが主な処理となるため、HTTP/2 の仕組み上 オーバーヘッドがかかりデメリットとなる場合があります。
Youtube などの動画データを受信する場合には、 一つのリクエストを処理するのが主な処理となります。
HTTP/2 の仕組み上 オーバーヘッドがかかりデメリットとなる場合があります。
⑤HTTP HEADERの圧縮
HTTP/2.0 はリクエストに含まれる COOKIE などのヘッダ情報は圧縮されます。
HTTP/1.x の世界では複数のリクエストに毎回、同じようなヘッダ情報を付与していました。
一つのコネクションでデータ転送できるようになったため、 リクエストのヘッダ部分で重複する項目を効率圧縮する(HPACK圧縮)ようになりました。
デメリットとしては、一連のデータ転送(リクエストたち)が完了するまで、 サーバ側もクライアント側も、どんなヘッダー値をやり取りしているのかを記憶しておかなければなりません。 メモリ消費量が若干増えます。
⑥TLSが必須
HTTP/2 対応のサーバを立てるためには、TLS の利用が必須である。
これは Deno に特有のことではなく、現在の主要なブラウザは全て、TLS 上でのみ HTTP/2 を利用できるようになっている。
TLSが必須
仕様上では TLS を使わなくても HTTP/2 を利用できることになっているが、実務においては TLS の利用が前提になっていると考えていいと思う
TLS(Transport Layer Security)は、SSLをもとに標準化させたものです。ここではSSL/TLSと呼ぶことにします。
SSL(Secure Socket Layer)とは、インターネット上でデータを暗号化して送受信する方法のひとつで、Netscape Communications社が開発しました
まとめ
HTTP3.0にもでてきていますね。
→関連記事:HTTP/2の確認方法?対応ブラウザ!Chrome拡張spdyindicatorで有効をチェック
コメント