http - Preflight और पुनर्निर्देशित के साथ कोर अनुरोध: अस्वीकृत। समाधान?



redirect cors (1)

एक सफल CORS प्रीफ़लाइट के बाद मूल मानक पुनर्निर्देशित करता है। उद्धरण § 7.1.5.3 :

यह वास्तविक अनुरोध है। अनुरोध चरण बनाएं और अनुरोध करते समय नीचे दिए गए अनुरोध नियमों का पालन करें।

  • यदि प्रतिक्रिया में 301, 302, 303, 307 या 308 का HTTP स्थिति कोड है, तो कैश और नेटवर्क त्रुटि चरणों को लागू करें।

आपके प्रयासों के कारण (धन्यवाद!), 4 अगस्त को मानक को updated किया गया था ताकि सफल कोर प्रीफ्लाइट चेक के बाद पुनर्निर्देशित updated जा सके।

जब तक ब्राउज़र पकड़ नहीं लेते, तब तक एकमात्र संभव विकल्प एक या एक संयोजन प्रतीत होता है:

  1. केवल साधारण अनुरोधों के लिए पुनर्निर्देश जारी करता है
  2. "प्रॉक्सी" के रूप में Location हेडर में अपने स्वयं के URL के साथ 305 पुनर्निर्देशित करें। सीमित ब्राउज़र समर्थन के लिए तैयार रहें, क्योंकि 305 को अपदस्थ किया गया है।
  3. एक नकली "पुनर्निर्देशन" करें:
    • meta refresh और / या जावास्क्रिप्ट Location परिवर्तन के साथ HTML meta refresh
    • HTML है कि एक viewport भरने iframe iframe के स्रोत के रूप में पुनर्निर्देशित लक्ष्य के साथ है।
    • एक लिंक प्रदर्शित करें जिसे उपयोगकर्ता को सामग्री तक पहुंचने के लिए क्लिक करना है।

मैं एक एपीआई डिजाइन कर रहा हूं जो उपयोगकर्ता को टोकन का उपयोग करके प्रमाणित करने की अनुमति देता है और जिसमें एक ही डोमेन के भीतर रीडायरेक्ट होता है। अब, 303 रिटर्न करने वाले समापन बिंदु के लिए एक अनधिकृत अनुरोध के लिए,

GET /documents/123  --> 303 redirect to `/documents/abc`
GET /documents/abc  --> 200

सब कुछ अच्छी तरह से काम करता है।

आइए उसी समापन बिंदु पर एक प्रामाणिक अनुरोध करें जहां Authorization हेडर भेजा जाता है। यह अनुरोध को पूर्वनिर्धारित अनुरोध करता है और ब्राउज़र पूर्व- OPTIONS अनुरोध करता है, अर्थात

OPTIONS /documents/123   --> 204 (everything okay, please proceed)
GET /documents/123       --> 303 redirect to `/documents/abc`

इस बिंदु पर, GET बजाय वास्तविक संसाधन पर /documents/abc , ब्राउज़र उपज देता है

XMLHttpRequest cannot load http://localhost:8000/people/username/nschloe. 
The request was redirected to 'http://localhost:8000/people/YDHa-B2FhMie', 
which is disallowed for cross-origin requests that require preflight.

यह व्यवहार मानक के अनुसार है:

7.1.5 प्री-लाइट के साथ क्रॉस-ऑरिजिन रिक्वेस्ट

यदि प्रतिक्रिया में HTTP स्थिति कोड है जो 2xx श्रेणी में नहीं है

नेटवर्क त्रुटि चरणों को लागू करें।

इसका मतलब यह है कि कोई भी प्रमाणित संसाधनों के लिए पुनर्निर्देश नहीं कर सकता है, भले ही पुनर्निर्देशन एक ही डोमेन ( localhost ) पर हो।

क्या यह वास्तव में सच हो सकता है? क्या कोई सामान्य समाधान है?






preflight