LoginSignup
9

More than 5 years have passed since last update.

http2/quic meetup メモ

Last updated at Posted at 2015-11-01

meetup行ってきたのでメモ。
殴り書きなので、自分で理解しきれていないところもある。

前田さんのTwitterからかなり引用させてもらってます。
https://twitter.com/mad_p

QUIC (Jana Iyengar)

UDPでHTTP2と同じことを実現する。
HTTP/2のプロトコル部分を置き換え、セマンティスクスはそのまま。
常時暗号化、0-RTT/1-RTT、コネクションの輻輳制御、セッションのフローコントロール、CPU最適化などがある。
http://src.chromium.org/viewvc/chrome?revision=162259&view=revision

http2 (Mark Nottingham)

apacheもnginxも対応しつつある。
Service Workerでプライオリティーヒントをリクエストごとにサーバーに送ることができるかもしれない。

プライオリティについてはsummerwindさんのこのスランドが素晴らしい。
http://sssslide.com/speakerdeck.com/summerwind/2-prioritization

HTTP2へのOriginフレームの追加
http://d.hatena.ne.jp/ASnoKaze/20151029/1446136493

接続をオリジンにまたがって同じconnectionに相乗りすることを考えている。サーバーからこのconnectionでこのoriginを送りたくないという表現もできるように。

HTTP/2の後継としては多くの拡張が考えられている。

HTTPヘッダのJSON表現
https://tools.ietf.org/html/draft-reschke-http-jfv-00
https://github.com/HTTPWorkshop/workshop/blob/gh-pages/presentations/reschke-headers/index.html

encrypted content-encodingヘッダの追加。

Blind caching
中身を見ないでもキャッシュを共有する方法。

webpush (Martin Thomson)

webpushはサイトを閲覧していない時に送る4K程度のメッセージ。
通常はemailやchatの通知に使われる。「更新があります」「パケットが届きました」など。

GCM, APNS, WNS…、これらの標準化がAPI(W3C)、プロトコル(IETF)で検討されている。

100人以上の人が同時に同じことをしようとしても、単にバッテリーを使うだけ。3つのアプリで2時間分のバッテリーを食うことになってしまう。2分間だけネットに接続してまたスリープみたいなことをやりたい。

overview: app内のブラウザがsubscriptionをapplication serverに送る。app serverはpush messageをpush serviceに送る。service workersがウインドウなしに処理

UAからPush serviceにHTTP/2のGETを送る。これは何も返事を期待しないが、これによってpush serverがPUSH PROMISEフレームを送れるようになる。このstreamはロングポーリングの空リクエストと同様の働きをする。

CSoWLDqVEAAzRrI.jpg-large.jpg
PUTはPOSTの間違い。

Let's Encrypt (Richard Barnes)

無料でSSL証明書を使用できる仕組み。
https://letsencrypt.org

無料。自動。透明、オープン、協力的

ACME(アクメ) Automated Certificate Management Environment
自動で証明書を更新する仕組み。

domain validationはチャレンジを送り、DNSにそのチャレンジに対応したレコードを入れることで行う。正しいドメインオーナーだけがDNSを変更できることを利用。

Acmeではauthorizationの申請から、チャレンジの取得、検証まで全部を仕様化。このループには人が介在しない。標準化によってツール化することができる

TLS1.3 (EKR)

圧縮(サイドチャネル攻撃(CRIMEとか)に耐えるものが必要。HTTP/2でHPACKを作ったのも同じ理由)。
TLS 1.3 1-RTTハンドシェーク。これが初めて話す相手との基本的なフローになる。最初のメッセージでDH shareをいくつかの(固定の?)群上で送る。サーバーからはサーバー設定とサーバーkey shareを返す。
サーバーがpassiveになることで攻撃に強くなる。
初のサーバーからの通信でいきなりアプリケーションデータを送ってしまえる。これは最初のパケットに相乗りしてすぐに届く。HTTP/2のSETTINGSフレームやPUSH PROMISEをここで送ってしまえる。
WGはいつでもclient authを要求できる仕様を検討中。
https://tools.ietf.org/html/draft-ietf-tls-tls13-10

cache aware server push (kazuho oku)

h2o v1.5
http://blog.kazuhooku.com/2015/09/h2o-version-150-released.html?m=1

ブラウザがリソースを保持しているかどうかをクッキーで判断する。
それによってHTTP2のサーバープッシュを積極的に使えるようになるという話。
mnotが興味を示していたので、これは本格的に採用されそう。

サーバープッシュが難しいことについては、rebuild.fmのエピソード99参照。
http://rebuild.fm/99/

雑感

QUICのサンプル実装をやってみたい。
時間を見つけてService Workerとhttp2のウェブプッシュを試してみたい。
h2oのクッキーも。

隣にMark Nottinghamが座っていて少し緊張した。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9