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

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান
তথ্য

উপসর্গ

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

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

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

HTTP/1.1 400 Bad Request

উপরন্তু, আপনি নীচে দেখানো একটির মত একটি ত্রুটি বার্তা পর্যবেক্ষণ করতে পারেন:

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

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

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

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

এই ত্রুটির সম্ভাব্য কারণগুলি এখানে রয়েছে:

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

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

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

API মনিটরিং

API মনিটরিং ব্যবহার করে ত্রুটি নির্ণয় করতে:

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

  3. এনালাইজ > API মনিটরিং > ইনভেস্টিগেট পেজে নেভিগেট করুন।
  4. নির্দিষ্ট সময়সীমা নির্বাচন করুন যেখানে আপনি ত্রুটিগুলি পর্যবেক্ষণ করেছেন।
  5. প্রক্সি ফিল্টারটি সকলে সেট করা আছে তা নিশ্চিত করুন।
  6. সময়ের বিরুদ্ধে প্লট ফল্ট কোড
  7. ফল্ট কোড protocol.http.DuplicateHeader আছে এমন একটি সেল নির্বাচন করুন। http.DuplicateHeader নীচে দেখানো হয়েছে:

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

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

ট্রেস টুল

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

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. আপনি যদি X-Apigee-fault-code-এর সাথে protocol.http.DuplicateHeader এর মানের সাথে 400 ত্রুটি খুঁজে পান, তাহলে X-Apigee-ফল্ট-সোর্সের মান নির্ধারণ করুন।

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

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

    প্রতিক্রিয়া শিরোনাম মান
    এক্স-অ্যাপিজি-ফল্ট-কোড protocol.http.DuplicateHeader
    এক্স-অ্যাপিজি-ফল্ট-উৎস MP

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

রোগ নির্ণয়

  1. এপিআই মনিটরিং বা এনজিআইএনএক্স অ্যাক্সেস লগ ব্যবহার করে দেখা ত্রুটির জন্য ফল্ট কোড এবং ফল্ট সোর্স নির্ণয় করুন যা সাধারণ নির্ণয়ের ধাপে ব্যাখ্যা করা হয়েছে।
  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 [প্রস্তাবিত বিকল্প] ডুপ্লিকেট হেডার অন্তর্ভুক্ত না করার জন্য ক্লায়েন্ট অ্যাপ্লিকেশনটি ঠিক করুন

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

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

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

CwC

বিকল্প #2 CwC সম্পত্তি ব্যবহার করে

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

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

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

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

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

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

স্পেসিফিকেশন
RFC 7230, বিভাগ 3.2.2: ফিল্ড অর্ডার
RFC 7230, বিভাগ 3.2 হেডার ক্ষেত্র

আপনার যদি এখনও Apigee সাপোর্ট থেকে কোনো সহায়তার প্রয়োজন হয়, তাহলে অবশ্যই ডায়াগনস্টিক তথ্য সংগ্রহ করুন- এ যান।

ডায়াগনস্টিক তথ্য সংগ্রহ করতে হবে

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

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

  • প্রতিষ্ঠানের নাম
  • পরিবেশের নাম
  • API প্রক্সি নাম
  • 400 ত্রুটি পুনরুত্পাদন করতে ব্যবহৃত সম্পূর্ণ curl কমান্ড
  • API অনুরোধের জন্য ট্রেস ফাইল

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

  • ব্যর্থ অনুরোধের জন্য পরিলক্ষিত সম্পূর্ণ ত্রুটি বার্তা
  • পরিবেশের নাম
  • API প্রক্সি বান্ডেল
  • আপনি 400 ত্রুটি পুনরুত্পাদন করতে ব্যবহৃত curl কমান্ডটি সম্পূর্ণ করুন
  • API অনুরোধের জন্য ট্রেস ফাইল
  • 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