RESTful API kullanarak bazı servisler için bir web uygulaması yazıyorum. API, https://api.example adresinde ve https://app.example numaralı telefondan edinilebilir. CORS kullanan Basit GET istekleri Chrome ve Firefox'ta gayet iyi çalışıyor. Bazı yöntem POST üzerinden veri kabul eder ve 303 kodu Konum başlığı içinde yeni uri ile döndürür.Tarayıcı neden XMLHTTPRequest ve CORS kullanarak yönlendirmeleri takip etmiyor?
Uçuş öncesi SEÇENEKLER isteği gayet:
Request Method:OPTIONS
Status Code:200 OK
talep Başlıkları
Accept:*/*
Accept-Charset:UTF-8,*;q=0.5
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,ru;q=0.6
Access-Control-Request-Headers:origin, authorization, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
DNT:1
Host:api.example
Origin:https://app.example
Referer:https://app.example/app/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.32 (KHTML, like Gecko) Chrome/27.0.1425.0 Safari/537.32 SUSE/27.0.1425.0
Yanıt Başlıkları
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Authorization, Content-Type
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,HEAD,OPTIONS
Access-Control-Allow-Origin:https://app.example
Access-Control-Expose-Headers:*
Access-Control-Max-Age:3628800
Connection:keep-alive
Content-Length:0
Date:Sun, 05 May 2013 15:22:50 GMT
Server:nginx/1.2.5
Sonra asıl isteği sadece 303 aldıktan sonra durdurmak:
Request URL:https://api.example
Request Method:POST
Status Code:HTTP/1.1 303 See Other
Tepki başlıkları: RFC kullanıcı aracısı tarafından
Server:nginx/1.2.5
Location:https://api.example/some_url
Date:Sun, 05 May 2013 15:27:49 GMT
Content-Type:application/json
Content-Length:0
Connection:keep-alive
Access-Control-Max-Age:3628800
Access-Control-Expose-Headers:*
Access-Control-Allow-Origin:https://app.example
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,HEAD,OPTIONS
Access-Control-Allow-Headers:Authorization, Content-Type
Access-Control-Allow-Credentials:true
yönlendirmeleri takip etmeli, ancak Chrome ve FF beklendiği gibi davranmaz gibi görünüyor. Tarayıcıların bir hatası mı yoksa yanlış bir şey mi yapıyorum?
Güncelleme: Eğer krom ile başlayabilirim --disable-web-security ile her şey iyi çalışıyor.
'Gerçek' istek için istek başlıklarınız nedir (CORS uçuş öncesi değil)? Ben çok benzer bir problem yaşıyorum. Herhangi bir şansla çözdün mü? – vrutberg
Chromium'daki bu hata raporu, https://code.google.com/p/chromium/issues/detail?id=237490 – vrutberg
@vrutberg ile ilgili olabilir. Tam olarak aynı görünüyor. Üstelik * bazen * çalışır. Örneğin, hem http://samples.msdn.microsoft.com/ietestcenter/CORS/CORS_014.htm adresindeki bir msdn testi hem Chrome'da hem de FF'de geçer. Bir arkadaşım tam olarak aynı kodu aldı ve sunucusuna koydu ve işe yaramıyor! http://twinspect.net/cors.htm – galadog