ajax Разрешить запросы между разными доменами - cross-domain -- PHP
Primary tabs
В некоторых ответах (в Сети) предлагается для разрешения междоменной передачи данных (на ajax в частности) использовать
$_SERVER['HTTP_ORIGIN']
- но этот параметр далеко не всегда определён - так что можно очень даже быстро получить ошибку
Undefined index: HTTP_ORIGIN
Решение:
в начале скипта к которому предполагается разрешить доступ необходимо добавить:
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
header('Access-Control-Allow-Credentials: true');Разрешить конкретные домены
Можно так, используя некий массив разрешённых доменов
$ALLOWED_DOMAINS
подставлять домен, с которого приходит запрос, если тот разрешён:
$fromDomain = $_SERVER['HTTP_REFERER'];
if (!empty($fromDomain)
&& in_array($fromDomain, $ALLOWED_DOMAINS))
{
Request::SetAsync();
header('Access-Control-Allow-Origin: http://' . $fromDomain);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
}
Разрешить тот, домен, с которого пришел запрос
Нужно установить Access-Control-Allow-Origin в тот же адрес, с которого пришел запрос. Например, так:
$origin = !empty($_SERVER['HTTP_ORIGIN']) ?
$_SERVER['HTTP_ORIGIN'] : '';
header('Access-Control-Allow-Origin: ' . $origin);
-- такое лучше делать только в режиме разработки.
-------
Оригинал этого замечательного решения я нашёл здесь (огромное спасибо автору): http://blog.lysender.com/2013/10/cross-domain-ajax-that-is-cross-browser-as-well/
- Log in to post comments
- 13991 reads