HTTP2でWebがどうなるか9つのこと(自分用メモ

宣伝 2015/11 追記
ソフトウェアデザイン 11月号に HTTP/2の特集記事を書かせていただきました。より詳しく書きましたので、本記事より参考になるかと思います。
http://www.amazon.co.jp/dp/B01494YKUI


HTTP2は2014年4月のWG Last Callに向けて、仕様策定が進められている。
現在も、ロンドンで行われているIETFのミーティングでは熱い議論が行われているところであろう。
(local activityとして日本での活動なども紹介されているようです)


HTTP2の仕様を決めているHTTPbisワーキンググループのchairであるMark Nottingham氏が、自身のブログにて「Nine Things to Expect from HTTP/2」という記事が投稿されている。


ここでは、HTTP2が何をもたらすか以下の観点で説明している。

  • HTTPと同じAPI
  • 通信量の少ないリクエスト
  • ネットワーク、サーバへの親和性
  • キャッシュプッシュ
  • 暗号化
  • 非テキスト
  • 要求の変更
  • 市民権を得てくのに時間が掛かるだろう
  • HTTP3とその先


それぞれについて自分用メモ(勘違い等あるかと思われます。)

1. HTTPと同じAPI

既存のWebの上で動作するように、HTTPのメッセージの"意味"を変更しない。
つまり、HTTP2で新しいメソッドを追加したり、ステータスコードやヘッダーの変更は行わないということである。


実際にアプリケーションロジックを変更すること無く、http2に対応できる。

2.通信量の少ないリクエスト

HTTP1のリクエストは高コストなので、HTTPリクエストの発生を抑えるために、インライン展開やCSSスプライトのような技術をが生み出された。


HTTP2の主な目標の一つは、リクエストのオーバーヘッドを減らすことであり、HTTP2ではそのようなテクニックは必要なくなった。


HTTP2ではほかの通信をブロックしないように多重化されている(HTTP1にあったHead-of-line blocking問題などは生じない)


さらに、ヘッダ圧縮が導入され、、通常のリクエストレスポンスにおいて、通信の多くをヘッダが占めるということはなくなった。

3.ネットワーク、サーバへの親和性

HTTP2は少ないコネクションを使うように設計されており、サーバやネットワークへかける負荷は小さくなる。
HTTP1では並列処理に多数のコネクションを使用していたので、これはネットワークが混雑してきた時に大きな影響となっていた。


HTTP2ではホストごとに一つのコネクションを使用する。(Webページを一つのドメインホスト(3/10修正)に統合することが推奨されている。)

4.キャッシュプッシュ

HTTP2はサーバプッシュを行える。サーバから将来使うためにクライアントのキャッシュにリソースを送信できる。


例えば、HTMLにCSSのリンクが含まれてる際、HTTP1ではHTMLをダウンロードし、解釈した後にCSSのダウンロードを行うが、HTTP2ではサーバはクライアントの要求無くリソースの送信ができる。


クライアントがすでにキャッシュを持っている場合は、サーバプッシュを断ることも出来る。

5.要求の変更

HTTP1で要求を開始してから、応答が必要なくなった場合でもそれを伝える手段は無かった。


HTTP2ではクライアントからレスポンスの中断をサーバに通知出来るようになった。


HTTP1ではTCPコネクションを切断して、再度接続後にリクエストを送っていたが、
帯域を無駄にすること無く(新しいTCP接続を1から開始すること無く)、新しい要求をオープンできるようになった。

6.暗号化

HTTP2でTLSによる暗号化は必須ではないが、HTTP2を使うことでHTTPSを使うことによるページ閲覧が遅くなるのを軽減できるだろう。


既存のインターネットで新しいプロトコルを展開するために暗号化はかかせない。
多くのプロキシーやファイアウォールが、HTTP/1は常に変わらないと仮定するので、インターネット上でHTTPの新しいバージョンを使用するのが困難なためである。


また、近年Webの危険性はましており、新しいプロトコルを導入することは新しいセキュリティ問題を生みかねないため、暗号化を用いることで多くの脅威を緩和できる。

7. 非テキスト化

HTTP1のいいところは、TELNETで接続を開始でき、リクエストを入力でき、レスポンスを読めるところだった...
HTTP2ではそうはならない


バイナリプロトコルはパースするのに低いコストで出来、かつ単純である。
テキストプロトコルは、空白の扱いや区切り文字の処理方法について考慮する必要があり、実装を複雑にする。


実際HTTP1のテキストプロトコルは、セキュリティ問題の原因となっている(レスポンス分割攻撃など)

8.市民権を得てくのに時間が掛かるだろう

HTTP2は魔法ではない。


幾つかのパフォーマンス上の問題を解決はしているが、ブラウザやサーバがHTTP2をどのように使用すればパフォーマンスを改善できるかは調べる必要がある。
SPDYやHTTP2に関する研究で、利点に反する結果が得られている。これは、多くのサイトがHTTP1を念頭に設計されているためである。


また、HTTP2のネットワークの親和性はTCP輻輳制御をより重要にする。
ブラウザがひとつのホストに対して1つのコネクションを使用するので、初期ウィンドウサイズやパケット送信つの影響が明白になる。


HTTPの精査や実験は多くの期間をヘたように、TCPのパフォーマンスに与える影響については、議論が始まっている。

9.HTTP/3とその先

HTTP1は15年以上続いている。HTTP2に至るまで時間を要した大きな理由は、すでに出来上がったインフラでプロトコルをアップグレードすることが非常にこんなんだからである。HTTPが変わらないという仮定が多く見られる。


HTTP2への移行がうまく言った場合は、次のバージョンを導入するのは非常に簡単になるだろう。


サーバからクライアントへのTLS証明書やDNSエントリのプッシュといった幾つかのパフォーマンス改善はまだ残されている。こういったパフォーマンス改善が実験的にHTTP3に含まれるかもしれない。