Skip to content

Instantly share code, notes, and snippets.

@mshibuya
Created August 15, 2013 03:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mshibuya/6238020 to your computer and use it in GitHub Desktop.
Save mshibuya/6238020 to your computer and use it in GitHub Desktop.

http2.0 勉強会

8/14 @IIJ

HTTP2.0 の基本的とこれまで

@jxck

History and Status

  • HTTP/1.1が出て以降のWebの使われ方の変化
  • 2009/11 SPDY/1
  • 2011/9 HTML5/WebSocket
  • 2012/8 HTTP/2.0 Start

about SPDY

  • 多重化
  • ヘッダ圧縮
  • RTT削減とか

about HTTP2

  • HTTP/1.1を更新したかったから
  • SPDYをベースに

SPDY or HTTP/2.0

  • Googleがserver/clientを押さえてるからいろいろ試せた
  • それをIETFにフィードバック

仕様

draft-05

  • 多重化
  • バイナリフレーム
  • ALPN / Upgrade
  • ヘッダ圧縮
  • サーバプッシュ

フレーム

  • Stream
    • HEADERS & DATAの連続 - HTTP/1.1のリクエスト&レスポンスに対応
      • 多重化
        • 一つの接続が並行する複数のストリームを持つ
      • 優先度
      • フロー制御

HEADERS & DATA frame

Server Push

  • クライアントがリクエストする前にレスポンスを送る
  • safeなmethodのみ(GET, HEAD)
  • PUSH_PROMISE
    • これからpushするからGETしてくんなよ、ってできる

実装

  • いろいろ

spdy-indicator

  • サイトがSPDY対応かどうかを確認できる

実際の中身を見る

https://jxck.io/labs/http2cat/

  • High Performance Browser Networking

ヘッダ圧縮とネゴシエーションの話

アップグレードメカニズム(ネゴシエーション)

  • HTTP/1.xはテキスト、HTTP/2.0はバイナリで送受信
  • それぞれで通信できないけど、どちらも同じポートをつかう
  • どちらを使うか決める方法が必要
  • 開始する3つの方法
    • HTTPの場合
      • HTTP/1.xで通信を開始し、Upgradeヘッダを用いて2.0に切り替える
    • HTTPSの場合
      • TLS-NPN
        • サーバから使用可能なプロトコルリストを送信
      • TLS-ANPN
        • クライアントから使用可能なプロトコルリストを送信
    • 事前に知っている場合
      • 実は仕様上あんまり詳しく述べられてない。DNSのSRV/SVCINFOレコードを使う
  • 誤って通信を開始してしまった場合
    • HTTP/1.xは改行をメッセージの終端として使用
    • その問題に対処するため、コネクションヘッダとして改行が入った文字列を送信
    • HTTP/1.xクライアントはメッセージが終わりだと思ってコネクションを切ってくれる

ヘッダ圧縮

  • ヘッダーテーブルを使って、一般的なヘッダ・一回使ったヘッダはindexを用いて表現する
  • ヘッダはReference Setとして管理され、その差分情報のみ送る

httpbisってWGはこんな風にCrazyな場所なんですよ?

株式会社レピダム 林さん

IETFについて

  • RFCを発行してるとこ
  • 個々のAreaに多くのWorking Groupがある
  • HTTP/2.0はApp Areaのhttpbis WGで進んでいる

IETF Meeting

  • 年3回

IETF WG

  • 各WGにはChairがいる
  • 提案はInternet Draft形式で提出
  • 議論は公に開かれており、Meetingに参加しなくても議論と意思決定に関われる
    • ことになっている。実際は参加せず議論を方向付けるのは困難

IETF httpbis WG

  • HTTP/1.1bisのため
  • 突然HTTP/2.0の話題が

トリビア

  • メーリングリストがw3.orgにホストされてる
    • あまり検索に引っかからない
  • Chairがひとり
    • Mark Nottingham

良いお知らせ

  • RC4はHTTP/2.0では基本的に使われなくなった
  • 安全なストリーム暗号がなくなってしまった

HTTP and SSL Security Issue

  • SPDYはSSLが必須
  • CRIME Attack
    • HTTP/2.0の策定時に関係者を打ちのめした
    • 圧縮したら情報の変化から内容が推測しやすくなる
    • 本当にエレガント
  • BREACH Attack
    • 圧縮を止める、くらいしか解決方法が見つかっていない

Interim Meeting

  • WG Meetingとは違って、少人数で活発
  • Interopは最高に面白い

参加するには

  • 強い心と熱い情熱

まとめ

  • 技術は推進しなきゃ進まない
  • HTTP/2.0は今すごくよい状態

httpbis interim と相互接続試験の話

IIJ 大津さん

政治的な話

  • GoogleやTwitterなどInternet大手が力をいれている
  • HTTP/1.xと2.0の世界に住み分けが進むだろう

httpbis interimでの大きめなトピックについて

やっぱALPNじゃなくてNPNがいい。

  • 256バイト以上のHelloでバグる実装があるらしい
  • ALPNはクライアントから送るデータが増えるのでイヤ
  • ALPNのプロトコル選択は平文で見えてしまう
  • 現場から不満たらたら

CONTINUATIONフレームの新設

  • CONTINUEフラグは先頭HEADERの見分けがつかず、困るので

Server Pushを完全に禁止したい

  • RST_STREAMを送ることで実現

ヘッダ圧縮

  • 圧縮というよりは差分
  • Header-Compression-01アカンじゃん!
    • でかいヘッダが来た時困る
    • インデックスをなめるのでO(N^2)の計算量
  • HPAC誕生!
    • working setを作らない
    • 逐次処理できるので、atomicになる
  • 内容の食い違いが心配
    • Hashで内容の差を確かめたい
    • まだ仕様にはなってない

相互接続試験

  • SPDYとHTTP/2.0は共存できなそう
    • ヘッダ構成が全然違う
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment