ajax Разрешить запросы между разными доменами - cross-domain -- PHP

В некоторых ответах (в Сети) предлагается для разрешения междоменной передачи данных (на 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...