Отправляя заголовок Origin: null
, браузер указывает, что запрос от непрозрачного источника .То есть браузер сигнализирует вам, как сопровождающему сервера, что запрос не был инициирован обычным способом из приложения, работающего в Интернете и использующего метод Ajax или Fetch или XHR для вызова вашего сервера - так что, вероятно, это не так.сценарий использования, который вы на самом деле намереваетесь поддерживать.
Таким образом, вы обычно не хотите отправлять заголовок ответа Access-Control-Allow-Origin
при ответе на запросы Origin: null
.Другими словами, вы хотите, чтобы браузеры блокировали любой код JavaScript внешнего интерфейса от доступа к ответу, который вы отправляете обратно для таких запросов.
Хотя самый распространенный случай, когда браузеры устанавливают заголовок Origin
на null
, этовозможно, когда код внешнего интерфейса запускается из чьей-то локальной файловой системы (с URL-адреса file://
, а не с веб-сервера) - во многих других случаях браузеры также устанавливают заголовок Origin
на null
.Для получения исчерпывающего списка см. https://stackoverflow.com/a/42242802/441757.
https://w3c.github.io/webappsec-cors-for-developers/#avoid-returning-access-control-allow-origin-null с объяснением того, как вы должны смотреть на такие случаи:
Может показаться безопасным возвращать Access-Control-Allow-Origin: "null"
, но сериализация источника любого ресурса, который использует неиерархическую схему (например, data:
или file:
) и документы в песочнице, определена как «нулевая».Многие пользовательские агенты предоставляют таким документам доступ к ответу с заголовком Access-Control-Allow-Origin: "null"
, и любой источник может создать враждебный документ с «нулевым» источником.Поэтому следует избегать «нулевого» значения для заголовка ACAO.
Другими словами, вы можете подумать, что было бы полезно отправить обратно Access-Control-Allow-Origin
для Origin: null
запросов, если вы намеренно хотитеразрешить использование ответов с вашего сервера во внешнем коде JavaScript, работающем на чьей-то локальной файловой системе (например, для кого-то, выполняющего локальное тестирование).Но, делая это, вы не разрешаете только случай локальной файловой системы, но также и все другие случаи, описанные в https://stackoverflow.com/a/42242802/441757. Это все или ничего.