400 गलत अनुरोध - डुप्लीकेट हेडर

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

समस्या का ब्यौरा

क्लाइंट ऐप्लिकेशन को एपीआई कॉल के रिस्पॉन्स के तौर पर, गड़बड़ी कोड के साथ 400 Bad Request का एचटीटीपी स्टेटस कोड protocol.http.DuplicateHeader मिलता है.

गड़बड़ी का मैसेज

क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:

HTTP/1.1 400 Bad Request

इसके अलावा, आपको गड़बड़ी का एक मैसेज भी दिख सकता है, जो नीचे दिखाए गए मैसेज से मिलता-जुलता हो:

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

संभावित कारण

यह गड़बड़ी तब होती है, जब किसी खास एचटीटीपी हेडर को Apigee Edge में डुप्लीकेट वैल्यू रखने की अनुमति नहीं होती है. यह क्लाइंट के Apigee Edge को भेजे गए एचटीटीपी अनुरोध के हिस्से के रूप में, एक से ज़्यादा या अलग-अलग वैल्यू के साथ एक से ज़्यादा बार दिखता है.

आरएफ़सी 7230 के सेक्शन 3.2.2: फ़ील्ड ऑर्डरके मुताबिक, भेजने वाले को किसी मैसेज में एक ही फ़ील्ड नाम वाले कई हेडर फ़ील्ड तब तक जनरेट नहीं करने चाहिए, जब तक कि उस हेडर फ़ील्ड की पूरी फ़ील्ड वैल्यू को कॉमा लगाकर अलग की गई सूची के तौर पर न बताया गया हो [यानी, #(values)] या हेडर फ़ील्ड एक आम अपवाद है. अगर Apigee Edge को कोई खास हेडर मिलता है और क्लाइंट के भेजे गए एचटीटीपी अनुरोध में एक से ज़्यादा बार डुप्लीकेट हेडर बनाने की अनुमति नहीं है, तो उसके जवाब में 400 Bad Request और गड़बड़ी कोड protocol.http.DuplicateHeader दिया जाता है.

इस गड़बड़ी की ये वजहें हो सकती हैं:

वजह ब्यौरा समस्या हल करने के लिए निर्देश
अनुरोध में डुप्लीकेट हेडर मौजूद है क्लाइंट ऐप्लिकेशन से Apigee को भेजे गए एचटीटीपी अनुरोध में डुप्लीकेट हेडर हैं. Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता

निदान के सामान्य चरण

इस गड़बड़ी का पता लगाने के लिए, नीचे दिए गए किसी टूल/तकनीक का इस्तेमाल करें:

एपीआई मॉनिटरिंग

एपीआई मॉनिटरिंग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:

  1. सही भूमिका वाले उपयोगकर्ता के तौर पर, Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में साइन इन करें.
  2. उस संगठन पर जाएं जिसमें आपको समस्या की जांच करनी है.

  3. विश्लेषण करें > एपीआई की निगरानी करना > जांच करें पेज पर जाएं.
  4. वह खास समयसीमा चुनें जिसमें आपने गड़बड़ियां देखी थीं.
  5. पक्का करें कि प्रॉक्सी फ़िल्टर सभी पर सेट है.
  6. समय के हिसाब से गलत कोड प्लॉट करें.
  7. वह सेल चुनें जिसमें गड़बड़ी कोड protocol.http.DuplicateHeader है, जैसा कि नीचे दिखाया गया है:

  8. गड़बड़ी कोड protocol.http.DuplicateHeader के बारे में जानकारी नीचे दिखाई गई है:

  9. लॉग देखें पर क्लिक करें और पूरे न हो पाने वाले अनुरोध की लाइन को बड़ा करें.
  10. लॉग विंडो से, नीचे दी गई जानकारी पर ध्यान दें:
    1. स्थिति कोड: 400
    2. गलत इस्तेमाल का सोर्स: apigee
    3. गलत कोड: protocol.http.DuplicateHeader.
  11. अगर गलत सोर्स की वैल्यू apigee या MP है और फ़ॉल कोड की वैल्यू protocol.http.DuplicateHeader है, तो इसका मतलब है कि क्लाइंट के एचटीटीपी अनुरोध में डुप्लीकेट हेडर शामिल हैं.

ट्रेस टूल

NGINX

NGINX ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:

  1. अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो एचटीटीपी 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-fault-source की वैल्यू तय करें.

    NGINX ऐक्सेस लॉग से 400 कोड वाली गड़बड़ी का नमूना:

    NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में X-Apigee- समस्या का कोड और X-Apigee-fault-source की ये वैल्यू दी गई हैं:

    रिस्पॉन्स हेडर वैल्यू
    X-Apigee-fault-code protocol.http.DuplicateHeader
    X-Apigee-fault-source MP

वजह: अनुरोध में डुप्लीकेट हेडर है

संक्रमण की जांच

  1. एपीआई मॉनिटरिंग या NGINX ऐक्सेस लॉग का इस्तेमाल करके मिली गड़बड़ी के लिए, फ़ॉल कोड और फ़ॉल सोर्स तय करें. इसके बारे में गड़बड़ी की जानकारी पाने के सामान्य तरीके में बताया गया है.
  2. अगर गलत सोर्स की वैल्यू apigee या MP है, तो इससे पता चलता है कि क्लाइंट ऐप्लिकेशन ने Apigee को जो अनुरोध भेजा था उसमें डुप्लीकेट हेडर हैं.
  3. अनुरोध के हिस्से के तौर पर, एक से ज़्यादा बार भेजे गए असल हेडर की जानकारी पाने के लिए, इनमें से किसी एक तरीके का इस्तेमाल किया जा सकता है:

    गड़बड़ी का मैसेज

    गड़बड़ी के मैसेज का इस्तेमाल करना

    1. अगर आपके पास Apigee Edge से मिले गड़बड़ी के पूरे मैसेज का ऐक्सेस है, तो faultstring देखें. faultstring में उस हेडर का नाम होता है जिसे एक से ज़्यादा बार भेजा जा चुका है.

      गड़बड़ी के मैसेज का सैंपल:

      "faultstring":"Duplicate Header \"Expires\""
      
    2. गड़बड़ी के ऊपर दिए गए मैसेज में, आपको यह दिख सकता है कि हेडर Expires को एक से ज़्यादा बार भेजा गया है, जैसा कि faultstring में दिखाया गया है.

    वास्तविक अनुरोध

    असल अनुरोध का इस्तेमाल करना

    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. पुष्टि करें कि एपीआई प्रॉक्सी के लिए डुप्लीकेट हेडर स्वीकार करना ठीक है. आम तौर पर, एचटीटीपी स्पेसिफ़िकेशन RFC7230 के मुताबिक इस्तेमाल नहीं किया जाना चाहिए.
  2. अगर ऐसा नहीं करना चाहिए, तो अपने क्लाइंट ऐप्लिकेशन में बदलाव करें, ताकि डुप्लीकेट हेडर न भेजे जा सकें.

    ऊपर बताए गए उदाहरण में, हमें पता चला है कि हेडर Expires को एक ही वैल्यू के साथ दो बार भेजा जाता है. ऐसा करना ज़रूरी नहीं है. नीचे बताए गए तरीके से, Expires हेडर को सिर्फ़ एक बार पास करके समस्या को ठीक किया जा सकता है:

    curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
    
  3. अगर आपको डुप्लीकेट हेडर इस्तेमाल करने की अनुमति देनी है, तो विकल्प #2 CwC प्रॉपर्टी का इस्तेमाल करना पर जाएं.

CwC

दूसरा विकल्प CwC प्रॉपर्टी का इस्तेमाल करना

Apigee, CwC प्रॉपर्टी HTTPHeader.<HeaderName> उपलब्ध कराता है. इसकी मदद से, क्लाइंट ऐप्लिकेशन और टारगेट सर्वर, Apigee Edge में एपीआई प्रॉक्सी को डुप्लीकेट हेडर भेज सकते हैं.

CwC प्रॉपर्टी वैल्यू
HTTPHeader.<HeaderName> allowDuplicates,multivalued

उदाहरण के लिए, मैसेज प्रोसेसर पर इस प्रॉपर्टी को सेट किया जा सकता है, ताकि Expires हेडर के लिए डुप्लीकेट और एक से ज़्यादा वैल्यू दी जा सके.

HTTPHeader.Expires=allowDuplicates, multiValued
  1. अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो Apigee Edge को 400 Bad Request की गड़बड़ी होने से रोकने के लिए, प्रॉपर्टी को कॉन्फ़िगर किया जा सकता है. भले ही, अनुरोध में डुप्लीकेट हेडर शामिल हों. इसके लिए, डुप्लीकेट हेडर इस्तेमाल करने के लिए मैसेज प्रोसेसर को कॉन्फ़िगर करना गाइड इस्तेमाल करें.
  2. अगर आप Public Cloud उपयोगकर्ता हैं, तो अपने संगठन के लिए इस प्रॉपर्टी को कॉन्फ़िगर करने के लिए, Apigee Edge की सहायता टीम से संपर्क करें.

खास जानकारी

Apigee को उम्मीद है कि क्लाइंट ऐप्लिकेशन, आरएफ़सी के इन निर्देशों के मुताबिक, अनुरोध के हिस्से के तौर पर डुप्लीकेट हेडर न भेजे:

खास जानकारी
आरएफ़सी 7230, सेक्शन 3.2.2: फ़ील्ड ऑर्डर
आरएफ़सी 7230, सेक्शन 3.2 हेडर फ़ील्ड

अगर आपको अब भी Apigee की सहायता टीम से मदद चाहिए, तो गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है पर जाएं.

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करनी होगी

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी यह जानकारी इकट्ठा करें और Apigee Edge की सहायता टीम से संपर्क करें.

अगर आप Public Cloud उपयोगकर्ता हैं, तो यह जानकारी दें:

  • संगठन का नाम
  • परिवेश का नाम
  • एपीआई प्रॉक्सी का नाम
  • 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