javascript — междоменный XMLHttpRequest, заголовок Access-Control-Allow-Origin и $ _SERVER [‘HTTP_ORIGIN’]

Мне нужен скрипт для доставки информации на запрашивающие страницы, размещенные в разных доменах, через XMLHttpRequest. Есть много вопросов и ответов по этому вопросу, но ни один из тех, которые я нашел, полностью не ответил на мои вопросы.

Поиск в сети привел меня к выводу, что я должен разрешить эти домены через заголовки, такие как
header("Access-Control-Allow-Origin: *"); или же
header("Access-Control-Allow-Origin: http://example.com");

Как мне нужно более одного внешнего домена, но все же я нахожу * слишком открыты, дальнейшие исследования привели меня к решениям, основанным на сравнении на стороне сервера $_SERVER['HTTP_ORIGIN'] с утвержденными значениями. (в StackOverflow: Access-Control-Allow-Origin Домены нескольких источников? например)

НО я не нашел упоминания о $_SERVER['HTTP_ORIGIN'] в php manuel (http://php.net/manual/fr/reserved.variables.server.php) и мои тесты показали, что эта запись не всегда установлена.

Итак, мои вопросы:
— когда $_SERVER['HTTP_ORIGIN'] суперглобальный набор?
— это глобально надежно? … или клиентский браузер зависит?

Кажется (но только опытным путем, из моих тестов / Firefox 34.0.5 & ios Safari), что он устанавливается только тогда, когда «необходимо», то есть когда запрос фактически поступает из другого домена. По крайней мере, при использовании.

См. Краткое описание кода ниже, чтобы помочь понять необходимость
— заголовок не отправлен, если $_SERVER['HTTP_ORIGIN'] не определен
(при условии, что это фактически не междоменный вызов, проблем не должно быть),
— отправить заголовок «allow», если он определен и принадлежит массиву принятых доменов.

if(isset($_SERVER['HTTP_ORIGIN'])) {// in case of cross domain ajax call
$http_origin = $_SERVER['HTTP_ORIGIN'];
if(in_array($http_origin, $ajaxAllowedDomains))
{ header("Access-Control-Allow-Origin: $http_origin"); }
}

2

Решение

когда $_SERVER['HTTP_ORIGIN'] суперглобальный набор?

Когда HTTP-запрос включает в себя Origin заголовок. Браузеры установят один при создании междоменного запроса с XMLHttpRequest.

это надежно во всем мире?

Это в ситуациях, когда вы можете захотеть установить заголовки ответа CORS.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]