2012-03-09 2 views
5

Я пытаюсь разрешить доступ к каждому поддомену на моем сайте, чтобы разрешить перекрестные поддомены AJAX. Есть ли способ указать все поддомены сайта как *.example.com или в качестве альтернативы, почему следующее не работает, когда у меня есть несколько доменов, перечисленных:Укажите несколько поддоменов с контролем доступа. Начало

header('Access-Control-Allow-Origin: http://api.example.com http://www.example.com'); 

Я прочитал через следующий вопрос, который, как представляется, быть похожими , если не то же самое, что и этот, кроме того, что я хочу получить доступ к подобластям, и это относится к общим доменам.

Access-Control-Allow-Origin Multiple Origin Domains?

Если поставленный выше вопрос является решением этой проблемы, то, как я смог получить свое происхождение от заголовка. Похоже, что $ _SERVER ['HTTP_ORIGIN'] очень ненадежный и даже не перекрестный браузер. Мне нужно увидеть источник в любом браузере, который может показать ошибку при попытке отправить вызов AJAX с помощью javascript.

+0

Как вы сказали, на первую часть вашего вопроса отвечает по ссылке. Что касается вашего второго вопроса: если браузер пытается выполнить вызов Ajax, который запрещен политиками перекрестных доменов, запрос будет терпеть неудачу и вообще не достигнет сервера. Ошибка должна быть обработана в браузере. –

+0

Я знаю, что я получу ошибку, но эта ошибка будет предоставлена ​​после того, как вызов попытается получить доступ к внешнему файлу. Если файл отклонит его, тогда будет сброшена ошибка. Если я настрою заголовок, чтобы разрешить доступ ко всем, то он будет работать, но это слишком открыто для меня, поэтому я хотел бы установить его в отношении происхождения запроса. Поэтому я хотел бы знать, как получить исходный запрос с помощью PHP. –

+0

Можете ли вы рассказать о том, что вы подразумеваете под «$ _SERVER ['HTTP_ORIGIN'], очень ненадежным и даже не перекрестным браузером»? $ _SERVER ['HTTP_ORIGIN'] - это значение на стороне сервера, которое не выполняется в браузере. – monsur

ответ

18

Решение этой проблемы заключается в использовании переменной $ _SERVER ['HTTP_ORIGIN'], чтобы определить, пришел ли запрос из разрешенного домена. Затем он установил следующее:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
-2

Вот хорошая статья о вашем вопросе: http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

Если это не достаточно хорошо, или не работает, либо вам нужен прокси-сервер, как это: https://raw.github.com/cowboy/php-simple-proxy/master/ba-simple-proxy.php

Тогда вы можете позвонить в прокси-сервер с параметрами например: http://www.example.com/ba-simple-proxy.php?url=https://api.example.com

+0

«Вот хорошая статья о вашем вопросе» - эта статья вообще не затрагивает вопрос. – Quentin

+0

«Если это недостаточно или не работает, вам нужен прокси-сервер» - Нет. Прокси не нужен. См. Принятый ответ. – Quentin

Смежные вопросы