Междоменный запрос 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');