スライドURL
DeNA開発HTTPサーバ
- H2O
サーバ技術の評価軸
- サーバ負荷
- 転送データ量
- 応答性
- 設定、運用コスト
HTTP2の基本
登場背景
- エンドユーザーの通信速度は上昇
- LTEの普及とか
- だがページロード速度はそれに比例しない
- (1.6Mbpsで頭打ち)
- ページロードはレイテンシ(※1)が小さいほど速い
- まぁ当然
なぜHTTP2か
- HTTP1.1は多重性がない
- 1RTT(※2)あたり1リクエスト/レスポンスしかできない
- 緩和策は複数のTCP接続を使う
- 1RTTあたり6リクエスト
- ?どうやって?
- 1RTTあたり6リクエスト
- 多重性がないために複数のリクエストを必要とする
- そうなると1RTT毎のレイテンシが通信速度に重くのしかかる
- そのために開発されたのがHTTP2!!!
HTTP2とは
基本的な技術要素
- バイナリプロトコル
- 多重化
- ヘッダ圧縮
バイナリプロトコル
- 脆弱性を防ぐ
- HTTP Response Splitting Attack
- レスポンス分割攻撃
- 転送データ量の低減
- 全てのデータは「フレーム」に分解して送受信
多重化
- 同時に100以上のリクエストを送信可能
- 任意のタイミングでリクエスト送信可能
- レスポンスの順序に制限なし
- 先のレスポンスを待たないってことか
ヘッダ圧縮
- HTTP1.1のヘッダは大きい
- リクエストで最低でも300バイト程度
- レスポンスで通常300バイト程度
- 100回通信するとヘッダだけで60kb
HTTP2.0体感サイト
HTTP1.1とHTTP2.0のやり取り簡易比較図
レスポンス優先度
- クライアントがサーバにレスポンス優先度を指定
- サーバはその優先度を参考にレスポンスを返す順番を決める
- 優先度指定することでユーザ体感速度を大幅に向上させることができる
- 初期描画を優先したレスポンスにすることによる
サーバプッシュ
- HTTP2はRTTを隠蔽する技術
- でも最低1RTTはいるよね??
- 実は0RTTにすることができる
- それが「サーバプッシュ」
- サーバがクライアントの発行するリクエストを予測してレスポンスをプッシュ
- まだ仕様の標準化はされてない
- ブラウザ対応がまだ
- ポテンシャルは秘めている
参考サイト
調査ワード
※1:レイテンシ
- リクエストが実施に送信されるまでの遅延時間
※2:RTT
ラウンドトリップタイム
- リクエストしてからレスポンスが返るまで