Обновление с 2.4.0.beta9 до 2.4.0.beta10 приводит к появлению страницы без содержимого — Cloudflare Rocket Loader

Сегодня утром я получил уведомление по электронной почте о обновлении браузера в один клик, которое я, как обычно, выполнил. После завершения и возврата на форум у меня отображается только пустая страница с ожидаемым фоном и изображением заголовка, но без какого-либо другого содержимого.

Переключение в /var/discourse и запуск ./launcher rebuild app выполняется как положено, но сайт форума ведёт себя так же (изображение заголовка + фон, без содержимого).

Помогите!

Если я просмотрю исходный код, то вижу, что хотя бы ЧАСТЬ контента там есть… она просто не отображается. Никаких изменений в них не вносилось между 2.4.0.beta9 и текущей сборкой.

Есть ли ошибки в консоли вашего браузера? (Щёлкните правой кнопкой мыши, выберите «Просмотреть код» и перейдите на вкладку «Консоль»).

Да:

Загрузка скрипта ‘https://ajax.cloudflare.com/cdn-cgi/scripts/7089c43e/cloudflare-static/rocket-loader.min.js’ заблокирована, так как она нарушает следующую директиву политики безопасности контента (CSP): “script-src ‘report-sample’ https://forums.stillwellaudio.com/logs/ https://forums.stillwellaudio.com/sidekiq/ https://forums.stillwellaudio.com/mini-profiler-resources/ https://forums.stillwellaudio.com/assets/ https://forums.stillwellaudio.com/brotli_asset/ https://forums.stillwellaudio.com/extra-locales/ https://forums.stillwellaudio.com/highlight-js/ https://forums.stillwellaudio.com/javascripts/ https://forums.stillwellaudio.com/plugins/ https://forums.stillwellaudio.com/theme-javascripts/ https://forums.stillwellaudio.com/svg-sprite/ https://www.google-analytics.com/analytics.js”. Обратите внимание, что директива ‘script-src-elem’ явно не задана, поэтому используется ‘script-src’ как запасной вариант.

20 Ресурс был предварительно загружен с помощью link preload, но не использовался в течение нескольких секунд после события загрузки окна. Убедитесь, что у него указано соответствующее значение атрибута as и что предварительная загрузка выполнена намеренно.

«Оптимизация» JavaScript от Cloudflare регулярно вызывает проблемы на сайтах Discourse. Вам следует войти в свою учётную запись Cloudflare и изменить домен форума с «оранжевого облака» на «серое облако».

Это легко исправить, спасибо. Немного обидно, что это обходит всю защиту от DDoS-атак и скрытие IP-адресов Cloudflare, но изменение всё-таки помогло. Я свяжусь со службой поддержки Cloudflare, чтобы сообщить об этой проблеме.

Я не думаю, что Cloudflare может что-то сделать автоматически. Существуют инструкции по разрешению Rocket Loader в CSP. Однако JavaScript в Discourse уже сильно оптимизирован, поэтому Rocket Loader не требуется.

Если вы зайдете в настройки Cloudflare, вы сможете отключить Rocket Loader конкретно. Затем вы можете снова включить прокси, и ошибки CSP должны исчезнуть.

Для большинства пользователей проще полностью отключить Cloudflare, но если вам действительно нужна защита от DDoS-атак, вы можете настроить её, следуя инструкциям здесь: Full site CDN acceleration for Discourse

Подтверждено: отключение Rocket Loader и повторное включение Proxy также работает. Это хороший компромисс, спасибо!

Для ясности: вам не обязательно отключать оранжевое облако. Вы также можете оставить его включённым, настроив правило для страницы, чтобы «отключить оптимизацию» для всего сайта.

Их защита от DDoS-атак не связана с функциями оптимизации.

Тем не менее, включённое облако замедляет каждый запрос, поэтому, если вам действительно не нужна защита от DDoS-атак или вы не хотите использовать их CDN, лучше оставить его отключённым.

Я использую интеллектуальную маршрутизацию Argo и другие функции повышения производительности Cloudflare. Как правило, это заметно улучшает производительность… в первую очередь для основного сайта на этом домене, а не для форума, но именно основной сайт позволяет людям покупать мои товары… скорость важна. В любом случае, отключение одной конкретной оптимизации (Rocket Loader) позволяет Discourse корректно работать за прокси, и это приемлемый компромисс. Спасибо!

Аналогичная проблема после обновления до версии 2.4.0 beta 10.

У меня есть версии https://www и https:// (без www).

Версия https://www работает отлично.

Версия https:// (без www) становится пустой в Chrome и Safari, в консоли много ошибок.

Отказано в загрузке скрипта ‘’, так как это нарушает следующую директиву политики безопасности контента (CSP): “script-src ‘report-sample’ ”. Обратите внимание, что ‘script-src-elem’ не был явно установлен, поэтому используется ‘script-src’ как запасной вариант.

Отказано в загрузке скрипта ‘https://dastereo.ru/assets/locales/ru-2fae24b4e1db72deb2076bee15794ed9e0a6814a5bf52d778e29c106812aaa6c.js’, так как это нарушает следующую директиву политики безопасности контента (CSP): “script-src ‘report-sample’ https://www.dastereo.ru/logs/ https://www.dastereo.ru/sidekiq/ https://www.dastereo.ru/mini-profiler-resources/ https://www.dastereo.ru/assets/ https://www.dastereo.ru/brotli_asset/ https://www.dastereo.ru/extra-locales/ https://www.dastereo.ru/highlight-js/ https://www.dastereo.ru/javascripts/ https://www.dastereo.ru/plugins/ https://www.dastereo.ru/theme-javascripts/ https://www.dastereo.ru/svg-sprite/ https://www.google-analytics.com/analytics.js”. Обратите внимание, что ‘script-src-elem’ не был явно установлен, поэтому используется ‘script-src’ как запасной вариант.

Есть ли простое решение?

Запуск сайта одновременно на двух доменах не поддерживается. Вы можете исправить эту конкретную ошибку, отключив политику безопасности контента (Content Security Policy), но я бы не рекомендовал этого делать.

Лучшим решением будет перенаправление одного из доменов на другой.

Вы тоже используете Cloudflare? Если да, то вы можете настроить два правила страниц для перенаправления с:

http://example.com/* :right_arrow: https://example.com/$1
https://example.com/* :right_arrow: https://www.example.com/$1