502 गलत गेटवे - responseWithBody

यह Apigee Edge का दस्तावेज़ है.
Go to the Apigee X documentation.
info

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

एपीआई कॉल के जवाब में, क्लाइंट ऐप्लिकेशन को गड़बड़ी कोड protocol.http.ResponseWithBody के साथ, एचटीटीपी स्टेटस कोड 502 Bad Gateway मिलता है.

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

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

HTTP/1.1 502 Bad Gateway

इसके अलावा, आपको गड़बड़ी के ये मैसेज दिख सकते हैं:

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

संभावित कारण

यह गड़बड़ी तब होती है, जब Apigee Edge को बैकएंड सर्वर से मिलने वाला एचटीटीपी रिस्पॉन्स, 204 No Content या 205 Reset Content होता है. हालांकि, इसमें रिस्पॉन्स बॉडी और/या ये हेडर शामिल होते हैं:

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

खास जानकारी RFC 7231, सेक्शन 6.3.5: 204 No Content और RFC 7231, सेक्शन 6.3.6: 205 Reset Content के मुताबिक, मूल सर्वर से स्टेटस कोड 204 No Content या 205 Reset Content के साथ, रिस्पॉन्स पेलोड बॉडी के तौर पर कोई अतिरिक्त कॉन्टेंट नहीं भेजा जाना चाहिए. `Content-Length`Content-Length, `Content-Encoding`Content-Encoding या `Transfer-Encoding`Transfer-Encoding जैसे रिस्पॉन्स हेडर, रिस्पॉन्स पेलोड के साइज़, टाइप या फ़ॉर्मैट के बारे में बताते हैं.

इसलिए, Apigee Edge, क्लाइंट को इन स्थितियों में गड़बड़ी कोड protocol.http.ResponseWithBody के साथ, 502 Bad Gateway स्टेटस कोड दिखाता है:

बैकएंड सर्वर से मिला स्टेटस कोड
बैकएंड सर्वर से मिले रिस्पॉन्स में ये शामिल हैं 204 कोई सामग्री नहीं 205 सामग्री रीसेट करें
जवाब का मुख्य भाग गड़बड़ी गड़बड़ी

Content-Length हेडर

(शून्य के अलावा कोई वैल्यू सेट की गई है)

गड़बड़ी गड़बड़ी

Content-Encoding

(Apigee Edge में काम करने वाली एन्कोडिंग पर सेट है)

गड़बड़ी कोई गड़बड़ी नहीं
Transfer-Encoding गड़बड़ी गड़बड़ी

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

वजह ब्यौरा इनके लिए समस्या हल करने के निर्देश लागू होते हैं
बैकएंड सर्वर से मिले 204 रिस्पॉन्स के साथ रिस्पॉन्स बॉडी या हेडर बैकएंड सर्वर, 204 No Content या 205 Reset Content रिस्पॉन्स के साथ, रिस्पॉन्स बॉडी और/या Content-Type, Content-Encoding या Transfer-Encoding हेडर में से एक या उससे ज़्यादा हेडर भेजता है. Edge Public और Private Cloud के उपयोगकर्ता

गड़बड़ी की जानकारी इकट्ठा करने के सामान्य चरण

इस गड़बड़ी की जानकारी इकट्ठा करने के लिए, इनमें से कोई टूल/तकनीक इस्तेमाल करें:

एपीआई की परफ़ॉर्मेंस मॉनिटर करना

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

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

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

    ( बड़ी इमेज देखें)

  7. आपको गड़बड़ी कोड protocol.http.ResponseWithBody के बारे में जानकारी दिखेगी. जैसे, यहां दिखाया गया है:

    ( बड़ी इमेज देखें)

  8. लॉग देखें पर क्लिक करें और पूरे न हो पाने वाले अनुरोध की लाइन को बड़ा करें.

    ( बड़ी इमेज देखें)

  9. लॉग विंडो में, यह जानकारी नोट करें:
    • स्टेटस कोड: 502
    • गड़बड़ी का सोर्स: target
    • गड़बड़ी कोड: protocol.http.ResponseWithBody.
  10. अगर गड़बड़ी का सोर्स की वैल्यू target है और गड़बड़ी कोड की वैल्यू protocol.http.ResponseWithBody है, तो इसका मतलब है कि गड़बड़ी इसलिए हुई, क्योंकि बैकएंड सर्वर ने रिस्पॉन्स बॉडी और/या संभावित वजहें सेक्शन में बताए गए हेडर में से कोई एक हेडर के साथ, 204 No Content या 205 Reset Content स्टेटस कोड भेजा.

ट्रेस टूल

