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-d...
- Log in to post comments
- 13133 reads