http Preflight और रीडायरेक्ट के साथ CORS अनुरोध: अस्वीकृत समाधान?



redirect (1)

मूल मानक एक सफल कॉरस प्रीफलाइट के बाद रीडायरेक्ट को रोकता है। § 7.1.5.3 का हवाला देते हुए :

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

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

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

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

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

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

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

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

आइए उसी समापन बिंदु पर प्रमाणीकृत अनुरोध करते हैं जहां Authorization शीर्षलेख भेजा जाता है। यह एक प्रीफ़्लोटेड अनुरोध का अनुरोध करता है और ब्राउज़र प्रीफ़लाइट ऑप्शन अनुरोध करता है, अर्थात

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

इस बिंदु पर, /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