WebPackagingと呼ばれる仕組みが議論されているのは、以前このブログでも紹介したとおりである。
asnokaze.hatenablog.com
この仕組みは3つの仕様からなる。
- Signed HTTP exchanges
- Bundled HTTP exchanges
- Loading
署名されたHTTP Exchangesをユーザエージェントがどのように読み込むかを定義したLoadingの仕様ですが、
、他のものにくらべ少々遅くなったが、「Loading Signed Exchanges」としてリポジトリに追加されていたので簡単に目を通す。
が、Fetch力が高くないので詳しい人に補足頂ければ幸いだ。
Loading Signed Exchanges
僕なりの理解としては、大まかなLodingの流れは以下の通り。
Signed HTTP Exchangesの一形式であるsxgファイルを https://distributor.example.org/foo.sxg から読み込んで、署名されているhttps://publisher.example.org/foo からのHTTPレスポンスを読み込む例を示す。
- ユーザエージェントがhttps://distributor.example.org/foo.sxgをフェッチする
- 取得したfoo.sxgのMIME Typeがapplication/signed-exchangeであることを確認し、signed exchangesをパースし、証明書や署名や有効期限などもろもろの確認を行う。
- もともとのリクエストを https://publisher.example.org/foo にリダイレクトする (通常通りのリダイレクト)
- そのリダイレクトが signed exchanges に含まれるリクエストとマッチすることを確認
- signed exchangesからレスポンスを得る
具体的には、Fetchの使用に対してMonkey Patchを当てるとともに、公開鍵や署名といったValidationのアルゴリズムを定義している。またService Workerでの扱いについても言及している。