আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
লক্ষণ
ইন্টিগ্রেটেড ডেভেলপার পোর্টাল থেকে করা এপিআই কলটি Unknown Error অথবা 'Try this API' প্যানেলে একটি খালি প্রতিক্রিয়ার কারণে ব্যর্থ হয়।
ত্রুটির বার্তা
ইন্টিগ্রেটেড পোর্টালে এপিআই অনুরোধগুলির জন্য আপনি একটি খালি প্রতিক্রিয়া অথবা নিম্নলিখিত ত্রুটি বার্তাটি দেখতে পারেন:
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.
ডেভেলপার টুলস > কনসোল ট্যাবে প্রদর্শিত একটি সাধারণ ত্রুটি বার্তা নিম্নরূপ:


সম্ভাব্য কারণসমূহ
| কারণ | বর্ণনা | সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য |
|---|---|---|
| অমীমাংসিত নীতিগত ত্রুটি | এপিআই অনুরোধের রানটাইম প্রবাহে কোনো পলিসি ব্যর্থ হলে, CORS হেডার ছাড়া ডিফল্ট ত্রুটিপূর্ণ প্রতিক্রিয়া পাঠানো হয়। | এজ পাবলিক ক্লাউড ব্যবহারকারীরা |
| Access-Control-Allow-Origin এর জন্য একাধিক মান | অ্যাসাইন মেসেজ পলিসিতে সেট-এর পরিবর্তে অ্যাড ব্যবহার করা। | এজ পাবলিক ক্লাউড ব্যবহারকারীরা |
কারণ: সমাধান না করা পলিসি ত্রুটি
রোগ নির্ণয়
- যাচাই করুন যে সমস্যাটি কেবল তখনই ঘটে যখন
2XXছাড়া অন্য কোনো প্রতিক্রিয়া প্রত্যাশিত থাকে। - ব্যর্থ হওয়া অনুরোধগুলোর ক্ষেত্রে, প্রক্সি ফ্লোতে পলিসি আছে কিনা তা যাচাই করুন।
- অনুরোধটি ট্রেস করুন এবং পরীক্ষা করে দেখুন যে
continueOnError="false"সেট করা কোনো পলিসি ব্যর্থ হয়ে ফল্ট দেখাচ্ছে কিনা। - যদি উত্তর হ্যাঁ হয়, তাহলে ত্রুটি প্রতিক্রিয়া প্রবাহে AssignMessage CORS নীতিটি কার্যকর করা হয়েছিল কি না, তা যাচাই করুন।
- তা না হলে, এটাই এই সমস্যার কারণ।
এর কারণ হলো, যখনcontinueOnError="false"এলিমেন্টযুক্ত কোনো পলিসি ব্যর্থ হয়, তখন রিকোয়েস্টটি এরর রেসপন্স ফ্লো-তে প্রবেশ করে। যদি এরর রেসপন্স ফ্লো-তে কোনো সুস্পষ্ট ফল্ট হ্যান্ডলিং না থাকে, তাহলে পলিসিটির সাথে সঙ্গতিপূর্ণ ডিফল্ট এরর রেসপন্সটি ফেরত পাঠানো হয়। এই এরর রেসপন্সে কোনো CORS হেডার থাকে না। ফলে, ইন্টিগ্রেটেড ডেভেলপার পোর্টাল থেকে করা এপিআই কলটিUnknown errorকারণে ব্যর্থ হয়।
নিম্নলিখিত স্ক্রিনশটগুলিতে একটি উদাহরণ ত্রুটি বার্তা এবং একটি উদাহরণ সফলতার বার্তা দেখানো হয়েছে।
ইন্টিগ্রেটেড পোর্টালে ত্রুটির বার্তার উদাহরণ। এই API প্যানেল এবং প্রক্সি ট্রেস উইন্ডোতে চেষ্টা করুন:


ইন্টিগ্রেটেড পোর্টালে সফলতার বার্তার উদাহরণ: এই API প্যানেল এবং প্রক্সি ট্রেস উইন্ডোতে চেষ্টা করুন:


সমাধান
- ডিফল্ট এরর মেসেজের উপর নির্ভর করার পরিবর্তে, এরর রেসপন্স হ্যান্ডেল করার জন্য একটি ফল্ট রুল ইমপ্লিমেন্ট করতে হবে। উপযুক্ত হেডার সহ একটি 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-এর জন্য একাধিক মান
রোগ নির্ণয়
- একটি ট্রেস সেশনে Access-Control-Allow-Origin হেডারের মান যাচাই করুন।
- Access-Control-Allow-Origin হেডারে শুধুমাত্র একটি মান সেট করা যায়। একাধিক মান সেট করলে CORS সমস্যা হতে পারে এবং ডেভেলপার পোর্টাল কোনো প্রতিক্রিয়া রেন্ডার করতে ব্যর্থ হবে।
- ট্রেস-এ 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 Support-এর কাছ থেকে কোনো সাহায্যের প্রয়োজন হয়, তাহলে Must gather diagnostic information- এ যান।
রোগ নির্ণয়ের তথ্য অবশ্যই সংগ্রহ করতে হবে
নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন, এবং তারপর Apigee Edge Support-এর সাথে যোগাযোগ করুন:
- সংস্থার নাম
- পরিবেশের নাম
- এপিআই প্রক্সি নাম
- ত্রুটিটি পুনরুৎপাদন করতে ব্যবহৃত সম্পূর্ণ কার্ল কমান্ড।
- এপিআই অনুরোধগুলির ট্রেস ফাইল
- টার্গেট/ব্যাকএন্ড সার্ভার থেকে প্রাপ্ত প্রতিক্রিয়ার সম্পূর্ণ আউটপুট এবং পেলোডের আকার।