Origin-Agent-Cluster
Origin-Agent-Cluster
HTTP 响应头用于请求将关联的 Document
放入源键控的 代理集群 中。这意味着用于评估文档的操作系统资源(例如,操作系统进程)应仅与来自同一 源 的其他文档共享。
这样做的效果是,资源密集型文档不太可能降低来自其他源的文档的性能。
现代 Web 浏览器具有多进程架构,其中来自不同源的页面可以在不同的操作系统进程中运行。这对于性能非常重要,因为它意味着资源密集型页面不会对用户打开的其他页面产生太大影响。
但是,由于某些依赖于同源、跨源通信的 DOM API,浏览器通常无法在不同的进程中运行同站、跨源页面。例如,默认情况下,来自以下两个源的页面将共享相同的操作系统资源
https://apples.example.org https://oranges.example.org
通过设置 Origin-Agent-Cluster
标头,页面可以请求浏览器为该源分配专用的资源,这些资源不与任何其他源共享。
浏览器不需要遵守该请求。如果浏览器遵守了该请求,则 Window.originAgentCluster
属性将返回 true
,并且窗口将无法执行以下操作,这些操作都依赖于同源、跨源通信
- 使用
Document.domain
。 - 使用
postMessage()
将WebAssembly.Module
对象发送到其他同站跨源页面。 - 将
SharedArrayBuffer
或WebAssembly.Memory
对象发送到其他同站跨源页面。
源键控代理集群不应被视为安全功能:浏览器可能由于各种原因忽略该请求,或者选择以不提供内存保护的方式实现它(例如,使用单独的线程而不是单独的进程)。相反,此功能是一个提示,表明如果为该源分配专用资源,则用户体验将得到改善。
例如,假设您的网站包含来自一个源的页面,该页面嵌入了一个同站、跨源 iframe,该 iframe 运行一个资源密集型游戏。通过在 iframe 中的文档上设置 Origin-Agent-Cluster
,您可以防止游戏影响主页面性能。
浏览器将确保来自给定源的所有页面要么是源键控的,要么不是。这意味着
- 如果来自某个源的第一个页面未设置标头,则来自该源的其他页面将不会是源键控的,即使这些其他页面设置了标头也是如此。
- 如果来自某个源的第一个页面设置了标头并被设为源键控,则来自该源的所有其他页面都将是源键控的,无论它们是否请求。
为了避免这种不可预测的情况,您应该为来自给定源的所有页面设置此标头,或者都不设置。
语法
Origin-Agent-Cluster: <boolean>
指令
示例
Origin-Agent-Cluster: ?1
规范
规范 |
---|
HTML 标准 # origin-agent-cluster |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。