我在哪里搞砸了?
首先,这里:
我可以在域中添加一个标头以允许来自 CloudFlare 的脚本:
add_header Content-Security-Policy "script-src 'self' ajax.cloudflare.com;";
我在 Nginx 配置中这样做了
其次,您信任该report-uri服务,但它让您失望了。
- 在将 CSP 标头添加到 Nginx 配置之前,您遇到了问题
ajax.cloudflare.com(否则,为什么要添加它)。这意味着您已经通过 HTTP 标头或元标记发布了 CSP <meta http-equiv= 'Content-Security-Policy'>。
通过将 CSP 标头添加到 Nginx 配置,您已向页面添加了第二个策略。
多个 CSP 作为顺序过滤器工作 - 所有源都必须通过两个 CSP 才能被解析。第二个 CSP 允许ajax.cloudflare.com主机源,但第一个仍然禁止它(您在检查器中观察到)。
您必须弄清楚第一个 CSP 的发布位置并将其添加ajax.cloudflare.com到其中,而不是发布第二个 CSP。
- 没有人知道
report-uri如果同时发布两个 CSP HTTP 标头或一个与元标记配对的 HTTP 标头,它的幕后是什么以及它会如何反应
看看浏览器实际获得了哪个 CSP 以及其中有多少,指南是在这里。
如果有 2 个 CSP 标头,您将看到如下内容:

如果是 CSP 元标记,您可以通过检查 HTML 代码轻松检查。
我想report-uri只是没想到会出现这样的情况。