Signed HTTP Exchange

Kinuko Yasuda

Signed HTTP Exchange (或稱「SXG」) 是Web Packages 這項新興技術的子集,可讓發布者安全地將自身內容變成可供搬運的狀態,同時維護自身的完整性和內容歸屬關係。可攜式內容有許多優點,包括可加快內容傳送速度、方便使用者分享內容,以及提供更簡單的離線體驗。

那麼,Signed HTTP Exchange 的運作方式為何?這項技術可讓發布商簽署單一 HTTP 交換內容 (即要求/回應組合),以便從任何快取伺服器提供已簽署的交換內容。瀏覽器載入此 Signed Exchange 時,可以安全地在網址列中顯示發布商的網址,因為交換中的簽名已足以證明內容最初來自發布商的來源。

Signed Exchange:重點

這麼做可將內容來源與發布者分開。您可以發布內容到網路上,而無須依賴特定伺服器、連線或代管服務!我們很期待 SXG 的潛在用途,例如:

  • 隱私權保護預先載入:雖然為後續導覽預先載入資源 (例如使用 rel=prefetch 連結) 可讓導覽速度變得更快,但也會帶來隱私權方面的缺點。舉例來說,如果您為跨來源導覽預先載入資源,就會向目的地網站揭露使用者可能對某項資訊感興趣,即使使用者最終並未造訪該網站也一樣。另一方面,SXG 可從快速快取中預先載入跨來源資源,而無須連線至目的地網站,因此只會在導覽發生時傳達使用者興趣。我們認為,這項功能對於希望將使用者帶往其他網站的網站而言,十分實用。具體來說,Google 計畫在 Google 搜尋結果頁面中使用這項功能,以改善 AMP 網址,並加快搜尋結果的點擊速度。

  • 使用 CDN 的好處,且不會失去憑證私密金鑰的控制權:突然變得熱門的內容 (例如從 reddit.com 首頁連結而來),通常會造成提供內容的網站超載,如果該網站相對較小,就可能會變慢,甚至暫時無法使用。只要使用快速且功能強大的快取伺服器分享內容,就能避免這種情況,而 SXG 可讓您在不分享 TLS 金鑰的情況下做到這點。

試用 Signed Exchange

簽署交換可在 Chrome 73 以上版本使用,先前曾以來源試用版的形式提供。

建立 SXG

如要為來源 (以發布者的身分) 建立 SXG,您需要使用憑證金鑰簽署簽名,且憑證必須具備特殊的 「CanSignHttpExchanges」擴充功能,才能以有效的 SXG 進行處理。截至 2018 年 11 月,DigiCert 是唯一支援此擴充功能的 CA,您可以透過這個頁面申請適用於 SXG 的憑證。

取得 SXG 憑證後,您可以使用 GitHub 發布的參照產生工具,自行建立 SXG。

您也可以在 Chrome 程式碼存放區中查看實際的 SXG 範例檔案 (例如這個檔案,這是為簡單文字檔建立的最簡單檔案)。請注意,這些憑證主要是用於本機測試,因此請勿期待這些憑證含有有效的憑證和簽章時間戳記。

在本機測試功能

如要建立測試用的 SXG,您可以建立自行簽署的憑證,並啟用 chrome://flags/#allow-sxg-certs-without-extension,讓 Chrome 處理使用憑證建立的 SXG,而無須使用特殊擴充功能。

如果伺服器、憑證和 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>

請注意,Chrome 73 以上版本中,只有錨點標記 (<a>) 和 link rel=prefetch 支援 SXG。另請注意,每個規格簽章的有效期限上限為 7 天,因此簽署內容的有效期限會相對較短。

提供意見回饋

我們很樂意聽取你對這項實驗的意見回饋,歡迎來信至 webpackage-dev@chromium.org。您也可以加入規格討論,或向團隊回報Chrome 錯誤。您的意見回饋將大大有助於標準化程序,並協助我們解決實作問題。

意見回饋