ट्रेस टूल का इस्तेमाल करके, गड़बड़ी की जानकारी इकट्ठा करने के लिए:

  1. ट्रेस सेशन चालू करें और इनमें से कोई एक काम करें:
    1. 502 Bad Gateway गड़बड़ी होने का इंतज़ार करें. या
    2. अगर समस्या को फिर से दोहराया जा सकता है, तो एपीआई कॉल करें और 502 Bad Gateway गड़बड़ी को फिर से दोहराएं.
  2. पक्का करें कि सभी FlowInfo दिखाएं चालू हो:

  3. पूरे न हो पाने वाले किसी एक अनुरोध को चुनें और उसका ट्रेस देखें.
  4. ट्रेस के अलग-अलग चरणों पर जाएं और पता लगाएं कि गड़बड़ी कहां हुई.
  5. आम तौर पर, आपको flowinfo गड़बड़ी में गड़बड़ी दिखेगी. जैसे, यहां दिखाया गया है:

    पहली स्थिति

    पहली स्थिति: बैकएंड सर्वर, स्टेटस कोड 204 No Content के साथ रिस्पॉन्स देता है. इसमें रिस्पॉन्स बॉडी और/या संभावित वजहें में बताए गए हेडर में से कोई एक हेडर शामिल होता है.

    ट्रेस में, इनकी वैल्यू नोट करें:

    • गड़बड़ी: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    दूसरी स्थिति

    दूसरी स्थिति: बैकएंड सर्वर, स्टेटस कोड 204 No Content के साथ रिस्पॉन्स देता है. इसमें रिस्पॉन्स बॉडी और/या संभावित वजहें में बताए गए हेडर में से कोई एक हेडर शामिल होता है.

    ट्रेस में, इनकी वैल्यू नोट करें:

    • गड़बड़ी: Received 205 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway
  6. ट्रेस में AX (रिकॉर्ड किया गया Analytics डेटा) चरण पर जाएं और उस पर क्लिक करें.
  7. नीचे की ओर स्क्रोल करके, चरण की जानकारी, गड़बड़ी के हेडर सेक्शन पर जाएं और X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू पता करें. जैसे, यहां दिखाया गया है:

    ( बड़ी इमेज देखें)

  8. ध्यान दें कि X-Apigee-fault-code और X-Apigee-fault-source are protocol.http.ResponseWithBody और target की वैल्यू, क्रमशः हैं. इससे पता चलता है कि गड़बड़ी इसलिए हुई, क्योंकि बैकएंड सर्वर ने रिस्पॉन्स बॉडी और/या संभावित वजहें में बताए गए हेडर में से कोई एक हेडर के साथ, 204 No Content या 205 Reset Content स्टेटस कोड भेजा.
    गड़बड़ी वैल्यू
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target

NGINX

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

  1. अगर आप Private Cloud के उपयोगकर्ता हैं, तो एचटीटीपी 502 Bad Gateway के बारे में अहम जानकारी पाने के लिए, NGINX के ऐक्सेस लॉग का इस्तेमाल किया जा सकता है.
  2. NGINX के ऐक्सेस लॉग देखें:

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

    यहां: ORG, ENV, और PORT# को असल वैल्यू से बदल दिया जाता है.

  3. खोजकर देखें कि 502किसी खास अवधि के दौरान (अगर समस्या पहले हुई थी) या अब भी 502 गड़बड़ियां तो नहीं हो रही हैं. साथ ही, देखें कि गड़बड़ी कोड protocol.http.ResponseWithBody के साथ कोई गड़बड़ी तो नहीं है.
  4. अगर आपको X-Apigee-fault-code के साथ कोई 502 गड़बड़ी मिलती है और इसकी वैल्यू protocol.http.ResponseWithBody से मेल खाती है, तो X-Apigee-fault-source की वैल्यू पता करें.

    NGINX के ऐक्सेस लॉग से मिली 502 गड़बड़ी का नमूना:

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

    रिस्पॉन्स हेडर वैल्यू
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target
  5. ध्यान दें कि X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू, क्रमशः protocol.http.ResponseWithBody और target हैं. इससे पता चलता है कि गड़बड़ी इसलिए हुई, क्योंकि बैकएंड सर्वर ने रिस्पॉन्स बॉडी और/या संभावित वजहें में बताए गए हेडर में से कोई एक हेडर के साथ, 204 No Content या 205 Reset Content स्टेटस कोड भेजा.

वजह: बैकएंड सर्वर से मिले 204 रिस्पॉन्स के साथ रिस्पॉन्स बॉडी या हेडर

