2015-01-18 6 views
5

मैं AJAX के माध्यम से एक jQuery संवाद में डेटा लोड करने का प्रयास कर रहा हूं लेकिन अनुरोध फ़ायरफ़ॉक्स (34.0.5) में विफल रहा है। ठीक काम करता है और मुझे क्रोम और सफारी में कोई शिकायत नहीं है।CORS फ़ायरफ़ॉक्स में काम नहीं कर रहा है

मेरे अपाचे conf शामिल हैं:

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 बस है:

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

फ़ायरफ़ॉक्स निम्नलिखित कंसोल त्रुटि के साथ प्रतिक्रिया करता है:

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.

से प्रतिक्रिया हेडर का निरीक्षण AJAX अनुरोध वे सब एक बरकरार प्रतीत होता है अपाचे में जो घोषित किया गया है उसके साथ इनलाइन। क्या मुझे कुछ अन्य निर्देश शामिल करना चाहिए या इस काम के लिए कॉन्फ़िगरेशन को किसी तरीके से बदलना चाहिए?

अद्यतन: इस मुद्दे की जड़ पर यह तथ्य है कि मैं इसे example.com और www.example.com दोनों को कार्य करने के लिए चाहता हूं। प्रश्न में साइट के पास दोनों उदाहरणों में हेडर <base href="www.example.com" /> में हमेशा एक टैग होता है क्योंकि यह डिफ़ॉल्ट साइट ढांचे का हिस्सा है। मैंने तब से पता चला है कि इस लिंक को हटाने से AJAX अनुरोध example.com पर काम करने की अनुमति देता है, भले ही यह अभी भी विशेष रूप से www सबडोमेन से संसाधन कहता है।

दिलचस्प बात यह है कि अनुरोध के कई पहलू और प्रतिक्रिया हेडर बदलते हैं जब यह टैग हटा दिया जाता है। यहां किसी भी व्यक्ति के लिए जो प्रभाव के बारे में सुराग रख सकता है, मैं नीचे अनुरोध और प्रतिक्रिया शीर्षलेख दोनों को चिपका रहा हूं।

यहां <base> टैग हटाए गए शीर्षलेख हैं।

प्रतिक्रिया

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 

अनुरोध

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 

और यहाँ <base> टैग को बरकरार रखते हुए हेडर हैं: इस मामले में ajax कॉल सफल रहा था। ये शीर्षलेख उस परिदृश्य को प्रतिबिंबित करते हैं जहां AJAX कॉल विफल हुआ।

प्रतिक्रिया

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 

अनुरोध

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 
: यह ध्यान देने योग्य है कि प्रतिक्रिया हेडर में 'स्थान' फ़ील्ड का कहना है 'https' भले ही यह एक https कनेक्शन पर नहीं हो रहा था लायक है
+0

क्या सीओआरएस हेडर दो बार भेजे जा रहे हैं? मुझे हाल ही में एक समस्या थी जहां मैंने गलती से इसे अपने एचटीएसीएसी के साथ-साथ मेरे अपाचे को भी जोड़ा था। इससे हेडर मानों को दो बार भेजा जाना पड़ा जिससे कुछ ब्राउज़र ठीक से काम नहीं कर पाए। – JohnP

+0

ऐसा नहीं है कि मैं देख सकता हूं। मेरे पास .htaccess केवल apache vhost conf में कुछ भी सेट नहीं है - हालांकि लगता है कि यह भी हो सकता है यदि आप 'हेडर सेट' के बजाय 'हेडर एड' का उपयोग करते हैं। जैसा कि यह खड़ा है, मैं केवल प्रतिक्रिया शीर्षकों में उन्हें देख रहा हूं। – billynoah

+0

मुझे एक ही समस्या है (यह क्रोम पर काम करता है, एफएफ में नहीं) लेकिन बिना टैग का उपयोग किया जा रहा है। – aesede

उत्तर

0

MDN के अनुसार, आप "प्रमाणित अनुरोधों" के लिए वाइल्डकार्ड का उपयोग नहीं कर सकते हैं, इसलिए शायद आपका अनुरोध उस श्रेणी में पड़ता है।

संबंधित मुद्दे