2015-09-01 13 views
8

के बाद सीओआरएस अनुरोध विफल रहता है मुझे सफारी को सीओआरएस अनुरोधों को संभालने के तरीके में समस्या है। परिदृश्य निम्नलिखित पर विचार करें:सफारी 302 रीडायरेक्ट

  1. domainA एक पृष्ठ domainB करने के लिए एक XHR अनुरोध (मूल हैडर domainA पर सेट है)
  2. domainB रिटर्न 302 रीडायरेक्ट बनाता होस्ट करता करते DomainC (मूल हैडर अशक्त है, जो हो रहा है पर सेट है आरएफसी के साथ ठीक)
  3. DomainC वास्तविक सामग्री

यह क्रोम, एफएफ में काम करता है के साथ 200 प्रतिक्रिया वापस, लेकिन यह सफारी (Mozilla/5.0 (Macintosh पर परीक्षण किया; Intel Mac OS X 10_10_5) पर विफल रहता है AppleWebKit/600.8 9। (केएचटीएम, जैसे गेको) संस्करण/8.0.8 सफारी/600.8.9)।

जब मैं xhr.withCredentials के बिना अनुरोध करता हूं, तो पहले, सफारी डोमेनसी से पूर्व वास्तविक अनुरोध के विकल्प विकल्प बनाता है, जो आईएमएचओ नस्लीय नहीं है क्योंकि सभी अनुरोध सरल अनुरोध हैं, लेकिन मैं इसे संभाल सकता हूं। समस्या यह है कि सफारी डोमेनसी को प्रीफलाइट अनुरोध के बाद विफल रहता है, "नल से कोई अनुरोध नहीं कर सकता"। मैं एक्सेस-कंट्रोल-अनुमति-उत्पत्ति को सेट करके और इसे एक्सेस-कंट्रोल-अनुमति-प्रमाण-पत्र शीर्षलेख (वे पारस्परिक रूप से अनन्य) छोड़कर इसे बाईपास कर सकते हैं, जो इस परिदृश्य को काम करेगा। हालांकि मुझे अभी भी लगता है कि यह सही व्यवहार नहीं है।

अब, मुझे यह है कि मुझे पास करने के लिए प्रमाण पत्र की आवश्यकता है (और नहीं, मैं इसे किसी अन्य तरीके से पास नहीं कर सकता क्योंकि यह किसी तीसरे पक्ष सर्वर पर निर्भर करता है)। तो चलिए

xhr.withCredentials

सही पर सेट करते हैं और हम करने के लिए "शून्य से किसी भी अनुरोध नहीं कर सकते" वापस और अब भी wildcarding पहुंच-नियंत्रण-अनुमति दें-क्रेडेंशियल मदद नहीं करता है।

मुझे लगता है कि सभी कोरस हेडर ठीक से सेट हैं, लेकिन कृपया मुझे जांचने में संकोच न करें। टेस्ट उदाहरण यहां पाया जा सकता है: http://a.ihatesafari.com

यहां क्या हो रहा है? क्या यह एक बग है या क्या मुझे कुछ याद आ रही है?

जवाब

+0

यह डोमेनए के लिए एक एक्सएचआर बनाने और डोमेनसी पर रीडायरेक्ट करने के लिए डोमेनए के सरल मामले में भी विफल रहता है। – hrdwdmrbl

उत्तर

3

के लिए धन्यवाद मैं भी इस समस्या का सामना और 2012 कि यह वर्णन प्रतीत होता है से this bug मिला था। एफएफ/क्रोम/सफारी में बग में संदर्भित परीक्षण कोड को चलाने से केवल सफारी में असफलताएं उत्पन्न हुईं। ऐसा प्रतीत होता है कि बग को पैच नहीं किया गया है।

आखिरकार इस के आसपास पहुंचने के लिए, मैंने एक वैकल्पिक क्वेरी पैरामीटर जोड़ने के लिए एक वैकल्पिक क्वेरी पैरामीटर जोड़ने के लिए संशोधित किया ताकि एक अलग प्रतिक्रिया को ट्रिगर करने के लिए 200 ओके लौटाया जा सके जिसमें क्लाइंट का पालन करना यूआरएल था। दुर्भाग्यवश यदि आप किसी और के HTTP एपीआई के उपभोक्ता हैं तो इससे ज्यादा मदद नहीं मिलेगी।

+0

मुझे इस समस्या का सामना करना पड़ रहा है जो किसी तृतीय पक्ष API को कॉल कर रहा है। इस पर कोई विचार है कि मैं कैसे काम कर सकता हूं (या हल)? – elTomato

+0

यदि आपके पास अपना स्वयं का वेब सर्वर/एपीआई है तो आप शायद अपने सर्वर पर लागू कॉल के साथ तीसरे पक्ष के एपीआई कॉल को लपेट सकते हैं जो सफारी के साथ काम कर सकते हैं। – MisterG

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