Синхронизация с магистралью отправляет предварительную проверку CORS, но после этого ничего не делает.

Я пытаюсь сохранить магистральную модель с помощью model.save(), я указал urlRoot и жду POST-вызова. У меня есть служба REST на другом субдомене, который ожидает запроса.

Я получил эти заголовки запроса с помощью model.save().

OPTIONS /user HTTP/1.1
Host: rest.secret.loc
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://members.secret.loc
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

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

HTTP/1.1 200 OK
Cache-Control: max-age=0, no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: text/html
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: PHP/5.3.8, ASP.NET
access-control-allow-origin: http://members.secret.loc
Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS
Date: Fri, 17 May 2013 01:18:21 GMT
Content-Length: 0

Я попробовал, но это не работает, браузер не отправляет другой запрос на сервер :S :S :S :S :S

Как это исправить? Это ошибка позвоночника?


person inf3rno    schedule 17.05.2013    source источник


Ответы (1)


Я пробовал с Chrome, и в консоли Chrome появляется то, что в firebug нет: заголовок типа контента не разрешен. Поэтому я изменил файл web.config:

       <add name="Access-Control-Allow-Headers" value="Content-Type" />

Это решило проблему.

Кстати, он по-прежнему отправляет предварительную проверку, поэтому я поместил этот код на стороне сервера:

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
    exit;

Так что все не испортишь...

person inf3rno    schedule 17.05.2013