проблема обработки http запроса OPTIONS (кроссдоменный XmlHttpRequest)

dv-server

Новичок
проблема обработки http запроса OPTIONS (кроссдоменный XmlHttpRequest)

Добрый день.

У замечательного XmlHttpRequest есть неприятное ограничение - по умолчанию запросы работают только в своем родном домене, т.е. запрос с www.test.ru можно делать только на www.test.ru/.../sript.php. Если же запрашиваемый скрипт находится вне родной зоны, то отправляется не GET/POST запрос, а запрос OPTIONS с дополнительными заголовками, в частности Origin: http://адрес.
Запрос этот отправляется для проверки, можно ли работать с сервером. Соответственно в ответе ожидается разрешение в виде группы заголовков Access-Control-Allow, в частности Access-Control-Allow-Origin - для разрешенных доменов, причем по идее, если отправляется Access-Control-Allow-Origin: * то разрешение дается для любого домена. Вот тут и возникла загвоздка.

Вот так у меня сейчас реализована обработка запроса OPTIONS:
PHP:
$headers = GetAllHeaders();
if($headers['Origin']) {
	header('HTTP/1.0 200 OK');
	header('Access-Control-Allow-Origin: *');
	header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
	header('Access-Control-Allow-Headers: X-Requested-With');
}
И это работает, браузер получает этот ответ, вот выдержка из FireBug:
PHP:
HTTP/1.1 200 OK
Via: 1.1 PROXY
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Content-Length: 0
Date: Wed, 03 Mar 2010 08:00:36 GMT
Content-Type: text/html; charset=windows-1251
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.1.6
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-Requested-With
Keep-Alive: timeout=5, max=98
По идее, после получения ответа на OPTIONS должен последовать оригинальный запрос GET/POST, но почему-то этого не происходит, кто-нибудь знает почему?
 

fonRamkopf

Новичок
Возился час назад с этим на С#
Помогло с headers так:
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Methods: GET');
header('Access-Control-Allow-Headers: X-Requested-With');
header('Access-Control-Allow-Headers: Content-Type');
Последняя для Chrome имела значение, а для Firefox нет.
 
Сверху