2013-07-17 31 views
8

Bir RESTful PHP API'sine erişmek için jQuery'nin $.ajax aracılığıyla çapraz etki alanı istekleri yapıyorum. PHP'de yüzden belirledik aşağıdaki başlıkları yapabilmek için
:

header("HTTP/1.1 $code $status"); 
header('Content-type: application/json'); 
header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: GET, POST, PUT'); 

türleri GET ve sorunsuz POST eser kullanma. Ancak, bir PUT ajax çağrısı yaptığımda, Firefox tam olarak başarısız olur ve Firebug ağ sekmesinde OPTIONS api.php gösterir.
Chrome'da ilk olarak aynı şey olur (OPTION isteği, Method PUT is not allowed by Access-Control-Allow-Methods. numaralı iletiyle başarısız olur) ancak Chrome, aslında o anda çalışan gerçek PUT isteği ile isteğini izler.

Bu davranışın nedeni nedir?

cevap

17

Görünüşe tarayıcısı ilk PUT (veya DELETE) istekleri izin verilmesi halinde öğrenmek için bir OPTIONS isteği gönderir.
Access-Control-Allow-Methods'da OPTIONS yöntemine izin vermediğim için başarısız oldu ve Firefox'ta PUT isteği yapıldı.

header('Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS'); 
: Access-Control-Allow-Methods için OPTIONS ekleme
sorunu çözüldü