Safari не может создать Worker из большого двоичного объекта из-за проблемы Content-Security-Policy

Я пытаюсь создать Worker на своей веб-странице:

const url = URL.createObjectURL(blob);
const worker = new Worker(url);

И Safari отображает в консоли следующую ошибку:

Отказался от загрузки большого двоичного объекта: https://my.address.com/5fa7b5e6-cb10-4b7c-967b-e95cae58cd71, поскольку он не фигурирует ни в директиве child-src, ни в директиве default-src Политики безопасности содержимого.

У меня на странице есть следующий тег Content-Security-Policy:

<meta http-equiv="Content-Security-Policy" content="worker-src 'self' blob:">

Но похоже, что Safari игнорирует это. Готов поспорить, я пробовал все возможные комбинации директив SCP (например, worker-src, object-src, script-src, child-src и т. Д.) И источников (*, blob :, 'unsafe-eval', 'unsafe-inline ', так далее.)

Ценю любые идеи!

Примечания:

  1. Когда я открываю свою веб-страницу в Safari через http, Worker создается без ошибок. Проблема при открытии по https.
  2. Worker отлично работает в Chrome, Firefox, Edge
  3. У меня на странице только один тег Content-Security-Policy
  4. При проверке заголовков ответов Http в Safari они выглядят хорошо

person BorisR    schedule 14.04.2021    source источник
comment
У меня отлично работает в Safari 14.0.3   -  person Kaiido    schedule 17.04.2021


Ответы (1)


Safari не поддерживает директиву worker-src (была протестирована версия 12) и просто игнорирует ее, проверьте консоль на наличие сообщения Unrecognized Content Security Policy directive 'worker-src'.

Резервная цепочка для worker-src: child-src - ›script-src -› default-src, поэтому для поддержки Safari вы должны использовать child-src с теми же правилами, что и worker-src. child-src blob: работает в Safari (нажмите кнопку «blob:», чтобы увидеть).

Сообщение because it appears in neither the child-src directive nor the default-src directive of the Content Security Policy непонятно. У вас уже есть child-src / default-src с некоторыми правилами в политике?
Потому что <meta http-equiv="Content-Security-Policy" content="worker-src 'self' blob:"> просто игнорируется Safari и не должен блокировать worker.

person granty    schedule 19.04.2021
comment
В самом деле, у меня есть это сообщение в директиве политики безопасности нераспознанного содержимого консоли «worker-src», и я не уделял ему должного внимания раньше. Да, у меня настроен default-src (без правила blob) в заголовках HTTP-ответов. Это должно объяснить причину моей проблемы. Когда я добавил child-src в метатег, ничего не изменилось. Это должно быть из-за того, что заголовки HTTP-ответа имеют приоритет над правилами метатегов. Итак, я добавил child-src в заголовки ответов, и это решило мою проблему ???? - person BorisR; 20.04.2021