400 খারাপ অনুরোধ - ডুপ্লিকেট হেডার

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

লক্ষণ

ক্লায়েন্ট অ্যাপ্লিকেশনটি এপিআই কলের প্রতিক্রিয়া হিসেবে protocol.http.DuplicateHeader .http.DuplicateHeader এরর কোডসহ 400 Bad Request এইচটিটিপি স্ট্যাটাস কোডটি পায়।

ত্রুটি বার্তা

ক্লায়েন্ট অ্যাপ্লিকেশনটি নিম্নলিখিত প্রতিক্রিয়া কোডটি পায়:

HTTP/1.1 400 Bad Request

এছাড়াও, আপনি নীচে দেখানোটির মতো একটি ত্রুটি বার্তা দেখতে পারেন:

{
   "fault":{
      "faultstring":"Duplicate Header \"Expires\"",
      "detail":{
         "errorcode":"protocol.http.DuplicateHeader"
      }
   }
}

সম্ভাব্য কারণসমূহ

ক্লায়েন্ট থেকে Apigee Edge-এ পাঠানো HTTP অনুরোধের অংশ হিসেবে, Apigee Edge-এ একাধিকবার কোনো নির্দিষ্ট HTTP হেডার (যার একাধিক কপি থাকা অনুমোদিত নয়) উপস্থিত হলে এই ত্রুটিটি ঘটে।

