Плохая политика CSP для JS-файла

Здравствуйте,

Я установил экземпляр Discourse вчера, а сегодня он показывает чёрную страницу, и в консоли я вижу:

Refused to load the script 'https://ajax.cloudflare.com/cdn-cgi/scripts/95c75768/cloudflare-static/rocket-loader.min.js' because it violates the following Content Security Policy directive: "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/". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.
A bad HTTP response code (404) was received when fetching the script.

Как я могу это исправить?

Отключите Cloudflare для вашего сайта в панели управления Cloudflare. В частности, функция Rocket Loader абсолютно несовместима с Discourse.

Не могли бы вы подробнее объяснить, почему это «абсолютно» несовместимо? Я использую это в других приложениях на Rails, которые сильно кастомизированы и оптимизированы, и у меня всё работает успешно (обычно после небольшой отладки). Мне интересно, почему Discourse не был переработан, чтобы обеспечить работу со всем набором сервисов CloudFlare, учитывая, что они широко используются.

Спросите CloudFlare, почему, это их код, а не наш.

Здесь нет никакой выгоды или стимула.

Кажется, вы исходит из предположения, что Cloudflare может оптимизировать код Discourse лучше, чем собственные разработчики CDCK. На чем основано ваше мнение?

Cloudflare подходит в качестве кэша, но все функции производительности должны быть отключены, иначе ваша установка не будет поддерживаться.

Судя по некоторым обсуждениям, которые я видел здесь, существуют проблемы с тем, что значимая отрисовка первого кадра (First Meaningful Paint) происходит достаточно быстро: в различных тестах получаются именно такие результаты. Я надеялся, что Rocket Loader возможно ещё больше сократит это время, пока в данной области ведутся работы по её устранению.

Нет, это только ухудшит ситуацию. Discourse — это JavaScript-приложение, поэтому первая загрузка займёт чуть больше времени, так как приложение должно быть загружено в JavaScript-окружение браузера.

Спасибо за уточнение.

Технически это должно работать, но если не работает, то потому, что Cloudflare написал плохой код. Если вы хотите продолжить разбирательство, напишите им об этом. Мы не можем контролировать код Cloudflare, потому что мы… не Cloudflare.

Надеюсь, всё достаточно понятно.