Signed HTTP Exchange

安田氏

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

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

Signed Exchange: 本質

これにより、コンテンツの配信元と配信元が切り離されます。特定のサーバー、接続、ホスティング サービスに依存することなく、コンテンツをウェブ上に公開できます。SXG を以下のように活用できることを期待しています。

  • プライバシーを保護するプリフェッチ: 後続のナビゲーションのためにリソースを(リンク rel=prefetch などで)プリフェッチすると、ナビゲーションがはるかに速くなる可能性がありますが、プライバシー上のデメリットもあります。たとえば、クロスオリジン ナビゲーション用のリソースをプリフェッチすると、ユーザーが最終的にサイトにアクセスしたものでなくても、ユーザーが特定の情報に関心を持っている可能性があることをリンク先サイトに開示できます。一方、SXG では、デスティネーション サイトにアクセスすることなく、高速キャッシュからクロスオリジン リソースをプリフェッチできるため、ナビゲーションが発生した場合にのみユーザーの関心を伝えることができます。この機能は、ユーザーを他のウェブサイトに誘導することを目的とするサイトに役立つと考えています。特に、Google ではこれを 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 のバグをチームに報告したりすることもできます。皆様からのフィードバックは、標準化プロセスや実装の問題の解決に大いに役立ちます。

フィードバック