Apigee पूर्व-उड़ान विकल्प अनुरोध



documentation cors (1)

चूंकि आप बैकएंड एपीआई के माध्यम से पास करने के लिए ऑप्शन अनुरोध नहीं चाहते हैं, इसलिए दो चीजें जरूरी हैं:

  1. ऑप्शन अनुरोध के लिए स्थिति के साथ एक निरर्थक लक्ष्य के लिए एक मार्ग नियम। नोटिस कोई लक्ष्यइंडपॉइंट निर्दिष्ट नहीं है

    <RouteRule name="NoRoute">
        <Condition>request.verb == "OPTIONS"</Condition>
    </RouteRule>
    
  2. CORS प्रतिक्रिया को संभालने के लिए प्रॉक्सीएन्डपॉइंट में एक कस्टम प्रवाह। चूंकि नया रूटर एक नल टारगेट को संदेश भेजता है (गूँज ग्राहक को वापस अनुरोध करता है), संदेश 'डिफॉल्ट' टारगेटएंडपॉइंट के लिए रूट नहीं होगा जहां सीओआरएस नीति वर्तमान में परिभाषित की गई है।

आपके प्रॉक्सीएन्डपॉइंट का नवीनीकृत संस्करण नीचे दिखेगा:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <Flows>
        <Flow name="OptionsPreFlight">
            <Request/>
            <Response>
                <Step>
                    <Name>Add-CORS</Name>
                </Step>
            </Response>
        <Condition>request.verb == "OPTIONS"</Condition> 
        </Flow>
    </Flows>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <HTTPProxyConnection>
        <BasePath>/v1/cnc</BasePath>
        <VirtualHost>default</VirtualHost>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="NoRoute">
        <Condition>request.verb == "OPTIONS"</Condition>
    </RouteRule>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
   </RouteRule>
   <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
</ProxyEndpoint>

नोट: RouteRules को ProxyEnpoint कॉन्फ़िगरेशन में निर्दिष्ट क्रम में मूल्यांकन किया जाता है। आपको अंत में डिफ़ॉल्ट (कोई शर्त नहीं) रूट हमेशा होना चाहिए अन्यथा, अगर शीर्ष पर, यह हमेशा मैच करेगा और कभी अन्य रूट संभावनाओं का मूल्यांकन नहीं करेगा।

मैं एपीआई प्रॉक्सी बना रहा हूं और बॉक्स को चेक करता हूं जो "आपके एपीआई के लिए डायरेक्ट ब्राउज़र एक्सेस को सक्षम करें - सीओआरएस के माध्यम से एक ब्राउज़र से सीधे अनुरोध की अनुमति दें।" लेकिन मेरे विकल्प अनुरोध अभी भी विफल हो रहे हैं:

{
    "fault": {
        "faultstring": "Received 405 Response without Allow Header",
        "detail": {
            "errorcode": "protocol.http.Response405WithoutAllowHeader"
        }
    }
}

सीओआरएस पूर्व-उड़ान विकल्पों के अनुरोधों के बारे में मैं जो समझता हूं, क्लाइंट पहले "सुरक्षित" कॉरस के लिए सुरक्षा के रूप में सर्वर पर ऑप्शन अनुरोध भेजता है। इस अनुरोध को अनुरोध प्रकारों की सूची के साथ एक प्रतिक्रिया को वापस करना चाहिए जो उपलब्ध हैं।

मेरा प्रश्न: मैं इसे कैसे बनाऊं, ताकि एपीजी ऑप्टिनेशन अनुरोधों पर सही ढंग से जवाब दे और प्रॉक्सी के पीछे मेरे एपीआई के लिए ऑप्शन अनुरोधों को पारित नहीं कर पाता? । अगर यह मेरी एपीआईजी एंडपॉइंट के साथ संवाद करने की कोशिश कर रहा है तो मुझे एंजेलरजेएस जावास्क्रिप्ट एप्लिकेशन हैं।

जावास्क्रिप्ट त्रुटियाँ:

OPTIONS http://api.example.com No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://client.example.com' is therefore not allowed access.

XMLHttpRequest cannot load http://api.example.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://client.example.com' is therefore not allowed access. 

डिफ़ॉल्ट "सीओआरएस जोड़ें" एक्सएमएल

<AssignMessage async="false" continueOnError="false" enabled="true" name="Add-CORS">
    <DisplayName>Add CORS</DisplayName>
    <FaultRules/>
    <Properties/>
    <Add>
        <Headers>
            <Header name="Access-Control-Allow-Origin">*</Header>
            <Header name="Access-Control-Allow-Headers">origin, x-requested-with, accept</Header>
            <Header name="Access-Control-Max-Age">3628800</Header>
            <Header name="Access-Control-Allow-Methods">GET, PUT, POST, DELETE</Header>
        </Headers>
    </Add>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

डिफ़ॉल्ट प्रॉक्सी एंडपॉइंट xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <Flows/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <HTTPProxyConnection>
        <BasePath>/v1/cnc</BasePath>
        <VirtualHost>default</VirtualHost>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
    </RouteRule>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
</ProxyEndpoint>

डिफ़ॉल्ट लक्ष्य समापन बिंदु xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TargetEndpoint name="default">
    <Description/>
    <Flows/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response>
            <Step>
                <Name>Add-CORS</Name>
            </Step>
        </Response>
    </PreFlow>
    <HTTPTargetConnection>
        <URL>http://api.example.com/v1/assets.json</URL>
    </HTTPTargetConnection>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
</TargetEndpoint>




preflight