2013-01-24 55 views
13

मैं बाहरी अनुप्रयोग सर्वर को सरल सीओआरएस अनुरोध भेजने की कोशिश कर रहा हूं जो प्राधिकरण के लिए सत्र कुंजी का उपयोग करता है।सीओआरएस अनुरोध केवल क्रोम में विफल रहता है यदि शीर्षलेख

$.ajax({ 
    type: "GET", 
    url: "https://192.168.1.72:8442/api/file/", 
    headers: {"Authorization": "3238562439e44fcab4036a24a1e6b0fb"} 
}); 

यह फ़ायरफ़ॉक्स 18, ओपेरा 12.12 और Rekonq 2.0 में ठीक काम करता है (यह भी वेबकिट का उपयोग करता है), लेकिन गूगल क्रोम में काम नहीं करता (कोशिश की संस्करणों 21 और 24)। Google क्रोम में यह दिखाता है कि नेटवर्क इंस्पेक्टर में लोड करने में विकल्प संसाधन विफल रहा है और एप्लिकेशन सर्वर को कोई अनुरोध नहीं मिलता है। मैंने jQuery 1.8.3 और 1.9.0 की कोशिश की है।

Request URL:https://192.168.1.72:8442/api/file/ 
Request Headers 
Access-Control-Request-Headers:accept, authorization, origin 
Access-Control-Request-Method:GET 
Cache-Control:no-cache 
Origin:https://192.168.1.72:8480 
Pragma:no-cache 

अगर मैं अनुरोध के हेडर को दूर तो मैं गूगल क्रोम में भी 401 प्राप्त हो जाएगा और यह आवेदन सर्वर पर अक्षम है प्राधिकरण के मामले में संसाधन का उपयोग करने में सक्षम है। इससे कोई फर्क नहीं पड़ता कि कौन से शीर्षलेख भेजे जाते हैं। केवल हेडर जो मैं भेजने में सक्षम हूं वह {"सामग्री-प्रकार" है: "सादा/पाठ"}। अन्य सभी शीर्षलेख नाम/मान Google क्रोम में एक त्रुटि देते हैं लेकिन ऊपर वर्णित सभी ब्राउज़रों में काम करते हैं।

क्यों Google क्रोम सीओआरएस अनुरोध में हेडर को संभाल नहीं करता है?

+1

कोशिश '' एक आम A' – Musa

+0

@Musa साथ authorization': अभी भी एक ही। –

+0

क्या आप विकल्प अनुरोध के लिए अनुरोध और प्रतिक्रिया शीर्षलेख सूचीबद्ध कर सकते हैं?सर्वर को निम्न के साथ प्रतिक्रिया देनी चाहिए: 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति: * ' ' एक्सेस-कंट्रोल-स्वीकार्य तरीके: प्राप्त करें, दबाएं, पोस्ट करें, हटाएं ' ' एक्सेस-कंट्रोल-स्वीकृति-हेडर: स्वीकार करें , प्राधिकरण, उत्पत्ति – monsur

उत्तर

1

सर्वर साइड: सर्वर हेडर स्थापित करना चाहिए "पहुंच-नियंत्रण-अनुमति दें-क्रेडेंशियल" और "पहुंच-नियंत्रण-अनुमति दें-हेडर" में अनुमति दी हेडर निर्धारित किया है।

ग्राहक पक्ष: आप स्पष्ट रूप से ऑथ हेडर को पास करने के बजाय $ .ajax() में xhrFields सेट कर सकते हैं।

xhrFields: { 
    withCredentials: true 
} 

अधिक जानकारी here

+0

के साथ क्रेडेंशियल्स कुकीज़ या मूल लेख के लिए प्रतीत होता है। मैं बस क्रोम में काम करने वाले अनुरोध हेडर प्राप्त करना चाहता हूं। –

2

मैं अपने एपीआई सर्वर पर स्वयं हस्ताक्षरित प्रमाणपत्र का उपयोग कर रहा हूं और ऐसा लगता है कि यह मुद्दा है। मैंने पाया कि अगर मैं --disable-web-security विकल्प के साथ Google क्रोम शुरू करता हूं, तो अनुरोध हेडर के साथ सीओआरएस काम कर रहा है। --disable-web-security के बिना मैं स्वयं हस्ताक्षरित एपीआई सर्वर के लिए सीओआरएस अनुरोध भेज सकता हूं लेकिन कोई हेडर नहीं जोड़ सकता (सामग्री-प्रकार को छोड़कर)।

+0

एक ही समस्या दूसरे डोमेन से कनेक्ट होने वाले डोमेन के साथ होती है (दोनों http का उपयोग करके)। आपका - अक्षम-वेब-सुरक्षा विकल्प उस मामले को भी ठीक करता है। मेरा मानना ​​है कि * बग इवेंटसोर्स के लिए विशिष्ट है, और इसे क्रोम 26 में तय किया जा सकता है। हालांकि '- अक्षम करने योग्य-वेब-सुरक्षा' ने स्व-हस्ताक्षरित प्रमाणपत्र HTTPS समस्या को ठीक नहीं किया है (चाहे इवेंटसोर्स या XMLHttpResponse का उपयोग कर रहा हो), कम से कम नहीं क्रोम 25. –

2

मुझे पता चला कि एक्सेस-कंट्रोल-स्वीकृति-हेडर: * केवल "विकल्प" अनुरोध के लिए सेट किया जाना चाहिए। आप पोस्ट अनुरोध तो ब्राउज़र अनुरोध (कम से कम क्रोम के लिए) को रद्द करने के लिए इसे वापस तो

निम्नलिखित PHP कोड मेरे लिए काम करता

// Allow CORS 
header("Access-Control-Allow-Origin: *"); 
header('Access-Control-Allow-Credentials: true');  
header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 

// Access-Control headers are received during OPTIONS requests 
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
    header("Access-Control-Allow-Headers: *"); 
} 

मैं कुछ भ्रामक प्रतिक्रिया के साथ इसी तरह के सवाल पाया: - सर्वर धागा कहता है कि यह क्रोम का 2 साल का बग है: एक्सेस-कंट्रोल-स्वीट-हेडर स्थानीयहोस्ट से मेल नहीं खाते हैं। यह गलत है: मैं आमतौर पर पोस्ट के साथ अपने स्थानीय सर्वर पर सीओआरएस का उपयोग कर सकता हूं - एक्सेस-कंट्रोल-स्वीट-हेडर वाइल्डकार्ड स्वीकार करता है। यह भी गलत है, वाइल्डकार्ड मेरे लिए काम करता है (मैंने केवल क्रोम के साथ परीक्षण किया)

इस मुद्दे को समझने में मुझे आधा दिन लगता है।

मुबारक कोडिंग

+0

इस पोस्ट की पहली वाक्य ने मुझे बचाया। धन्यवाद! – Jonah