2013-07-17 57 views
8

Tôi đang thực hiện các yêu cầu miền chéo thông qua jQuery $.ajax để truy cập RESTful PHP API.
Để làm được vì vậy tôi đã thiết lập các tiêu đề sau trong 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'); 

Sử dụng các loại GETPOST công trình không có vấn đề. Tuy nhiên, khi tôi thực hiện cuộc gọi a2ax PUT ajax, Firefox hoàn toàn không hiển thị và hiển thị OPTIONS api.php trong tab mạng của Firebug.
Trong Chrome, điều tương tự xảy ra trước tiên (OPTION yêu cầu không thành công với thông báo Method PUT is not allowed by Access-Control-Allow-Methods.) nhưng Chrome theo dõi yêu cầu PUT thực tế thực sự hoạt động sau đó.

Lý do cho hành vi này là gì?

Trả lời

17

Dường như trình duyệt trước tiên gửi yêu cầu OPTIONS để tìm hiểu xem các yêu cầu PUT (hoặc DELETE) có được phép hay không.
Vì tôi đã không cho phép phương pháp OPTIONS trong Access-Control-Allow-Methods nó không thành công và do đó, yêu cầu PUT sau trong Firefox.
Thêm OPTIONS đến Access-Control-Allow-Methods giải quyết được sự cố:

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