新的 HTTP 回應標頭可限制全網域指令碼,並要求瀏覽器提供專屬資源。
Origin-Agent-Cluster
是新的 HTTP 回應標頭,可指示瀏覽器防止
跨網站跨來源網頁之間的同步指令碼存取。瀏覽器也可能會使用
Origin-Agent-Cluster
做為提示,表示來源應具備自己的獨立資源,例如
這套專屬程序
瀏覽器相容性
目前 Origin-Agent-Cluster
標頭只能在 Chrome 88 以上版本中實作。設計上
與 Mozilla Firefox 的代表密切合作,獲得價值
設計原型,
初步正向
接球時間
WebKit 的代表,這是 Safari 所使用的瀏覽器引擎。
但在這段期間,您可以將 Origin-Agent-Cluster
標頭部署至所有
目前使用人數無法理解它的瀏覽器只會忽略它。由於
origin-keyed 代理程式叢集與 site-keyed 叢集相較,可執行的操作少很多 (
時,您不用擔心互通性問題。
為什麼瀏覽器無法自動隔離同網站來源
網路採用同源政策,這項安全功能會
限製文件和指令碼如何與其他資源的互動方式
origin。舉例來說,代管於 https://a.example
的網頁位於
來自於 https://b.example
或 https://sub.a.example
的另一個來源。
瀏覽器在幕後採用來源提供的區隔方式有所不同。舊的 即使各個來源無法存取彼此的資料,仍可 共用資源,例如作業系統執行緒、程序和記憶體配置。也就是說 則會導致其他分頁的速度變慢。或者如果一個分頁使用太多記憶體 會讓整個瀏覽器當機。
現今的瀏覽器技術更為複雜,請嘗試將不同的來源分成不同的來源 作業。實際運作方式因瀏覽器而異:多數瀏覽器都提供一定程度的區隔 但單一分頁中的不同 iframe 則可能共用程序。由於程序 會耗用一些記憶體,並運用經驗法則,避免產生過多記憶體,例如 Firefox 具有使用者可設定的處理程序限制。 Chrome 瀏覽器在電腦和行動裝置 (記憶體用量較高) 和行動裝置 (記憶體用量較高) 之間會有所差異 稀疏度)。
這些經驗法則並非完美。其中存在一個重要限制:
同源政策則允許子網域 (例如 https://sub.a.example
和
https://a.example
互相通訊,但瀏覽器無法自動隔離來自
互相啟動。
這個預設行為稱為「site-keyed 代理程式叢集」,亦即瀏覽器會根據
網站上的完整內容。新的 Origin-Agent-Cluster
標頭會要求瀏覽器變更這項預設值
某個頁面的行為,將其放入 origin-keyed 代理程式叢集,以便歸入同一組
其他網頁只有來源完全相同的網頁。尤其是相同網站的跨來源頁面
會從代理程式叢集中排除
有了這項選擇區隔功能,瀏覽器就能為這些新的 origin-keyed 代理程式叢集建立專屬
專屬資源,並未與其他來源的資源結合。例如,這類網頁
可以有各自的程序,或分別排定在不同的執行緒上。將
Origin-Agent-Cluster
標頭,這就等於向瀏覽器指出
充分運用這類專屬資源
不過,瀏覽器必須先停用 有些舊版功能
來源輸入頁面不可執行的功能
當網頁位於 origin-keyed 代理程式叢集時,您可以賦予與相同網站對話的功能 先前可用的跨來源頁面請特別注意以下幾點:
您無法再進行設定
document.domain
。這是 通常允許同網站跨來源網頁同步存取 但是在 origin-keyed 代理程式叢集內 其他的 DOM 即會停用您無法再匯款
WebAssembly.Module
敬上 透過postMessage()
傳送至其他同網站跨來源頁面的物件。(僅適用於 Chrome) 您將無法再傳送
SharedArrayBuffer
敬上 或WebAssembly.Memory
。 將物件傳送至其他同網站跨來源頁面。
使用 origin-keyed 代理程式叢集的時機
下列來源最能受惠於 Origin-Agent-Cluster
標頭:
如果情況允許,請盡可能使用專屬資源取得最佳效能。範例包括 需要大量效能的遊戲、視訊會議網站,或多媒體製作應用程式。
包含來源不同但來源不同,且資源密集型 iframe。舉例來說
https://mail.example.com
嵌入https://chat.example.com
iframe、origin-keyinghttps://mail.example.com/
可確保即時通訊團隊撰寫的程式碼不會意外 幹擾郵件小組撰寫的程式碼,並可以提示瀏覽器告訴瀏覽器 程序獨立進行,並降低兩者對成效的影響。希望能夠嵌入不同來源的相同網站頁面,但也知道為 而且耗用大量資源舉例來說,如果
https://customerservicewidget.example.com
預期使用 提供大量視訊通訊資源,同時將嵌入業界各處https://*.example.com
,維護這個小工具的團隊可以使用Origin-Agent-Cluster
標題,嘗試降低對嵌入器的效能影響。
此外,您必須確定可以停用上述很少使用案例 跨來源通訊功能,且您的網站使用 HTTPS。
但最後,這些只是規範。origin-keyed 代理程式叢集是否可協助網站 能否透過評估結果做出最佳決定具體而言,建議你評估 網站體驗指標,也可能是記憶體 來瞭解 origin-keying 的影響。( 隨著作業流程增加,使用者也能夠 每個程序的記憶體負擔)。請不要只推出來源鍵功能,並希望一切順利。
這與跨來源隔離有何關係?
透過 Origin-Agent-Cluster
標頭執行的代理程式叢集的 origin-keying 牽涉到
透過 Cross-Origin-Opener-Policy
和內部資源進行跨來源隔離
Cross-Origin-Embedder-Policy
標頭。
凡是自行進行跨來源隔離的網站,也會停用相同的同網站跨來源
通訊功能,就如同使用 Origin-Agent-Cluster
標頭時一樣。不過,
除了跨來源隔離之外,Origin-Agent-Cluster
標頭仍能做為額外的
提示瀏覽器修改資源分配經驗法則因此,建議你
並套用 Origin-Agent-Cluster
標頭並測量結果,
已將跨來源隔離
如何使用 Origin-Agent-Cluster
標頭
如要使用 Origin-Agent-Cluster
標頭,請將網路伺服器設為傳送下列 HTTP
回應標頭:
Origin-Agent-Cluster: ?1
?1
的值是「結構化」
布林值的標頭語法true
值。
請務必針對來自來源的「所有」回應傳送這個標頭,而不只是部分網頁。 否則,可能會出現不一致的結果,當瀏覽器「記住」通常來自於來源金鑰 因此即使是未提出要求的網頁 也同樣是來源鍵反之:如果第一頁 如果使用者造訪不含標頭,瀏覽器就會記住來源 設為 origin-keyed 並忽略後續頁面的標頭
之所以出現這個「記憶體」一詞的原因是要確保來源金鑰的一致性如果
表示來源是 origin-key,有些則沒有,那麼您就可以有兩個相同來源的頁面
無法彼此通訊這會是
對網頁程式開發人員和瀏覽器的內部而言,都很奇怪。規格
如果標頭與先前的設定不一致,則 Origin-Agent-Cluster
會忽略標頭
針對特定來源看到的樣子而在 Chrome 中,則會收到控制台警告。
這項一致性的範圍僅限於瀏覽情境群組,也就是一組分頁、視窗或
這類 iframe 可以透過 window.opener
、frames[0]
或
window.parent
。這表示在設定來源的來源或網站鍵功能 (由
無論是否看到標頭),如要變更標頭,必須開啟全新的
而不會與舊視窗連結
測試 Origin-Agent-Cluster
標頭時,這些詳細資料非常重要。首次新增
網站,僅重新載入網頁就沒有作用;請先關閉分頁,然後重新開啟
第一項。
如要檢查是否套用 Origin-Agent-Cluster
標頭,請使用 JavaScript
window.originAgentCluster
屬性。如果標頭 (或其他值)true
機制 (例如跨來源隔離) 觸發來源鍵功能;false
才不會;和 undefined
(瀏覽器不支援 Origin-Agent-Cluster
標頭)。
將這些資料記錄到數據分析平台後,就能進行您所設定的重要檢查
正確設定您的伺服器
最後請注意,Origin-Agent-Cluster
標頭僅適用於安全
背景資訊,即 HTTPS 上
或 http://localhost
上的網頁。非 localhost HTTP 網頁不支援 origin-keyed 代理程式
叢集內
來源金鑰並非安全防護功能
使用 origin-keyed 代理程式叢集時,會將來源與同步存取隔離開來
不同來源的相同網站頁面,並不會提供保護措施。
安全性相關標頭 (例如
Cross-Origin-Resource-Policy
敬上
和
Cross-Origin-Opener-Policy
。
尤其是,因為像是
Spectre。
你可能會覺得這有點出乎意料,因為來源鍵有時可能會導致您的來源產生本身的
程序和獨立程序,是抵禦旁路攻擊的重要防禦措施。但請注意
此時,Origin-Agent-Cluster
標頭只是提示。瀏覽器並非
獨立程序進行獨立程序,但基於下列幾種原因而未這麼做:
因為瀏覽器可能未導入這項技術。舉例來說,目前 Safari 和 Firefox 可以在各自的程序中放置個別分頁,但 iframe 目前無法這麼做。
瀏覽器可能會判定並非值得另外執行程序的負擔。例如,在 記憶體不足的 Android 裝置或 Android WebView 時,Chrome 會盡可能減少使用的處理程序。
瀏覽器可能會採用
Origin-Agent-Cluster
標頭指出的要求, 但可以採用與程序不同的隔離技術來實現這個目標舉例來說,Chrome 是 探索 採用執行緒,而非程序來區隔這類效能。使用者或在其他網站上執行的程式碼,可能已瀏覽到網站輸入頁面 導致一致性保證生效,且 要完全忽略
Origin-Agent-Cluster
標頭。
因此,請勿將 origin-keyed 代理程式叢集視為安全防護功能。 它可指示您的 使用專屬資源 (而且您願意放棄不確定性) 功能)。
意見回饋
Chrome 團隊十分期待您的回覆,如果您正在使用或考慮使用Origin-Agent-Cluster
標題。你的公眾興趣與支援有助於我們優先開發相關功能,以及顯示其他
有多麼重要在 @ChromiumDev 和
讓 Chrome DevRel 瞭解你的想法和經驗。
如果對規格或功能運作方式有其他疑問
前往 HTML 標準 GitHub 存放區提報問題。如果你
如果遇到任何 Chrome 實作方面的問題,請前往
new.crbug.com
並將「Component」欄位設為 Internals>Sandbox>SiteIsolation
瞭解詳情
如要進一步瞭解 origin-keyed 代理程式叢集,請點選下列連結來瞭解詳情: