HTTP/2について

今回は、HTTP/2について調べる。

 

 HTTP/2の概要

  HTTP/2、つまりHTTPプロトコルのVersion 2.0である。2012年に草案であるdraft-00版が出され、2015年5月に標準化され、「RFC7540 Hypertext Transfer Protocol Version 2 (HTTP/2)」が提出された。なお、ヘッダ圧縮仕様については、「RFC7541 HPACK : Header Compression for HTTP/2」で規定されている。Version 2が出る前は、Version 1.1(HTTP/1.1)が最新であった。

 HTTP/2の特長を一言で表すと「高速化」である。HTTP/1.1の時にも「パイプライン」という高速化の仕様が盛り込まれたが、採用するブラウザは極わずかで、事実上の失敗に終わっている。

 HTTP/1.1は、TCP/IPの持つ通信性能を存分に生かし切れていないプロトコル仕様であった。これを改善し、2.0の仕様が出来た。2.0の仕様には、TLSを前提とする"h2"と、TCPを前提とする"h2c"と、2種類の規約がある。平たく言うと、HTTPS=h2、HTTP=h2cだ。最近は、HTTPSが当たり前になっており「主流」になっているので、大抵のブラウザは、h2のみ実装している。よってHTTPSで接続したときのみ「高速化」の恩恵に与れるのが実状だ。

 

 HTTP/2の性能

   ではどのくらい高速になるのか実験する。httpとhttpsの性能の違いを測定してくれるサイトがあるので、ここで実験する。

www.httpvshttps.com

360個の画像を読み込むのにかかる時間をhttpとhttpsとで測定して比較するサイトだ。最近のブラウザは、httpsの場合にはサーバ側がhttp/2.0に対応していれば自動的にhttp/2が採用されるので、かなり高速になる。

実測値は以下のようになった。(10回測定した平均値)

 

Firefox 66.0.2の場合

HTTP : 8.59 秒

HTTPS : 2.03 秒

実に、4.23倍だ。最速値同士で比較すると、8.36 vs 0.76 で、11倍にもなった。

 

IE 11.379の場合

HTTP : 9.02 秒

HTTPS : 1.42 秒

実に、6.35倍だ。最速値同士で比較すると、8.69 vs 1.16 で、7.62倍にもなった。

 

本当に速くなっている。HTTP/2の仕組みから言って、1ページあたりのコンテンツの数が多いほど、顕著に速度差が出やすい。よって、この速度計測ページは、HTTP/2に有利な数字を出すことは間違いないが、それにしてもその速さを実感できる。

 

 

HTTP/2の仕組み

■ストリーム

 TCPコネクションの上に、ストリームという疑似的なコネクションのようなものを確立する。ストリームは、サーバ側、クライアント側、どちらからでも確立できる。ストリームには id があり、クライアントが確立する場合は奇数のidを、サーバ側が確立する場合は偶数のidを使用する。ストリームには下記のような状態遷移があり、一度使用し終わったストリームは破棄され、再利用はしないルールになっている。

(1) Idle : 通信前の状態

(2) Open : 通信可能状態

(3) Close : 通信終了状態

 

■フレーム

HTTP/2のメッセージは、フレームという単位でやり取りされる。フレームには、10種類のタイプがある。

・Type番号(0) : DATA

・Type番号(1) : HEADERS

・Type番号(2) : PRIORITY

・Type番号(3) : RST_STREAM

・Type番号(4) : SETTINGS

・Type番号(5) : PUSH_PROMISE

・Type番号(6) : PING

・Type番号(7) : GOAWAY

・Type番号(8) : WINDOW_UPDATE

・Type番号(9) : CONTINUATION

 

 

 

 

 

・HTTPリクエス

  ・HEADERフレーム (GETリクエストはこれだけ)

 

・HTTPレスポンス

  ・HEADERフレーム

  ・DATAフレーム

 

 

 

 

 

 

 

 

 

 

 

 

---------------------------------------
ITとことんのトップページ
 ┗■HTTP/HTTPSのトップページ
  ┗■本ページ