আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান । তথ্য
উপসর্গ
ক্লায়েন্ট অ্যাপ্লিকেশনটি বার্তা সহ একটি HTTP 400 Bad Request
প্রতিক্রিয়া পায় The plain HTTP request was sent to HTTPS port
।
ত্রুটি বার্তা
ক্লায়েন্ট অ্যাপ্লিকেশন নিম্নলিখিত প্রতিক্রিয়া কোড পায়:
HTTP/1.1 400 Bad Request
নীচের HTML ত্রুটি পৃষ্ঠা অনুসরণ করুন:
<html> <head><title>400 The plain HTTP request was sent to HTTPS port</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>The plain HTTP request was sent to HTTPS port</center> </body> </html>
সম্ভাব্য কারণ
কারণ | বর্ণনা | সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য |
---|---|---|
একটি TLS-কনফিগার করা ভার্চুয়াল হোস্টের কাছে HTTP অনুরোধ | ক্লায়েন্ট একটি TLS-কনফিগার করা ভার্চুয়াল হোস্টে HTTP অনুরোধ পাঠায় | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
একটি TLS-কনফিগার করা টার্গেট এন্ডপয়েন্টে HTTP অনুরোধ | টার্গেট এন্ডপয়েন্টে একটি TLS-সক্ষম ব্যাকএন্ড সার্ভারে HTTP অনুরোধ করা হয়েছে। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
ভুল টার্গেট সার্ভার কনফিগারেশন | টার্গেট সার্ভার সুরক্ষিত পোর্ট 443 দিয়ে কনফিগার করা হয়েছে কিন্তু SSL সক্ষম করা নেই। | এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা |
কারণ: একটি TLS-কনফিগার করা ভার্চুয়াল হোস্টের কাছে HTTP অনুরোধ
এই ত্রুটিটি ঘটে যখন একটি ক্লায়েন্ট Apigee-এ একটি API-তে সংযোগ করার চেষ্টা করে এবং উল্লেখিত ভার্চুয়াল হোস্ট SSL ব্যবহার করার জন্য কনফিগার করা হয় এবং পরিবর্তে একটি HTTP অনুরোধ গ্রহণ করে।
রোগ নির্ণয়
যেহেতু এই সমস্যাটি নর্থবাউন্ড এন্ডপয়েন্টে ঘটে এবং ক্লায়েন্ট অ্যাপ্লিকেশন এবং রাউটারের মধ্যে এন্ট্রি পয়েন্ট ইন্টারঅ্যাকশনে API অনুরোধগুলি ব্যর্থ হয়, তাই এই ত্রুটি বার্তাগুলি NGINX রাউটার অ্যাক্সেস লগগুলিতে লগ করা হয় না। অতএব, এই অনুরোধগুলি API মনিটরিং এবং ট্রেস টুলের মতো সরঞ্জামগুলিতে ক্যাপচার করা হবে না।
আপনার API অনুরোধ যাচাই করুন এবং দেখুন আপনি একটি হোস্ট উপনামের জন্য একটি HTTP অনুরোধ করছেন যা শুধুমাত্র নিরাপদ পোর্ট
443
এ অনুরোধগুলি গ্রহণ করার জন্য কনফিগার করা হয়েছে। যদি তাই হয়, তাহলে সেটাই সমস্যার কারণ।নমুনা ভুল API অনুরোধ:
curl http://org-test.apigee.net:443/400-demo
<html> <head><title>400 The plain HTTP request was sent to HTTPS port</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>The plain HTTP request was sent to HTTPS port</center> <hr><center>server</center> </body> </html>
- উপরের নমুনা অনুরোধে, মনে রাখবেন নিরাপদ পোর্ট
443
এ হোস্ট ওরফেmyorg-test.apigee.net
এর কাছে একটি HTTP অনুরোধ করা হয়েছে। এটি400 Bad Request
ত্রুটির কারণ।
রেজোলিউশন
ক্লায়েন্ট HTTP-এর পরিবর্তে HTTP ব্যবহার করছে কিনা তা আপনাকে যাচাই করতে হবে এবং নীচে দেখানো হিসাবে সঠিক অনুরোধ করতে হবে:
নমুনা API অনুরোধ:
curl https://org-test.apigee.net:443/400-demo
বা
curl https://org-test.apigee.net/400-demo
< HTTP/1.1 200 OK < Date: Thu, 25 Feb 2021 13:01:43 GMT < Content-Type: text/xml;charset=UTF-8 < Content-Length: 403 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true
কারণ: একটি TLS-কনফিগার করা টার্গেট এন্ডপয়েন্টে HTTP অনুরোধ
যদি আপনি একটি API প্রক্সির টার্গেট এন্ডপয়েন্টে একটি TLS-সক্ষম ব্যাকএন্ড সার্ভারে HTTP অনুরোধগুলি ভুলভাবে কনফিগার করে থাকেন তবে এই ত্রুটিটি ঘটে।
রোগ নির্ণয়
ট্রেস টুল ব্যবহার করে ত্রুটি নির্ণয় করতে নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করুন:
- প্রভাবিত API প্রক্সির জন্য Apigee UI এ ট্রেস সক্ষম করুন৷
- এপিআই প্রক্সিতে অনুরোধ করুন।
-
400
প্রতিক্রিয়া কোডের সাথে ব্যর্থ হওয়া API অনুরোধগুলির মধ্যে একটি নির্বাচন করুন৷ - বিভিন্ন পর্যায়ে নেভিগেট করুন এবং কোথায় ব্যর্থতা ঘটেছে তা নির্ধারণ করুন।
সাধারণত আপনি ব্যাকএন্ড সার্ভার থেকে
400
এরর প্রতিক্রিয়া দেখতে পাবেন। অর্থাৎ, টার্গেট সার্ভার থেকে প্রাপ্ত ফেজ রেসপন্সে আপনি400
এরর রেসপন্স দেখতে পাবেন যা নিচে দেখানো হয়েছে:ট্রেসে থাকা AX (Analytics Data Recorded) আইকনে ক্লিক করে যে টার্গেট এন্ডপয়েন্টের জন্য অনুরোধ করা হয়েছিল তা নির্ধারণ করুন।
- লক্ষ্য করুন । টার্গেট URL-এর জন্য ব্যবহৃত পোর্ট হল
443
কিন্তু প্রোটোকল হল HTTP। - কনফিগারেশন বুঝতে লক্ষ্য শেষ পয়েন্টের সংজ্ঞা পর্যালোচনা করুন।
নিশ্চিত করুন যে ব্যাকএন্ড সার্ভার হোস্ট সুরক্ষিত এবং একটি সুরক্ষিত পোর্টে শুনছে যেমন
443
। আপনি যদি<URL>
উপাদানে প্রোটোকলটিকেhttp
হিসাবে ব্যবহার করেন, তাহলে এটি এই সমস্যার কারণ।নমুনা লক্ষ্য শেষ পয়েন্ট কনফিগারেশন:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:443/get</URL> </HTTPTargetConnection> </TargetEndpoint>
উপরের উদাহরণটি দেখায় যে আপনি HTTP প্রোটোকল ব্যবহার করছেন, কিন্তু ব্যবহৃত পোর্টটি সুরক্ষিত পোর্ট
443
। এর ফলে ব্যাকএন্ড সার্ভার400 Bad Request
সাথে সাড়া দেয় এবং ত্রুটি বার্তাThe plain HTTP request was sent to HTTPS port
।
রেজোলিউশন
যদি আপনার ব্যাকএন্ড সার্ভার সুরক্ষিত/TLS-সক্ষম হয়, তাহলে নিশ্চিত করুন যে আপনি নিচের উদাহরণে দেখানো টার্গেট এন্ডপয়েন্টের
<URL>
উপাদানেhttps
হিসেবে প্রোটোকল ব্যবহার করেছেন:নমুনা লক্ষ্য শেষ পয়েন্ট কনফিগারেশন:
<HTTPTargetConnection> <Properties/> <URL>https://somehost.org:443/get</URL> </HTTPTargetConnection>
যদি আপনার ব্যাকএন্ড সার্ভার নিরাপদ না হয়, তাহলে:
- নিরাপদ পোর্ট নম্বর যেমন
443
উল্লেখ করবেন না। - যদি আপনার ব্যাকএন্ড সার্ভার একটি স্ট্যান্ডার্ড অ-সুরক্ষিত পোর্টে শোনে তবে আপনাকে পোর্ট নম্বরটি মোটেই উল্লেখ করতে হবে না
- আপনি যদি অন্য কোনো অ-সুরক্ষিত পোর্ট ব্যবহার করেন তাহলে পোর্ট নম্বরটি উল্লেখ করুন, উদাহরণস্বরূপ:
9080
নমুনা লক্ষ্য শেষ পয়েন্ট কনফিগারেশন:
<HTTPTargetConnection> <Properties/> <URL>http://somehost.org/get</URL> </HTTPTargetConnection> or <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:9080/get</URL> </HTTPTargetConnection>
- নিরাপদ পোর্ট নম্বর যেমন
কারণ: ভুল টার্গেট সার্ভার কনফিগারেশন
যদি টার্গেট সার্ভার একটি সুরক্ষিত পোর্টের সাথে কনফিগার করা হয় যেমন 443
SSL সক্রিয় না করে, তাহলে এটি Apigee Edge-এর মেসেজ প্রসেসরকে একটি নিরাপদ বা TLS- কনফিগার করা টার্গেট সার্ভারে HTTP অনুরোধ পাঠাতে এই সমস্যাটির দিকে পরিচালিত করে।
রোগ নির্ণয়
ট্রেস টুল ব্যবহার করে ত্রুটি নির্ণয় করতে নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করুন:
- প্রভাবিত API প্রক্সির জন্য Apigee UI এ ট্রেস সক্ষম করুন৷
- এপিআই প্রক্সিতে অনুরোধ করুন।
-
400
প্রতিক্রিয়া কোডের সাথে ব্যর্থ হওয়া API অনুরোধগুলির মধ্যে একটি নির্বাচন করুন৷ - বিভিন্ন পর্যায়ে নেভিগেট করুন এবং কোথায় ব্যর্থতা ঘটেছে তা নির্ধারণ করুন।
সাধারণত আপনি ব্যাকএন্ড সার্ভার থেকে
400
এরর প্রতিক্রিয়া দেখতে পাবেন। অর্থাৎ আপনি লক্ষ্য সার্ভার থেকে প্রাপ্ত ফেজ রেসপন্সে400
এরর রেসপন্স দেখতে পাবেন যা নিচে দেখানো হয়েছে:ট্রেসে থাকা AX (Analytics Data Recorded) আইকনে ক্লিক করে যে টার্গেট এন্ডপয়েন্টের জন্য অনুরোধ করা হয়েছিল তা নির্ধারণ করুন।
লক্ষ্য করুন।
উপরের উদাহরণের ট্রেস ফাইলে, target.name ডিফল্ট । এটি নির্দেশ করে যে এই অনুরোধের জন্য ব্যবহৃত টার্গেট এন্ডপয়েন্ট ডিফল্ট।
কনফিগারেশন বুঝতে লক্ষ্য শেষ পয়েন্টের সংজ্ঞা পর্যালোচনা করুন।
নমুনা লক্ষ্য শেষ পয়েন্ট কনফিগারেশন:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <Properties/> <LoadBalancer> <Server name="faulty-target"/> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>
উপরের নমুনা টার্গেট এন্ডপয়েন্ট কনফিগারেশন দেখায় যে আপনি
faulty-target
নামে একটি টার্গেট সার্ভার ব্যবহার করছেন।একবার আপনার লক্ষ্য সার্ভারের নাম হয়ে গেলে, আপনি লক্ষ্য সার্ভার কনফিগারেশন পরীক্ষা করতে নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করতে পারেন:
- এজ UI
- ব্যবস্থাপনা API
এজ UI
- Apigee Edge > Admin > Environments > Target Servers- এ নেভিগেট করুন।
- API প্রক্সি থেকে চিহ্নিত নির্দিষ্ট লক্ষ্য সার্ভার চয়ন করুন এবং সম্পাদনা ক্লিক করুন।
- লক্ষ্য সার্ভার এবং SSL তথ্যের জন্য নির্দিষ্ট পোর্ট যাচাই করুন।
যদি টার্গেট সার্ভার একটি সুরক্ষিত পোর্টের সাথে কনফিগার করা থাকে (উদাহরণস্বরূপ:
443
), কিন্তু SSL সক্ষম করা না থাকে, তাহলে এই সমস্যার কারণ।আপনি উপরের স্ক্রিনশটটিতে দেখতে পাচ্ছেন, ব্যবহৃত পোর্টটি
443
কিন্তু লক্ষ্য সার্ভার কনফিগারেশনে সেই পোর্টের জন্য SSL সক্ষম করা নেই। এর ফলে Apigee Edge-এর মেসেজ প্রসেসর নিরাপদ পোর্ট443
এ HTTP অনুরোধ পাঠাতে পারে। অতএব, আপনি বার্তা সহ ত্রুটি400 Bad Request
পাবেনThe plain HTTP request was sent to HTTPS port
।
ব্যবস্থাপনা API
নীচে দেখানো নির্দিষ্ট লক্ষ্য সার্ভার কনফিগারেশন সম্পর্কে বিশদ পেতে লক্ষ্য সার্ভার API পান:
পাবলিক ক্লাউড ব্যবহারকারী:
curl -v 'https://api.enterprise.apigee.com/v1/organizations/ORG_NAME/environments/ENV_NAME>/targetservers/TARGET_SERVER_NAME' \ -H "Content-Type:application/xml" \ -H "Authorization:Bearer $TOKEN"
ব্যক্তিগত ক্লাউড ব্যবহারকারী:
curl -v 'http://MANAGEMENT_IP:8080/v1/organizations/ORG_NAME/environments/ENV_NAME/targetservers/TARGET_SERVER_NAME' \ -H "Content-Type:application/xml" \ -H "Authorization:Bearer $TOKEN"
- লক্ষ্য সার্ভার এবং SSL তথ্যের জন্য নির্দিষ্ট পোর্ট যাচাই করুন।
যদি টার্গেট সার্ভারটি একটি সুরক্ষিত পোর্টের সাথে কনফিগার করা থাকে (উদাহরণস্বরূপ:
443
), কিন্তুSSLInfo
বিভাগটি সংজ্ঞায়িত করা হয় না বা সক্ষম করা না থাকে, তাহলে এটি এই সমস্যার কারণ।নমুনা লক্ষ্য সার্ভার কনফিগারেশন:
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }
উপরের নমুনা আউটপুটে, আমরা দেখতে পাচ্ছি যে টার্গেট সংযোগের জন্য ব্যবহৃত পোর্টটি
443
, কিন্তু কোনSSLInfo
কনফিগার ব্লক নেই।এর ফলে Apigee Edge-এর মেসেজ প্রসেসর নিরাপদ পোর্ট
443
এ HTTP অনুরোধ পাঠাতে পারে। অতএব, আপনি বার্তা সহ ত্রুটি400 Bad Request
পাবেনThe plain HTTP request was sent to HTTPS port
।
রেজোলিউশন
যদি আপনার টার্গেট সার্ভার সুরক্ষিত বা TLS-কনফিগার করা হয়, তাহলে আপনাকে নির্দিষ্ট টার্গেট সার্ভারের জন্য SSL সক্ষম করতে হবে।
আপনি নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে এটি করতে পারেন:
- এজ UI
- ব্যবস্থাপনা API
এজ UI
- এজ UI > অ্যাডমিন > পরিবেশ > টার্গেট সার্ভারে টার্গেট সার্ভারে নেভিগেট করুন।
- নির্দিষ্ট লক্ষ্য সার্ভার চয়ন করুন এবং সম্পাদনা ক্লিক করুন।
- যদি আপনার টার্গেট সার্ভার সুরক্ষিত হয় এবং
443
এর মতো একটি পোর্ট ব্যবহার করে, SSL বিকল্পের পাশের চেক বক্সটি নির্বাচন করে SSL সক্ষম করুন। - ট্রাস্টস্টোর , সাইফার এবং প্রোটোকল কনফিগার করুন। (প্রয়োজন হলেই)
ব্যবস্থাপনা API
টার্গেট সার্ভার কনফিগার করতে ম্যানেজমেন্ট এপিআই ব্যবহার করুন যেমন আপডেট টার্গেট সার্ভার কনফিগারেশন ডকুমেন্টেশনে বর্ণনা করা হয়েছে।
ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে
উপরের নির্দেশাবলী অনুসরণ করার পরেও যদি সমস্যা থেকে যায়, তাহলে নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন এবং তারপর Apigee Edge Support-এর সাথে যোগাযোগ করুন।
- আপনি যদি একজন পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্য প্রদান করুন:
- প্রতিষ্ঠানের নাম
- পরিবেশের নাম
- API প্রক্সি নাম
- ত্রুটিটি পুনরুত্পাদন করতে কার্ল কমান্ডটি সম্পূর্ণ করুন
- ট্রেস টুল আউটপুট (যদি আপনি ব্যর্থ অনুরোধের জন্য ক্যাপচার করতে সক্ষম হন)
- আপনি যদি একজন ব্যক্তিগত ক্লাউড ব্যবহারকারী হন তবে নিম্নলিখিত তথ্য প্রদান করুন:
- সম্পূর্ণ ত্রুটি বার্তা পরিলক্ষিত
- পরিবেশের নাম
- API প্রক্সি বান্ডেল
- টার্গেট সার্ভারের সংজ্ঞা (যদি আপনি আপনার এন্ডপয়েন্টে টার্গেট সার্ভার ব্যবহার করেন)
- ট্রেস টুল আউটপুট (যদি আপনি ব্যর্থ অনুরোধের জন্য ক্যাপচার করতে সক্ষম হন)