2013-07-17 11 views
8

Wykonuję żądania z różnych domen za pośrednictwem jQuery's $.ajax, aby uzyskać dostęp do API RESTful PHP.
W tym celu mam ustawić następujące nagłówki w 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'); 

Korzystanie typy GET i POST działa bez problemów. Jednak gdy wykonuję wywołanie ajaxowe PUT, Firefox całkowicie się nie udaje i pokazuje OPTIONS api.php na karcie sieciowej Firebug.
W Chrome to samo dzieje się jako pierwsze (OPTION żądanie kończy się niepowodzeniem z komunikatem Method PUT is not allowed by Access-Control-Allow-Methods.), ale Chrome uzupełnia aktualne żądanie PUT , które faktycznie działa.

Jaki jest powód takiego zachowania?

Odpowiedz

17

Najwyraźniej przeglądarka najpierw wysyła żądanie OPTIONS dowiedzieć się, czy PUT (lub DELETE) żądania są dozwolone.
Od czasu, gdy nie zezwalałem na użycie metody OPTIONS w Access-Control-Allow-Methods, nie powiodło się, podobnie jak żądanie PUT po uruchomieniu w Firefoksie.
Dodawanie OPTIONS do Access-Control-Allow-Methods rozwiązał problem:

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