Крос домейн 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