Hatena::ブログ(Diary)

あすのかぜ Twitter

2016-07-25

QUICの仕様を翻訳していく

QUIC in ietf96

Google の試験的トランスポート、QUIC のアップデート」などでも紹介されている、Googleが提案・実装してるQUIC。


すでに関連するドキュメントはChromium Projects配下のページで公開されていますが、先日IETFにQUICの仕様が提出されています。


さらに先週ドイツで行なわれたIETF96の中でQUICに関する議論が行なわれ、IETFとしてQUICの標準化を進める事が決まりました。セッションの発表ではQUICのプロトコルのオーバービュー、Googleでのデプロイ状況及び統計情報、Akamaiからの発表、TLS1.3の使用に関する発表が行われましたその時の資料は、既にアップロードされています。

仕様

さて、既にIETFにはQUICに関する仕様が4つ提出されています。

Coreになる仕様を中心に、3つの仕様が付随しQUICというプロトコルを作り上げている。仕様としてはversion 00でありTODOや誤字などがある。また、TLSの仕様に関してはTLS1.3側の変更を取り込んだものが著者のgithubに上がっているものの、TLS1.3もまだ変更があるため今後も変更されるだろう。

翻訳

翻訳という大それたものではないが、読んだ副産物として翻訳を公開してみようと思う。自分でもわかりにくい部分があると思ってるので、時間を見つけて直していきます。完璧な翻訳を与えるものではありませんが、より良いものになるように努めます。


今のところ、4つのうち2つだけ

https://github.com/flano-yuki/my-quic-spec-translation


残りの仕様も読んでますが、やはり難しい...

2016-06-15

iframeのアプリケーションにPermissionを委譲する仕様

Permission Delegation To Embedded Web Applications

iframeで埋め込まれたクロスオリジンのWebアプリケーションがPermissionを要求するとこともあります、しかしユーザにとっても分かりづらく、扱いづらい点があります。Googleの調査でも、ユーザはiframe内のアプリケーションによるPermission要求を正しく理解していないという結果が出ているようです。


W3Cでは、公式のドキュメントにはなってませんが、「Permission Delegation To Embedded Web Applications」という、 iframeなどで埋め込まれたWebアプリケーションへのPermission委譲の仕様が議論されています。Chromeでも実装への議論がメーリングリスト上で行なわれています。


基本的に、埋め込む側がPermissionを保持し、そのPermissionを埋め込まれた側に委譲する仕組みです。こうすることで、ユーザとしてもどのオリジンにPermissionを許可しているか分かりやすくなります。ブラウザがPermissionを記憶したり解除する際もiframeを埋め込んでいるオリジンの管理だけで良くなりますし、管理画面も分かりやすくなるでしょう。


さらに、今までは埋め込まれる側がPermissionを要求することを規制できませんでしたが、委譲方式をとることで埋め込む側がコントロールできるようになります。


ただし、互換性の問題や、ユーザは今まで通り自身でPermission管理を行いたいという要望もあるかもしれません。


委譲方法

委譲方法は、iframeの属性に指定する方法と、JavaScriptから実行する方法があります。


以下の通り、permissionsに要求するpermissionを指定することで委譲することが出来ます。

<iframe id="embedee" src="https://maps.example.com/" permissions="geolocation"></iframe>

また、Javascriptからnavigator.permissions.delegateと実行することで指定されたiframeにPermissionを委譲出来ます。

var iframe = document.getElementById('embedee');
navigator.permissions.delegate({embedee: iframe, name: 'geolocation'}).then(
  function() {
    // Delegated geolocation.
  }).catch(function() {
    // Delegation failed.
  });

JavaScriptからは委譲を辞めることも出来ます。

navigator.permissions.undelegate({embedee: iframe, name: 'geolocation'});

2016-06-13

Go実装のWebサーバ CaddyのQUICを試す

2016/060/15追記

  • alt-svcヘッダのセットは、有効な証明書を使用したhttpsで行う必要がありました
  • ブラウザは53.0.2768.0 (Official Build) canaryでのみ動作確認しました


Go実装のWebサーバであるCaddyが実験的にQUICのサポートをしました。簡単に動かしてみます。


Caddy

-quic オプションを指定して起動するだけでQUICが有効になります

go get github.com/mholt/caddy/caddy
GOPATH/bin/caddy -config Caddyfile -quic

Caddyfileは特殊なことはありませんが、ブラウザでアクセス出来るようにTLSの設定と、alt-svcヘッダでQUICに対応している事をブラウザに通知します

:443

tls server.crt server.key
header / {
  alt-svc "quic=\":443\"; ma=2592000; v=\"34,33,32\""
}

アクセスする

Chromeでアクセスると、こんな感じでQUICで通信していることが割ります。

f:id:ASnoKaze:20160613233843p:image


うまくいかない場合は

ブラウザのQUICが有効になっていること、alt-svcを読み込めてる事を確認すると良いと思います


Chromeはそれぞれ下記の内部ページを参照のこと

  • chrome://net-internals/#alt-svc
  • chrome://net-internals/#quic
  • chrome://flags/