यह Apigee Edge से जुड़े दस्तावेज़ हैं.
Go to the
Apigee X documentation. info
समस्या का ब्यौरा
इंटिग्रेट किए गए डेवलपर पोर्टल से किया गया एपीआई कॉल,
Unknown Error या खाली जवाब के साथ
इस एपीआई को आज़माएं
पैनल में पूरा नहीं हो पाता.
गड़बड़ी के मैसेज
इंटिग्रेट किए गए पोर्टल में, एपीआई के अनुरोधों के लिए आपको खाली जवाब या गड़बड़ी का यह मैसेज दिख सकता है:
Unknown Error
डेवलपर टूल > कंसोल टैब पर, आपको यह गड़बड़ी दिखेगी:
Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
** डेवलपर टूल > कंसोल** टैब पर दिखने वाला सामान्य गड़बड़ी का मैसेज यहां दिया गया है:
संभावित कारण
| वजह | ब्यौरा | इनके लिए समस्या हल करने के निर्देश लागू होते हैं |
|---|---|---|
| नीति से जुड़ी गड़बड़ी को हैंडल न करना | एपीआई अनुरोध के रनटाइम फ़्लो में, किसी नीति के काम न करने पर, सीओआरएस हेडर के बिना गड़बड़ी का डिफ़ॉल्ट जवाब भेजा जाता है. | Edge Public Cloud के उपयोगकर्ता |
| Access-Control-Allow-Origin के लिए एक से ज़्यादा वैल्यू सेट करना | Assign Message Policy में, Set के बजाय Add का इस्तेमाल करना. | Edge Public Cloud के उपयोगकर्ता |
वजह: नीति से जुड़ी गड़बड़ी को हैंडल न करना
संक्रमण की जांच
- इस बात की पुष्टि करें कि यह समस्या सिर्फ़ तब होती है, जब
2XXके अलावा कोई और जवाब मिलने की उम्मीद हो. - अनुरोधों के काम न करने पर, इस बात की पुष्टि करें कि प्रॉक्सी फ़्लो में नीतियां मौजूद हैं.
-
अनुरोध को ट्रेस करें और देखें कि कोई नीति काम नहीं कर रही है और गड़बड़ी की वजह बन रही है या नहीं
continueOnError="false". - अगर ऐसा है, तो इस बात की पुष्टि करें कि गड़बड़ी के जवाब के फ़्लो में, AssignMessage CORS नीति लागू की गई थी या नहीं.
- अगर ऐसा नहीं है, तो यही इस समस्या की वजह है.
ऐसा इसलिए होता है, क्योंकिcontinueOnError="false"एलिमेंट वाली कोई नीति काम न करने पर, अनुरोध गड़बड़ी के जवाब के फ़्लो में चला जाता है. अगर गड़बड़ी के जवाब के फ़्लो में, गड़बड़ी को साफ़ तौर पर हैंडल नहीं किया जाता है, तो नीति के हिसाब से गड़बड़ी का डिफ़ॉल्ट जवाब वापस भेजा जाता है. इस गड़बड़ी के जवाब में, सीओआरएस हेडर नहीं होते. नतीजे के तौर पर, इंटिग्रेट किए गए डेवलपर पोर्टल से किया गया एपीआई कॉल,Unknown errorके साथ पूरा नहीं हो पाता.
यहां दिए गए स्क्रीनशॉट में, गड़बड़ी के मैसेज और उदाहरण सफलता के मैसेज का उदाहरण दिखाया गया है.
इंटिग्रेट किए गए पोर्टल के इस एपीआई को आज़माएं पैनल और प्रॉक्सी की ट्रेस विंडो में, गड़बड़ी के मैसेज का उदाहरण:
इंटिग्रेट किए गए पोर्टल के इस एपीआई को आज़माएं पैनल और प्रॉक्सी की ट्रेस विंडो में, सफलता के मैसेज का उदाहरण:
रिज़ॉल्यूशन
- गड़बड़ी के डिफ़ॉल्ट मैसेज पर निर्भर रहने के बजाय, गड़बड़ी के जवाब को हैंडल करने के लिए, fault rule लागू किया जाना चाहिए. उचित हेडर के साथ AssignMessage CORS नीति शामिल करें और इसे FaultRule में लागू करें.
- कभी-कभी, हर गड़बड़ी के लिए फ़ॉल्ट रूल तय करना मुमकिन नहीं होता. इसलिए, AssignMessage CORS नीति को लागू करने के लिए, डिफ़ॉल्ट फ़ॉल्ट रूल लागू किया जा सकता है:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
<Description/>
<!-- Add a default fault rule to add CORS -->
<DefaultFaultRule name="fault-rule">
<Step>
<Name>add-cors</Name>
</Step>
</DefaultFaultRule>
<FaultRules/>
<!--
<Flows />
Rest of the proxy definition
-->
</ProxyEndpoint>वजह: Access-Control-Allow-Origin के लिए एक से ज़्यादा वैल्यू सेट करना
संक्रमण की जांच
- trace session में, Access-Control-Allow-Origin हेडर की वैल्यू देखें.
- Access-Control-Allow-Origin हेडर के लिए, सिर्फ़ एक वैल्यू सेट की जा सकती है. एक से ज़्यादा वैल्यू सेट करने पर, सीओआरएस से जुड़ी समस्या हो सकती है. साथ ही, डेवलपर पोर्टल कोई भी जवाब रेंडर नहीं कर पाएगा.
- अगर ट्रेस में, Access-Control-Allow-Origin हेडर की वैल्यू इस तरह दिखती है:
*,*तो इसका मतलब है कि टारगेट सर्वर और AssignMessage CORS नीति, दोनों ही इसकी वैल्यू सेट कर रहे हैं. - ऐसा तब हो सकता है, जब किसी उपयोगकर्ता ने किसी नीति में Access-Control-Allow-Origin के लिए
<Add> elementका इस्तेमाल किया हो या बैकएंड खुद ही एक से ज़्यादा वैल्यू सेट कर रहा हो.
Access-Control-Allow-Origin की वैल्यू *,* होने का उदाहरण:
Access-Control-Allow-Origin की वैल्यू * होने का उदाहरण:
<Add> का इस्तेमाल करने का उदाहरण:
<Set> का इस्तेमाल करने का उदाहरण:
रिज़ॉल्यूशन
- हमारा सुझाव है कि Access-Control-Allow-Origin के लिए,
<Add> elementके बजाय<Set> elementका इस्तेमाल करें, क्योंकि सिर्फ़ एक वैल्यू सेट की जा सकती है. - इसके अलावा, Access-Control-Allow-Origin हेडर को सिर्फ़ एक जगह सेट करें. जैसे, AssignMessage CORS नीति या टारगेट सर्वर.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors"> <DisplayName>Set CORS</DisplayName> <FaultRules/> <Properties/> <Set> <Headers> <Header name="Access-Control-Allow-Origin">*</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
अगर आपको अब भी Apigee की सहायता टीम से मदद चाहिए, तो गड़बड़ी की जानकारी इकट्ठा करना पर जाएं.
गड़बड़ी की जानकारी इकट्ठा करना
गड़बड़ी की यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें:
- संगठन का नाम
- परिवेश का नाम
- एपीआई प्रॉक्सी का नाम
- गड़बड़ी को फिर से दिखाने के लिए इस्तेमाल किया गया पूरा कर्ल कमांड
- एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
- टारगेट/बैकएंड सर्वर से मिले जवाब का पूरा आउटपुट और पेलोड का साइज़