Signed HTTP Exchange

Kinuko Yasuda

Signed HTTP Exchange(SXG)は、ウェブ パッケージと呼ばれる新しい技術のサブセットです。これにより、ニュース メディアはコンテンツの整合性と帰属情報を維持しながら、コンテンツを安全に移植できます。つまり、第三者による再配布が可能になります。ポータブル コンテンツには、コンテンツ配信の高速化、ユーザー間のコンテンツ共有の容易化、よりシンプルなオフライン エクスペリエンスなど、多くのメリットがあります。

それでは、Signed HTTP Exchange の仕組みについて説明します。このテクノロジーにより、パブリッシャーは任意のキャッシュ サーバーから Signed Exchange を提供できるように、単一の HTTP 交換に署名(リクエスト/レスポンスのペア)できます。ブラウザがこの Signed Exchange を読み込むと、パブリッシャーの URL をアドレスバーに安全に表示できます。これは、エクスチェンジの署名が、コンテンツが元のパブリッシャーのものであることを証明するのに十分なためです。

Signed Exchange: 基本

これにより、コンテンツの出所と配信元が分離されます。特定のサーバー、接続、ホスティング サービスに依存することなく、コンテンツをウェブ上に公開できます。SXG には次のような用途があります。

  • プライバシーを保護するプリフェッチ: 後続のナビゲーションのためにリソースを(link rel=prefetch などで)プリフェッチすると、ナビゲーションのスピードが大幅に向上しますが、プライバシーの欠点もあります。たとえば、クロスオリジン ナビゲーション用のリソースをプリフェッチすると、ユーザーが最終的にサイトにアクセスしていなくても、ユーザーが情報に関心を持っている可能性があることがリンク先サイトに開示されます。一方、SXG では、宛先サイトにアクセスすることなく、高速キャッシュからクロスオリジン リソースをプリフェッチできるため、ナビゲーションが発生した場合にのみユーザーの関心が伝達されます。この機能は、ユーザーを他のウェブサイトに誘導することを目的としたサイトに役立ちます。特に Google では、検索結果ページでのこの機能を利用して、AMP URL の改善と検索結果のクリック速度の向上を図っていく予定です。

  • 証明書の秘密鍵の制御を奪われない CDN のメリット: 突然人気が高まったコンテンツ(たとえば、reddit.com の最初のページからリンク)は、コンテンツ配信先のサイトに過負荷をかけることが多く、サイトの規模が比較的小さい場合は、速度が遅くなったり、一時的に利用できなくなったりする傾向があります。高速で強力なキャッシュ サーバーを使用してコンテンツを共有すると、この状況を回避できます。SXG では、TLS 鍵を共有せずにこれを実現できます。

Signed Exchange を試す

Signed Exchange は、Chrome 73 以降で利用できます。以前はオリジン トライアルとして提供されていました。

SXG の作成

送信元(パブリッシャー)の SXG を作成するには、署名に署名するための証明書鍵が必要です。また、有効な SXG として処理されるように、証明書には特別な 「CanSignHttpExchanges」拡張機能が必要です。2018 年 11 月の時点で、この拡張機能をサポートしている CA は DigiCert のみです。SXG で使用できる証明書はこちらのページからリクエストできます。

SXG の証明書を取得したら、github で公開されているリファレンス生成ツールを使用して、独自の SXG を作成できます。

Chrome のコード リポジトリにある実際の SXG サンプル ファイルを見ることもできます(たとえば、こちらシンプルなテキスト ファイル用に作成された最もシンプルなファイルです)。これらは主にローカルテスト用に生成されますが、署名に有効な証明書とタイムスタンプが含まれているとは想定しないでください。

ローカルでの機能のテスト

テスト目的で SXG を作成する場合は、自己署名証明書を作成し、chrome://flags/#allow-sxg-certs-without-extension を有効にして、特別な拡張機能のない証明書を使用して作成された SXG を Chrome で処理します。

サーバー、証明書、SXG が正しく設定されていれば、次のようなコードが機能します。

<!-- prefetch the sample.sxg -->
<link rel="prefetch" href="https://your-site.com/sample.sxg" />

<!-- clicking the link below should make Chrome navigate to the inner
     response of sample.sxg (and the prefetched SXG is used) -->
<a href="https://your-site.com/sample.sxg">Sample</a>

SXG は Chrome 73 以降のアンカータグ(<a>)と link rel=prefetch でのみサポートされています。また、署名の有効期限は仕様ごとに 7 日間に制限されているため、署名されたコンテンツは比較的短時間で期限切れになります。

フィードバックの提供

このテストに関するご意見やご感想がございましたら、webpackage-dev@chromium.org までご連絡ください。仕様に関するディスカッションに参加したり、チームに Chrome のバグを報告したりすることもできます。皆様からのフィードバックは、標準化プロセスと実装の問題への対処に大いに役立ちます。

フィードバック