2015-01-18 7 views
5

Ajax ile jQuery iletişim kutusuna veri yüklemeye çalışıyorum ancak Firefox'ta istek başarısız oluyor (34.0.5). İyi çalışıyor ve Chrome ve Safari’de şikayetim yok.CORS Firefox'ta çalışmıyor

Benim apache conf içerir:

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Methods: "PUT, GET, POST, DELETE, OPTIONS" 
Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept" 

jQuery basitçe:

$('#dialog').load('example.php', function() { $('#dialog').dialog('open'); }); 

Firefox aşağıdaki konsol hata ile yanıt verir:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://www.example.com/example.php. This can be fixed by moving the resource to the same domain or enabling CORS.

gelen yanıt başlıklarını incelenmesi ajax istekleri hepsinin sağlam olduğu görülüyor Apache'de bildirilenlerle satır içi. Başka bir yönerge de dahil etmeli mi yoksa bu işlemin yapılabilmesi için bir şekilde konfigürasyonu değiştirmeli miyim?

GÜNCELLEME: Sorunun kökünde, aynı işlevi görmesi için hem example.com hem de www.example.com olmasını isterim. Söz konusu sitenin, her zaman varsayılan site çerçevesinin bir parçası olduğu için her zaman <base href="www.example.com" /> başlığında bir etiketi vardır. Bu bağlantıyı kaldırmanın, ajax isteminin example.com üzerinde çalışmasına izin verdiğinden, özellikle de www alt etki alanından bir kaynağı özellikle çağırdığında bile keşfettim.

İlginçtir ki, bu etiket kaldırıldığında istek ve yanıt başlıklarının birçok yönü değişir. Burada imalar hakkında bir ipucu olabilecek herkes için aşağıdaki istek ve cevap başlıklarını da yapıştırıyorum.

Burada, <base> etiketinin kaldırılmış üstbilgileri var.

TEPKİ

GET /example.php HTTP/1.1 
    Host: www.example.com 
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:34.0) Gecko/20100101 Firefox/34.0 FirePHP/0.7.4 
    Accept: text/html, */*; q=0.01 
    Accept-Language: en-US,en;q=0.5 
    Accept-Encoding: gzip, deflate 
    Referer: http://example.com/ 
    Origin: http://example.com 
    x-insight: activate 
    Connection: keep-alive 
    Cache-Control: max-age=0 

Ve burada <base> etiketi bozulmamış ile başlık olduğu

HTTP/1.1 200 OK 
    Date: Sun, 18 Jan 2015 22:11:04 GMT 
    Server: Apache/2.4.7 (Ubuntu) 
    X-Powered-By: PHP/5.5.9-1ubuntu4.5 
    Set-Cookie: PHPSESSID=xxx; path=/; HttpOnly 
    language=en; expires=Tue, 17-Feb-2015 22:11:04 GMT; Max-Age=2592000; path=/; domain=www.example.com 
    currency=CAD; expires=Tue, 17-Feb-2015 22:11:04 GMT; Max-Age=2592000; path=/; domain=www.example.com 
    Expires: Thu, 19 Nov 1981 08:52:00 GMT 
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public 
    Pragma: no-cache 
    Content-Encoding: gzip 
    access-control-allow-methods: PUT, GET, POST, DELETE, OPTIONS 
    access-control-allow-origin: * 
    access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept 
    Content-Length: 1515 
    Connection: close 
    Content-Type: text/html; charset=utf-8 

TALEBİ: Bu durumda ajax çağrı başarılı oldu. Bu başlıklar, ajax çağrısının başarısız olduğu senaryoyu yansıtır.

RESPONSE'u

HTTP/1.1 302 Found 
    Date: Sun, 18 Jan 2015 22:12:26 GMT 
    Server: Apache/2.4.7 (Ubuntu) 
    X-Powered-By: PHP/5.5.9-1ubuntu4.5 
    Set-Cookie: PHPSESSID=xxx; path=/; HttpOnly 
    language=en; expires=Tue, 17-Feb-2015 22:12:26 GMT; Max-Age=2592000; path=/; domain=www.example.com 
    currency=CAD; expires=Tue, 17-Feb-2015 22:12:26 GMT; Max-Age=2592000; path=/; domain=www.example.com 
    Expires: Thu, 19 Nov 1981 08:52:00 GMT 
    Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public 
    Pragma: no-cache 
    Status: 302 
    Location: https://www.example.com/index.php 
    access-control-allow-methods: PUT, GET, POST, DELETE, OPTIONS 
    access-control-allow-origin: * 
    access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept 
    Content-Length: 0 
    Connection: close 
    Content-Type: text/html 

İSTEĞİ

OPTIONS /example.php HTTP/1.1 
    Host: www.example.com 
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:34.0) Gecko/20100101 Firefox/34.0 FirePHP/0.7.4 
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
    Accept-Language: en-US,en;q=0.5 
    Accept-Encoding: gzip, deflate 
    Origin: http://example.com 
    Access-Control-Request-Method: GET 
    Access-Control-Request-Headers: x-requested-with 
    x-insight: activate 
    Connection: keep-alive 
    Cache-Control: max-age=0 
: Bu cevap başlığında 'Yer' alan bu bir https bağlantısı üzerinden olmuyordu rağmen 'https' diyor dikkati çekiyor
+0

CORS başlıklarının iki kez mi gönderiliyor? Yakın zamanda, benim htaccess'e eklediğim ve benim apache'mdeki conf'ime eklediğim yeni bir problemim vardı. Bu, üstbilgi değerlerinin iki kez gönderilmesine neden oldu; bu da bazı tarayıcıların düzgün çalışmamasına neden oldu. – JohnP

+0

Göremediğimden değil. .htaccess'te sadece bir apache vhost conf ayarlanmış bir şeyim yok - yine de “Header add” yerine “Header add” i kullanırsanız bunun olabileceğini düşünün. Öyle olduğu için sadece yanıt başlıklarında bir kez görüyorum. – billynoah

+0

Benzer bir sorun yaşıyorum (Chrome'da çalışır, FF'de değil) ancak etiketi kullanılmadan. – aesede

cevap

0

MDN'a göre, "kimlik bilgisi istekleri" için joker karakteri kullanamazsınız, bu nedenle isteğiniz o kategoriye girer.

İlgili konular