गड़बड़ी की जानकारी इकट्ठा करना

  1. एपीआई की परफ़ॉर्मेंस मॉनिटर करने की सुविधा, ट्रेस टूल या NGINX के ऐक्सेस लॉग का इस्तेमाल करके, देखी गई गड़बड़ी के लिए गड़बड़ी कोड और गड़बड़ी का सोर्स पता करें. इसके लिए, गड़बड़ी की जानकारी इकट्ठा करने के सामान्य चरण में बताया गया तरीका अपनाएं.
  2. अगर गड़बड़ी कोड protocol.http.ResponseWithBody है और गड़बड़ी का सोर्स की वैल्यू target है, तो इसका मतलब है कि बैकएंड सर्वर ने रिस्पॉन्स बॉडी और/या संभावित वजहें में बताए गए हेडर में से कोई एक हेडर के साथ, 204 No Content या 205 Reset Content स्टेटस कोड भेजा.
  3. यह पुष्टि करने के लिए कि बैकएंड सर्वर ने वाकई में रिस्पॉन्स पेलोड बॉडी और/या संभावित वजहें में बताए गए हेडर में से एक या उससे ज़्यादा हेडर भेजे हैं या नहीं, यह तरीका अपनाएं:

    1. अगर आप Public Cloud के उपयोगकर्ता हैं और अपने किसी भी सिस्टम से, बैकएंड सर्वर को वही एपीआई अनुरोध भेजा जा सकता है.

    2. अगर आप Private Cloud के उपयोगकर्ता हैं, तो उस संगठन और एनवायरमेंट से जुड़े किसी एक मैसेज प्रोसेसर से, बैकएंड सर्वर को वही एपीआई अनुरोध सीधे भेजा जा सकता है जहां गड़बड़ी देखी गई है.
    3. बैकएंड सर्वर से मिले रिस्पॉन्स की समीक्षा करें और पुष्टि करें कि इसमें एक रिस्पॉन्स पेलोड बॉडी और/या ऊपर बताए गए हेडर में से एक या उससे ज़्यादा हेडर शामिल हैं. अगर हां, तो यही गड़बड़ी की वजह है.

      पहला नमूना

      पहला नमूना: बैकएंड सर्वर का 204 रिस्पॉन्स, जिसमें Content-Encoding हेडर शामिल है

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      इस नमूने में, बैकएंड सर्वर ने 204 No Content स्टेटस कोड और Content-Encoding: gzip के साथ रिस्पॉन्स दिया

      दूसरा नमूना

      दूसरा नमूना: बैकएंड सर्वर का 204 रिस्पॉन्स, जिसमें Content-Length हेडर शामिल है

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      इस नमूने में, बैकएंड सर्वर ने 204 No Content स्टेटस कोड और Content-Length: 48 के साथ रिस्पॉन्स दिया

      तीसरा नमूना

      तीसरा नमूना: बैकएंड सर्वर का 205 रिस्पॉन्स, जिसमें रिस्पॉन्स बॉडी शामिल है

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      इस नमूने में, बैकएंड सर्वर ने 205 Reset Content स्टेटस कोड के साथ रिस्पॉन्स दिया. इसमें रिस्पॉन्स बॉडी This is a sample Response. शामिल है

    4. ऊपर दिए गए सभी उदाहरणों में, बैकएंड सर्वर ने 204 No Content या 205 Reset Content स्टेटस कोड रिस्पॉन्स बॉडी और/या संभावित वजहें में बताए गए हेडर में से कोई एक हेडर के साथ भेजा.
    5. इसलिए, Apigee Edge ने गड़बड़ी कोड protocol.http.ResponseWithBody के साथ, 502 Bad Gateway स्टेटस कोड भेजा.

रिज़ॉल्यूशन

पक्का करें कि Apigee Edge को 204 No Content या 205 Reset Content रिस्पॉन्स भेजते समय, बैकएंड सर्वर हमेशा खास जानकारी RFC 7231, सेक्शन 6.3.6: 205 Reset Content के मुताबिक काम करे. इसका मतलब है कि बैकएंड सर्वर को ये चीज़ें 204 No Content या 205 Reset Content रिस्पॉन्स के साथ **_नहीं_** भेजनी चाहिए:

  1. रिस्पॉन्स पेलोड बॉडी
  2. और ये हेडर:
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

खास जानकारी

अगर बैकएंड सर्वर, 204 No Content या 205 Reset Content रिस्पॉन्स भेजता है, लेकिन RFC की इन खास जानकारी के मुताबिक काम नहीं करता है, तो Apigee Edge, गड़बड़ी कोड protocol.http.ResponseWithBody के साथ, 502 Bad Gateway स्टेटस कोड दिखाता है:

खास जानकारी
RFC 7231, सेक्शन 6.3.5: 204 No Content
RFC 7231, सेक्शन 6.3.6: 205 Reset Content

ध्यान देने वाली ज़रूरी बातें

हमारा सुझाव है कि बैकएंड सर्वर को ठीक किया जाए, ताकि वह 204 No Content और 205 Reset Content स्टेटस कोड, रिस्पॉन्स बॉडी और इन हेडर के बिना भेजे - Content-Length, Content-Encoding, और Transfer-Encoding. साथ ही, वह खास जानकारी RFC 7231, सेक्शन 6.3.5: 204 No Content और RFC 7231, सेक्शन 6.3.6: 205 Reset Content के मुताबिक काम करे.

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

गड़बड़ी की जानकारी इकट्ठा करने के लिए ज़रूरी शर्तें

गड़बड़ी की यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें:

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

  • संगठन का नाम
  • एनवायरमेंट का नाम
  • एपीआई प्रॉक्सी का नाम
  • 502 गड़बड़ी को फिर से दोहराने के लिए इस्तेमाल किया गया पूरा curl निर्देश
  • एपीआई अनुरोधों के लिए ट्रेस फ़ाइल

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

  • पूरे न हो पाने वाले अनुरोधों के लिए, गड़बड़ी का पूरा मैसेज
  • एनवायरमेंट का नाम
  • एपीआई प्रॉक्सी बंडल
  • एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
  • 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