दिलचस्प पोस्ट
रेल: 3 डेनिज साइनअप फ़िल्टर श्रृंखला को रोक दिया गया है: require_no_authentication गाया या पुनर्निर्देशित विशेष अक्षर SWIFT iOs के बिना वर्णांक के लिए RegEx आधुनिक सी ++ में क्लासिक सॉर्टिंग एल्गोरिदम कैसे कार्यान्वित करें? व्युत्पन्न कक्षाओं में कार्य के लिए C ++ "आभासी" कीवर्ड क्या ये ज़रूरी हैं? PHP में यूआरएल स्ट्रिंग से मैं क्वेरी मापदंड कैसे निकालूं? WHERE क्लॉज़ में केस संवेदनशील खोज कैसे करें (मैं SQL सर्वर का उपयोग कर रहा हूं)? आईओएस स्विफ्ट ऐप के पृष्ठभूमि दृश्य के लिए ढाल कैसे लागू करें कक्षा असंतुलन से निपटना: नुकसान में स्केलिंग योगदान और एसजीडी क्या डेटाबेस सामान्यीकरण करते समय कहा जाता है कि नई संस्थाओं में पंक्ति जानकारी के दोहराए गए सेटों को दोहराया जा रहा है? एनईटी कंसोल ऐप में कुंजी प्रेस के लिए सुनो इटरेटर और पॉइंटर्स कैसे संबंधित हैं? समूह द्वारा घनत्व वक्र के तहत ggplot2 शेड क्षेत्र MySQL तालिका से डुप्लिकेट पंक्तियों को कैसे हटाएं जावा डोम के साथ XML नोड पाठ मान प्राप्त करना jquery scroll, नेविगेशन सक्रिय वर्ग को बदलने के रूप में पृष्ठ स्क्रॉल कर रहा है, वर्गों के सापेक्ष

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

मैं एक एपीआई डिजाइन कर रहा हूं जो उपयोगकर्ता को टोकन (प्रमाणीकरण) के द्वारा प्रमाणित करने की अनुमति देता है और जिसमें उसी डोमेन के भीतर रीडायरेक्ट होते हैं अब, एक अन्तर्निहित अनुरोध के लिए एक अंत बिंदु है जो 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 ) पर हो।

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

Solutions Collecting From Web of "Preflight और रीडायरेक्ट के साथ CORS अनुरोध: अस्वीकृत समाधान?"

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

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

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

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

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

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