在响应 non-HTML 请求时设置内容安全策略是什么意思?

What does it mean to set a Content Security Policy on response to a non-HTML request?

我知道我可能会为我网站的主页设置一个 CSP header,比如 https://example.com,以限制我可以加载脚本和其他资源的位置。但是,如果主页上没有 CSP,浏览器将如何处理后续请求的策略?

这是两个合二为一的例子:

  1. 我浏览到 https://example.com 并取回一些 HTML(无 CSP header)
  2. HTML 包含来自 https://example.com/script.js [*]
  3. 的脚本
  4. 此脚本通过向 https://api.example.com [*]
  5. 发出 GET 从 API 请求一些数据
  6. 同一个脚本然后打开一个到同一个域的 websocket,https://api.example.com
  7. 然后相同的脚本发出另一个请求,从外部发布到 https://api.analytics.com

[*] 在第 2 步和第 3 步中,如果 script.js 或 JSON 响应返回限制性 CSP,如 Content-Security-Policy: default-src 'none',会发生什么情况?是否会更改任何下游请求?浏览器是否采取任何措施来阻止脚本的任何请求?还是因为原始页面加载不包含任何 CSP 而被允许?

谢谢!

current CSP spec(版本 2)说(强调我的):

3.6. Policy applicability

Policies are associated with an protected resource, and enforced or monitored for that resource. If a resource does not create a new execution context (for example, when including a script, image, or stylesheet into a document), then any policies delivered with that resource are discarded without effect. Its execution is subject to the policy or policies of the including context.

CSP 仅适用于创建新执行上下文(即网页)的资源,其中仅包括 top-level 文档、嵌入式 objects 等 <iframe>s 和脚本作为网络工作者加载。如果通过 HTTP 提供资源并且未以创建新执行上下文的方式使用该资源,则 CSP 无效。

因此,无论是否使用 Content-Security-Policy header.

,您的脚本的行为都是相同的