Origin-Agent-Cluster header
HTTP Origin-Agent-Cluster 响应头用于请求将关联的 Document 放置在源键代理集群中。这意味着用于评估文档的操作系统资源(例如,操作系统进程)应仅与来自相同源的其他文档共享。
其效果是,资源密集型文档不太可能降低来自其他源的文档的性能。
语法
http
Origin-Agent-Cluster: <boolean>
指令
描述
现代 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,您可以防止游戏影响主页面的性能。
浏览器将确保来自给定源的所有页面要么是源键的,要么不是。这意味着:
- 如果来自某个源的第一个页面未设置标头,则该源的任何其他页面都不会是源键的,即使这些其他页面设置了标头。
- 如果来自某个源的第一个页面设置了标头并被设置为源键,则该源的所有其他页面都将是源键的,无论它们是否请求。
为了避免这种不可预测的情况,您应该为给定源的所有页面设置此标头,或者都不设置。
示例
http
Origin-Agent-Cluster: ?1
规范
| 规范 |
|---|
| HTML # origin-agent-cluster |
浏览器兼容性
加载中…
另见
Window.originAgentCluster- JavaScript 执行模型中的代理集群和内存共享
- web.dev 上使用 Origin-Agent-Cluster 标头请求性能隔离