Double-keyed HTTP cache に関するメモ

201909027追記

Fetchの仕様にプルリクが出されています
HTTP cache partitioning by shivanigithub · Pull Request #943 · whatwg/fetch · GitHub


whatwgでfetchに関して「Double-keyed HTTP cache」という議論がされています。

github.com

ブラウザ側でも動きがあり、下記で議論がされています

背景

HTTPのキャッシュは、そのリソースがどのページ(ドメイン)で読み込まれたかに関わらずに共有で使用されます。しかし、そのキャッシュ状況をサイドチャネル攻撃で調べることによって、特定のリソースが別のページによってロードされているか確認することができます。

この方法を用いて、ユーザの検索履歴や連絡先情報などが取得可能であることを示した「Mass XS-Search using Cache Attack」という例もあります。

この問題への対策がDouble-keyed HTTP cacheです。

Double-keyed HTTP cache

Double-keyed HTTP cacheでは、ページを開いた際のアドレスバーに表示されているオリジンをキャッシュのキーとして使用します。

https:///a.example.comで読み込んだリソースのキャッシュは、https://b.example.comでは使用できなくなります。

これによって、そのリソースがキャッシュされているかはクロスドメインでは確認できなくなります。

Googleの調査ではChromeの開発版での統計データでは、キャッシュのヒット率が4%ほど低下し、キャッシュから読み込まれるデータ量は39.1%から37.8%に低下したと述べています。first contentful paintは大きく変わらなかったとしています。

また、クロスオリジンでキャッシュに読み込む機能のある、クロスオリジンのprefetch、HTTP/2サーバプッシュ(特にキャンセルによってキャッシュの有無が把握可能)については検討が必要そうです(関連資料)。

その他にもCDNへの影響など、議論は引き続き行われそうです。