net::ERR_BLOCKED_BY_RESPONSE — ошибка Chromium -27. В исходниках она определена как запрос, который «не выполнен, потому что ответ пришёл с требованиями, которые не соблюдены (например, проверки предков X-Frame-Options и Content-Security-Policy, а также Cross-Origin-Resource-Policy)» (net_error_list.h). На практике чаще всего срабатывает первое — страница отказывается открываться в <iframe>, — а вовсе не семейство cross-origin isolation. К TLS ошибка отношения не имеет и доступ по HTTPS не блокирует: ответ пришёл по рабочему соединению и был отклонён уже после этого.
Ниже: как понять, какое именно требование сработало, и что делать в каждом случае.
Бесплатный онлайн-инструмент — сканер безопасности сайта: результат мгновенно, без регистрации.
Одной и той же сетевой ошибкой оборачиваются четыре разных механизма. Различить их можно по сообщению в консоли DevTools — прочитайте его прежде, чем менять заголовки.
| Кто заблокировал | В консоли есть | Чинится на |
|---|---|---|
X-Frame-Options | «Refused to display … in a frame because it set X-Frame-Options» | Встраиваемом сайте — убрать заголовок или перейти на CSP |
CSP frame-ancestors | «Refused to frame … because an ancestor violates … frame-ancestors» | Встраиваемом сайте — добавить ваш источник в директиву |
Cross-Origin-Resource-Policy | запись про CORP на вкладке Issues рядом с запросом | Сервере ресурса — выставить cross-origin |
Cross-Origin-Embedder-Policy | встраивающая страница отдаёт require-corp | Каждом подресурсе — подтвердить согласие через CORP |
Два из них починить со своей стороны нельзя: X-Frame-Options и frame-ancestors выставляет тот сайт, который вы пытаетесь встроить, и это его осознанный отказ. Клиентского флага, который их обходит, не существует. Посмотрите, что цель отдаёт на самом деле, проверкой HTTP-заголовков, прежде чем считать, что дело в вашей конфигурации.
Cross-Origin-Embedder-Policy: require-corp встраивает ресурс без CORPCross-Origin-Resource-Policy: cross-originCORP: same-siteCross-Origin-Opener-Policy: unsafe-none (ослабляет)same-origin + require-corpОшибка ERR_BLOCKED_BY_RESPONSE возникает, когда ответ сервера блокируется политиками безопасности, такими как Cross-Origin Embedder Policy (COEP) или Cross-Origin Resource Policy (CORP). Это может произойти, если ресурсы, загружаемые с других доменов, не соответствуют заданным политикам, что препятствует их отображению. Чтобы устранить эту ошибку, убедитесь, что все загружаемые ресурсы имеют соответствующие заголовки, такие как Cross-Origin-Embedder-Policy: require-corp или Cross-Origin-Resource-Policy: same-origin.
Cross-Origin Embedder Policy (COEP) и Cross-Origin Resource Policy (CORP) — это механизмы безопасности, которые помогают защитить веб-приложения от атак, связанных с межсайтовыми запросами. COEP требует, чтобы все ресурсы, загружаемые с другого домена, имели соответствующие заголовки, подтверждающие их безопасность. Это позволяет браузеру избежать загрузки потенциально небезопасных ресурсов, что, в свою очередь, защищает пользователей от атак, таких как Cross-Site Scripting (XSS).
С другой стороны, CORP определяет, как ресурсы могут быть загружены с других доменов. Если ресурс не имеет соответствующих заголовков, браузер блокирует его загрузку, что может привести к возникновению ошибки ERR_BLOCKED_BY_RESPONSE. Например, если ваш сайт загружает изображение с другого домена, и этот домен не предоставляет заголовок Cross-Origin-Resource-Policy: same-origin, изображение будет заблокировано.
Для устранения ошибки ERR_BLOCKED_BY_RESPONSE необходимо правильно настроить заголовки COEP и CORP на сервере. Рассмотрим пример настройки для веб-сервера Apache. Включите следующие строки в конфигурацию вашего веб-сервера:
Header set Cross-Origin-Embedder-Policy require-corp
Header set Cross-Origin-Resource-Policy same-originЭти команды добавят соответствующие заголовки к ответам сервера. Убедитесь, что вы перезапустили сервер после внесения изменений. Для проверки заголовков используйте команду curl -I https://ваш-домен.com. В ответе должны появиться ваши новые заголовки:
HTTP/1.1 200 OK
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Resource-Policy: same-originЕсли заголовки применены корректно, это должно устранить ошибку ERR_BLOCKED_BY_RESPONSE и позволить вашему сайту загружать необходимые ресурсы без блокировок.
Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.
Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.
Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.
Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.
Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.
аудит HTTP-заголовков
проверка конфигурации
CSP и HSTS настройка
соответствие стандартам
Strict-Transport-Security.Server: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.DENY или SAMEORIGIN.nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.Server, X-Powered-By, X-AspNet-Version из ответов.История security-проверок и мониторинг HTTP-заголовков безопасности.
Зарегистрироваться (FREE)Режим, в котором страница защищена от Spectre-атак. Требуется для SharedArrayBuffer, performance.measureUserAgentSpecificMemory и высокоточных таймеров.
DevTools → Console → "Failed to load resource: net::ERR_BLOCKED_BY_RESPONSE". В Network тaб resource помечен красным.
Да. Без COOP/COEP страница не может безопасно использовать SharedArrayBuffer — отсюда ограничения Chrome.
Enterno CORS checker проверит Access-Control-* headers. + DevTools → Network → Response Headers.
Никак. X-Frame-Options и CSP frame-ancestors — это отказ целевого сайта встраиваться, который браузер исполняет по его указанию. Реальные пути только такие: договориться, чтобы ваш источник разрешили, использовать их API или oEmbed, либо проксировать на сервере с их разрешения.
Нет. Ошибка Chromium -27 принимается уже после того, как ответ пришёл по рабочему соединению, — TLS в её пути нет. Запрос отклонён потому, что не выполнено требование, пришедшее вместе с этим ответом.
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.