CSP 策略不良的 JS 文件

你好,

我昨天安装了一个 Discourse 实例,今天页面显示为黑色,在控制台中我看到:

拒绝加载脚本 'https://ajax.cloudflare.com/cdn-cgi/scripts/95c75768/cloudflare-static/rocket-loader.min.js',因为它违反了以下内容安全策略(Content Security Policy)指令:"script-src 'unsafe-eval' 'report-sample' [url]/logs/ [url]/sidekiq/ [url]/mini-profiler-resources/ [url]/assets/ [url]/brotli_asset/ [url]/extra-locales/ [url]/highlight-js/ [url]/javascripts/ [url]/plugins/ [url]/theme-javascripts/ [url]/svg-sprite/"。注意,未显式设置 'script-src-elem',因此使用 'script-src' 作为回退。
在获取脚本时收到了错误的 HTTP 响应代码(404)。

我该如何修复这个问题?

请在 Cloudflare 控制面板中为您的网站禁用 Cloudflare。特别是 Rocket Loader 功能与 Discourse 完全不兼容。

能否请您详细说明一下,为什么这“绝对”不兼容?我在其他经过深度定制和优化的 Rails 应用中成功使用了它(通常只需稍作调试即可)。我很好奇,既然 CloudFlare 的服务套件被广泛使用,为什么 Discourse 还没有进行重构以使其与全套 CloudFlare 服务兼容?

问问 CloudFlare 吧,这是他们的代码,不是我们的。

这里实际上没有任何好处或激励。你似乎假设 Cloudflare 能比 Discourse 官方开发团队更好地优化 Discourse 代码。你的依据是什么?

Cloudflare 作为缓存是可以的,但必须禁用所有性能功能,否则你的安装将完全不受支持。

从我在这里看到的一些讨论来看,在各种测试中,有意义的首次绘制(Meaningful First Paint)出现得不够快的问题似乎确实存在。我原本希望 Rocket Loader 能够在相关领域实际开展解决工作期间,进一步减少这一问题。

不,那会让情况更糟。Discourse 是一个 JavaScript 应用,因此首次加载会消耗更多资源,因为应用需要下载到浏览器的 JavaScript 运行时中。

谢谢您的澄清。

从技术上讲,它_应该_能正常工作,但如果不行,那是因为 Cloudflare 的代码写得不好。如果你希望进一步解决这个问题,可以给他们发邮件。我们无法控制 Cloudflare 的代码,因为我们……不是 Cloudflare。

希望这已经足够清楚了。