Django admin Ресурсная политика COEP ERR_BLOCKED_BY_RESPONSE
Статические файлы моего сайта Django admin находятся на S3 bucket (DigitalOcean Spaces фактически) и в консоли я получаю ERR_BLOCKED_BY_RESPONSE.NotSameOriginAfterDefaultedToSameOriginByCoep 200
В сетевой панели все статические файлы считаются сторонними и блокируются по этой причине (не одинаковое происхождение)
Ответ на любой из этих файлов содержит ошибку not set cross-origin-resource-policy, которая гласит:
Чтобы использовать этот ресурс из другого источника, сервер должен указать кросс-оригинальную политику ресурса в заголовках ответа.
Что я пробовал :
- После сообщения об ошибке я попытался установить заголовок ответа на ресурсах, что-то вроде
Cross-Origin-Resource-Policy: cross-origin
. Но в DigitalOcean Spaces я не могу установить заголовки, кромеContent-Type
,Cache-Control
,Content-Encoding
,Content-Disposition
и пользовательскихx-amz-meta-
заголовков. - Я попытался расширить шаблон Django admin/base.html, продублировать несколько тегов
link
и вручную установить для них атрибутcrossorigin
. Таким образом, ресурсы запрашиваются дважды, один запрос блокируется, как и раньше, а другой работает. Разница в заголовках только в том, что установленOrigin
. Есть ли способ сказать Django добавить атрибутcrossorigin
ко всемlink
иscript
иimg
тегам шаблонов администратора Django ? Я попытался удалить заголовки и - на ingress loadbalancer, которые, как я предполагаю, вызывают блокировку, установив их в
Cross-Origin-Opener-Policy
. Хотя я думаю, что это должно работать с политикой, это изменение не повлияло на проблему, которую я не понимаю.Cross-Origin-Embeder-Policy
unsafe-none
Что я не пробовал:
- Я нашел этот учебник, объясняющий, как устанавливать пользовательские заголовки на S3 Responses. Идея заключается в том, чтобы иметь функцию Lambda перед модификацией заголовка
x-amz-
в стандартный заголовок. Не уверен, что смогу легко повторить это с помощью DigitalOcean Functions.
Мой обходной путь:
- Уродливый хак заключается в дублировании всех шаблонов администраторов Django и ручном добавлении атрибута
crossorigin
там, где это необходимо.
Я не знаю, откуда это берется, несколько недель назад все было хорошо. Любая помощь приветствуется.
В HTTP 2+ более эффективно обслуживать ресурсы из одного домена, так как они могут обслуживаться через одно соединение. Большинство сайтов должны делать это. Whitenoise - популярное решение для этого с минимальной конфигурацией: https://whitenoise.evans.io/en/stable/
Это решает проблему.
Спасибо Адаму Джонсону из djangoproject.
- Я нашел этот учебник, объясняющий, как устанавливать пользовательские заголовки на S3 Responses. Идея заключается в том, чтобы иметь функцию Lambda перед модификацией заголовка