RFC 7230-এর ৩.২.২: ফিল্ড অর্ডার ধারা অনুসারে , একজন প্রেরক একটি বার্তায় একই ফিল্ড নামের একাধিক হেডার ফিল্ড তৈরি করতে পারবে না, যদি না সেই হেডার ফিল্ডের সম্পূর্ণ ফিল্ড ভ্যালু একটি কমা-বিভক্ত তালিকা [অর্থাৎ, #(ভ্যালু)] হিসাবে সংজ্ঞায়িত করা থাকে, অথবা হেডার ফিল্ডটি একটি সুপরিচিত ব্যতিক্রম হয়। যদি Apigee Edge ক্লায়েন্ট দ্বারা প্রেরিত HTTP অনুরোধে একটি নির্দিষ্ট হেডার, যার ডুপ্লিকেট থাকা অনুমোদিত নয়, একাধিকবার খুঁজে পায়, তাহলে এটি 400 Bad Request এবং protocol.http.DuplicateHeader এরর কোড দিয়ে সাড়া দেয়।

এই ত্রুটির সম্ভাব্য কারণগুলো নিচে দেওয়া হলো:

কারণ বর্ণনা সমস্যা সমাধানের নির্দেশাবলী প্রযোজ্য
অনুরোধে ডুপ্লিকেট হেডার ক্লায়েন্ট অ্যাপ্লিকেশন থেকে Apigee-তে পাঠানো HTTP অনুরোধটিতে ডুপ্লিকেট হেডার রয়েছে। এজ পাবলিক এবং প্রাইভেট ক্লাউড ব্যবহারকারীরা

সাধারণ রোগ নির্ণয়ের পদক্ষেপ

এই ত্রুটি নির্ণয় করতে নিম্নলিখিত সরঞ্জাম/কৌশলগুলোর মধ্যে যেকোনো একটি ব্যবহার করুন:

এপিআই মনিটরিং

এপিআই মনিটরিং ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. উপযুক্ত ভূমিকা সম্পন্ন একজন ব্যবহারকারী হিসেবে Apigee Edge UI-তে সাইন ইন করুন
  2. যে প্রতিষ্ঠানে আপনি বিষয়টি তদন্ত করতে চান, সেখানে যান।

  3. Analyze > API Monitoring > Investigate পৃষ্ঠায় যান।
  4. সেই নির্দিষ্ট সময়সীমাটি নির্বাচন করুন যার মধ্যে আপনি ত্রুটিগুলো লক্ষ্য করেছেন।
  5. নিশ্চিত করুন যে প্রক্সি ফিল্টারটি ‘সকল’ (All) এ সেট করা আছে।
  6. সময়ের সাপেক্ষে ফল্ট কোডের লেখচিত্র অঙ্কন করুন।
  7. নীচে দেখানো অনুযায়ী, যে সেলটিতে ফল্ট কোড protocol.http.DuplicateHeader আছে, সেটি নির্বাচন করুন:

  8. ফল্ট কোড protocol.http.DuplicateHeader সম্পর্কিত তথ্য নিচে দেখানো অনুযায়ী প্রদর্শিত হয়:

  9. 'লগ দেখুন'-এ ক্লিক করুন এবং ব্যর্থ অনুরোধটির সারিটি প্রসারিত করুন।
  10. লগস উইন্ডো থেকে নিম্নলিখিত বিবরণগুলো নোট করুন:
    1. স্ট্যাটাস কোড: 400
    2. ত্রুটির উৎস: apigee
    3. ত্রুটি কোড: protocol.http.DuplicateHeader .
  11. যদি ফল্ট সোর্সের মান apigee বা MP হয় MP এবং ফল্ট কোডের মান যদি protocol.http.DuplicateHeader হয়, তাহলে তা নির্দেশ করে যে ক্লায়েন্টের HTTP অনুরোধটিতে ডুপ্লিকেট হেডার ছিল।

ট্রেস টুল

এনজিআইএনএক্স

NGINX অ্যাক্সেস লগ ব্যবহার করে ত্রুটি নির্ণয় করতে:

  1. আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে HTTP 400 ত্রুটি সম্পর্কিত মূল তথ্য নির্ধারণ করতে NGINX অ্যাক্সেস লগ ব্যবহার করতে পারেন।
  2. NGINX অ্যাক্সেস লগগুলি পরীক্ষা করুন:

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log

    যেখানে: ORG , ENV এবং PORT# প্রকৃত মান দ্বারা প্রতিস্থাপিত হয়।

  3. একটি নির্দিষ্ট সময়কালে কোনো 400 এরর ছিল কিনা (যদি সমস্যাটি অতীতে ঘটে থাকে) অথবা এখনও কোনো রিকোয়েস্ট 400 এর কারণে ফেইল করছে কিনা, তা খুঁজে দেখুন।
  4. যদি আপনি protocol.http.DuplicateHeader এর মানের সাথে মিলে যাওয়া X-Apigee-fault-code সহ কোনো 400 ত্রুটি খুঁজে পান, তাহলে X-Apigee-fault-source-এর মান নির্ধারণ করুন।

    NGINX অ্যাক্সেস লগ থেকে প্রাপ্ত একটি নমুনা 400 এরর:

    NGINX অ্যাক্সেস লগ থেকে নেওয়া উপরের নমুনা এন্ট্রিটিতে X-Apigee-fault-code এবং X-Apigee-fault-source-এর জন্য নিম্নলিখিত মানগুলি রয়েছে:

    প্রতিক্রিয়া হেডার মূল্য
    এক্স-এপিজি-ফল্ট-কোড protocol.http.DuplicateHeader
    এক্স-এপিজি-ফল্ট-সোর্স MP

কারণ: অনুরোধে ডুপ্লিকেট হেডার

রোগ নির্ণয়

  1. সাধারণ রোগ নির্ণয়ের ধাপগুলিতে ব্যাখ্যা করা অনুযায়ী API মনিটরিং অথবা NGINX অ্যাক্সেস লগ ব্যবহার করে পরিলক্ষিত ত্রুটির জন্য ফল্ট কোড এবং ফল্ট সোর্স নির্ধারণ করুন।
  2. যদি ফল্ট সোর্সের মান apigee বা MP হয়, তাহলে এটি নির্দেশ করে যে ক্লায়েন্ট অ্যাপ্লিকেশন থেকে Apigee-তে পাঠানো অনুরোধে ডুপ্লিকেট হেডার রয়েছে।
  3. অনুরোধের অংশ হিসেবে একাধিকবার পাঠানো প্রকৃত হেডারটি আপনি নিম্নলিখিত পদ্ধতিগুলোর যেকোনো একটি ব্যবহার করে নির্ধারণ করতে পারেন:

    ত্রুটি বার্তা

    ত্রুটির বার্তা ব্যবহার করে

    1. আপনার কাছে যদি Apigee Edge থেকে প্রাপ্ত সম্পূর্ণ এরর মেসেজটি থাকে, তাহলে faultstring টি দেখুন। faultstring টিতে সেই হেডারের নামটি থাকে যা একাধিকবার পাঠানো হয়েছে।

      নমুনা ত্রুটি বার্তা:

      "faultstring":"Duplicate Header \"Expires\""
    2. উপরের এরর মেসেজে আপনি দেখতে পাচ্ছেন যে, faultstring এ যেমন দেখা যাচ্ছে, Expires হেডারটি একাধিকবার পাঠানো হয়েছে।

    প্রকৃত অনুরোধ

    প্রকৃত অনুরোধ ব্যবহার করে

    1. ক্লায়েন্ট অ্যাপ্লিকেশন দ্বারা করা প্রকৃত অনুরোধটি যদি আপনার কাছে থাকে, তাহলে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

      1. অনুরোধে পাঠানো হেডারগুলোর তালিকা যাচাই করুন।
      2. যদি আপনি দেখেন যে কোনো নির্দিষ্ট হেডার রিকোয়েস্টে একই বা ভিন্ন ভিন্ন ভ্যালু সহ একাধিকবার উপস্থিত আছে, তাহলে সেটাই এই এররের কারণ।

      নমুনা অনুরোধ:

      curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
      

      উপরের উদাহরণ অনুরোধটিতে, Expires হেডারটি একাধিকবার পাঠানো হয়েছে। তাই, এই অনুরোধটি 400 Bad Request ত্রুটি এবং protocol.http.DuplicateHeader ত্রুটি কোড সহ ব্যর্থ হয়।

    2. বিকল্পভাবে, যদি আপনার ক্লায়েন্ট লগগুলিতে অ্যাক্সেস থাকে, তাহলে আপনি Apigee Edge-এ করা প্রকৃত অনুরোধ সম্পর্কে তথ্য আছে কিনা তা দেখতে পারেন এবং একাধিকবার পাঠানো হেডারটি শনাক্ত করতে পারেন।

সমাধান

নকল সংশোধন করুন

বিকল্প #১ [প্রস্তাবিত বিকল্প] ক্লায়েন্ট অ্যাপ্লিকেশনটি ঠিক করুন যাতে এতে ডুপ্লিকেট হেডার অন্তর্ভুক্ত না থাকে।

  1. নির্দিষ্ট ক্লায়েন্ট কেন ডুপ্লিকেট হেডার পাঠাচ্ছে তার কারণ বিশ্লেষণ করুন। উদাহরণস্বরূপ, উপরের ক্ষেত্রে Expires । এপিআই প্রক্সিগুলোর জন্য ডুপ্লিকেট হেডারটি গ্রহণ করা ঠিক আছে কিনা তা যাচাই করুন। সাধারণত, HTTP স্পেসিফিকেশন RFC7230 অনুযায়ী এটি কাম্য নয়।
  2. যদি এটি অনাকাঙ্ক্ষিত হয়, তবে আপনার ক্লায়েন্ট অ্যাপ্লিকেশনটি এমনভাবে পরিবর্তন করুন যাতে এটি ডুপ্লিকেট হেডার না পাঠায়।

    উপরে আলোচিত উদাহরণে দেখা যায় যে, Expires হেডারটি একই মান দিয়ে দুইবার পাঠানো হয়েছে, যা কাম্য নয়। নিচে দেখানো পদ্ধতি অনুযায়ী Expires হেডারটি শুধুমাত্র একবার পাঠিয়ে আপনি এই সমস্যাটি সমাধান করতে পারেন:

    curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
    
  3. যদি এটি কাম্য হয় এবং আপনি ডুপ্লিকেট হেডারগুলির অনুমতি দিতে চান, তাহলে বিকল্প #২-এ যান: CwC প্রপার্টি ব্যবহার

সিডব্লিউসি

বিকল্প #২ CwC প্রপার্টি ব্যবহার করে

Apigee একটি CwC প্রপার্টি HTTPHeader.<HeaderName> প্রদান করে, যা ক্লায়েন্ট অ্যাপ্লিকেশন এবং টার্গেট সার্ভারগুলোকে Apigee Edge-এর API প্রক্সিগুলোতে ডুপ্লিকেট হেডার পাঠাতে অনুমতি দেয়।

CwC সম্পত্তি মূল্যবোধ
HTTPHeader.<HeaderName> allowDuplicates,multivalued

উদাহরণস্বরূপ, Expires হেডারের জন্য ডুপ্লিকেট এবং একাধিক মান অনুমোদনের জন্য মেসেজ প্রসেসরগুলিতে নিম্নলিখিত প্রপার্টিটি সেট করা যেতে পারে।

HTTPHeader.Expires=allowDuplicates, multiValued
  1. আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে ‘কনফিগারেশন মেসেজ প্রসেসরস টু ইউজ ডুপ্লিকেট হেডারস ’ হাউ-টু গাইডটি ব্যবহার করে এই প্রপার্টিটি কনফিগার করতে পারেন, যাতে অনুরোধে ডুপ্লিকেট হেডার থাকলেও Apigee Edge 400 Bad Request এরর দেখানো থেকে বিরত থাকে।
  2. আপনি যদি একজন পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে আপনার প্রতিষ্ঠানের জন্য এই প্রপার্টিটি কনফিগার করতে Apigee Edge Support-এর সাথে যোগাযোগ করুন।

স্পেসিফিকেশন

Apigee আশা করে যে ক্লায়েন্ট অ্যাপ্লিকেশনটি নিম্নলিখিত RFC স্পেসিফিকেশন অনুসারে অনুরোধের অংশ হিসাবে ডুপ্লিকেট হেডার পাঠাবে না:

স্পেসিফিকেশন
আরএফসি ৭২৩০, ধারা ৩.২.২: ফিল্ড অর্ডার
আরএফসি ৭২৩০, ধারা ৩.২ হেডার ফিল্ড

আপনার যদি এখনও Apigee Support-এর কাছ থেকে কোনো সাহায্যের প্রয়োজন হয়, তাহলে Must gather diagnostic information- এ যান।

রোগ নির্ণয়ের তথ্য অবশ্যই সংগ্রহ করতে হবে

নিম্নলিখিত ডায়াগনস্টিক তথ্য সংগ্রহ করুন, এবং তারপর Apigee Edge Support-এর সাথে যোগাযোগ করুন।

আপনি যদি পাবলিক ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্যগুলো প্রদান করুন:

  • সংস্থার নাম
  • পরিবেশের নাম
  • এপিআই প্রক্সি নাম
  • 400 ত্রুটিটি পুনরুৎপাদন করতে ব্যবহৃত সম্পূর্ণ curl কমান্ড।
  • এপিআই অনুরোধগুলির ট্রেস ফাইল

আপনি যদি একজন প্রাইভেট ক্লাউড ব্যবহারকারী হন, তাহলে নিম্নলিখিত তথ্যগুলো প্রদান করুন:

  • ব্যর্থ অনুরোধগুলির জন্য সম্পূর্ণ ত্রুটি বার্তা পরিলক্ষিত হয়েছে।
  • পরিবেশের নাম
  • এপিআই প্রক্সি বান্ডেল
  • 400 ত্রুটিটি পুনরুৎপাদন করতে আপনি যে সম্পূর্ণ curl কমান্ডটি ব্যবহার করেছেন তা জানান।
  • এপিআই অনুরোধগুলির ট্রেস ফাইল
  • NGINX অ্যাক্সেস লগ:

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log

    যেখানে: ORG , ENV এবং PORT# প্রকৃত মান দ্বারা প্রতিস্থাপিত হয়।

  • মেসেজ প্রসেসর সিস্টেম লগ /opt/apigee/var/log/edge-message-processor/logs/system.log