Междоменный запрос jQuery $.ajax не работает для PUT (метод PUT не разрешен Access-Control-Allow-Methods.)

Я выполняю междоменные запросы через $.ajax jQuery для доступа к RESTful PHP API.
Для этого я установил в PHP следующие заголовки:

header("HTTP/1.1 $code $status");
header('Content-type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT');

Использование типов GET и POST работает без проблем. Однако, когда я делаю PUT ajax-вызов, Firefox полностью терпит неудачу и показывает OPTIONS api.php на вкладке сети Firebug.
В Chrome сначала происходит то же самое (OPTION запрос завершается с ошибкой с сообщением Method PUT is not allowed by Access-Control-Allow-Methods.), но Chrome следует за фактическим PUT запросом, который на самом деле тогда работает.

В чем причина такого поведения?


person Horen    schedule 17.07.2013    source источник


Ответы (1)


По-видимому, браузер сначала отправляет запрос OPTIONS, чтобы узнать, разрешены ли запросы PUT (или DELETE).
Поскольку я не разрешил метод OPTIONS в Access-Control-Allow-Methods, он потерпел неудачу, как и запрос PUT после в Firefox.
Добавление OPTIONS до Access-Control-Allow-Methods решили проблему:

header('Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS');
person Horen    schedule 17.07.2013