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

Я делаю междоменные запросы через JQuery $.ajax чтобы получить доступ к 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 запрос, который на самом деле работает тогда.

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

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');
Другие вопросы по тегам