502 مدخل غير صالح - OverBigLine

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP لـ 502 Bad Gateway مع رمز الخطأ protocol.http.TooBigLine كاستجابة لطلبات واجهة برمجة التطبيقات.

رسالة الخطأ

يتلقى تطبيق العميل رمز الاستجابة التالي:

HTTP/1.1 502 Bad Gateway

بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:

{
   "fault":{
      "faultstring":"response line size exceeding 2,048",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

الأسباب المحتملة

يحدث هذا الخطأ إذا كان حجم Response-Line الذي أرسله خادم الهدف/الخلفية إلى Apigee Edge كجزء من استجابة HTTP أكبر من الحد الأقصى المسموح به في Apigee Edge.

قبل أن ننظر إلى الأسباب المحتملة لهذا الخطأ، لنتعرّف على ما يعنيه سطر الاستجابة وكيفية التحقّق من حجمه.

فهم سطر الرد

تتألف استجابة HTTP النموذجية من ثلاثة أجزاء:

  1. سطر الحالة (يُشار إليه باسم خط الاستجابة في Apigee)
  2. ( مجموعة من عناوين HTTP )
  3. [ النص الأساسي ]

يتكون سطر الاستجابة من ثلاثة أجزاء: إصدار البروتوكول متبوعًا برمز حالة رقمي والعبارة النصية المرتبطة به كما هو موضّح أدناه:

Response-Line   = <HTTP-Version> <Status-Code> <Reason-Phrase>

عند إرسال استجابة HTTP من خلال تطبيق الخادم الهدف/الخلفية، يمثّل السطر الأول الذي يتم إرساله خط الاستجابة كما هو موضّح أعلاه. يليها العناوين ونص الاستجابة/حمولة البيانات في ما يلي.وتعرض لقطة الشاشة النموذجية التالية طلب curl النموذجي وجزء الطلب وجزء الاستجابة (بالإضافة إلى خط الاستجابة).

فهم حجم سطر الرد

  1. في النموذج الذي تمت مناقشته أعلاه، يكون سطر البداية (السطر الأول) في الردّ المُشار إليه أيضًا باسم خط الاستجابة على النحو التالي:

    HTTP/1.1 200 OK
    

    حجم سطر الاستجابة هذا هو ~15 bytes لأنه يحتوي على 15 ASCII characters. بما أنّ هذا الإجراء يقع ضمن الحد المسموح به في Apigee Edge، يتم إرسال الردّ إلى العميل بدون أي أخطاء من خلال Apigee Edge.

  2. وبالمثل إذا نظرت إلى faultstring في رسالة الخطأ الموضحة أعلاه، ستحتوي على "response line size exceeding 2,048". يشير ذلك إلى أنّ سطر الاستجابة في استجابة HTTP الذي أرسله الخادم الهدف/الخلفية تجاوز 2,048 بايت.

فهم سطر الاستجابة الكبير

ووفقًا لتعريف سطر الحالة (يُشار إليه هنا باسم خط الاستجابة) وطلبات واستجابة HTTP النموذجية، سيكون الحجم أصغر بكثير من الحد التلقائي المحدّد وهو 2 كيلوبايت في Apigee Edge، وبالتالي قد لا يبلغ الحد الأقصى. ومع ذلك، إليك بعض السيناريوهات المحتملة التي قد تتجاوز فيها هذا الحد:

  1. الخادم الهدف/الخلفية ليس نظام HTTP. قد تستجيب باستجابة غير HTTP.
  2. يواجه الخادم الهدف/الخلفية مشاكل ويرسل سطر استجابة طويلاً كجزء من استجابة HTTP.

يمكنك الاطّلاع على مزيد من المعلومات حول هذا الموضوع من خلال الانتقال إلى الحصول على error Protocol.http.TooBigLine، "حجم سطر الاستجابة يتجاوز 2,048.

في ما يلي الأسباب المحتملة للخطأ:

السبب الوصف تعليمات تحديد المشاكل وحلّها السارية على
حجم سطر الرد أكبر من الحد المسموح به إنّ حجم Response-Line الذي يرسله الخادم الهدف/الخلفية كجزء من استجابة HTTP إلى Apigee Edge أكبر من الحد المسموح به في Apigee Edge. مستخدمو Edge العام والخاص على السحابة الإلكترونية

خطوات التشخيص الشائعة

استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:

مراقبة واجهة برمجة التطبيقات

لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:

  1. سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
  2. انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.

  3. انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
  4. اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
  5. يمكنك اختيار فلتر الخادم الوكيل لتضييق نطاق رمز الخطأ.
  6. ارسم رمز الخطأ مقابل الوقت.
  7. اختَر خلية تحتوي على رمز الخطأ protocol.http.TooBigLine كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  8. ستظهر لك المعلومات المتعلّقة برمز الخطأ protocol.http.TooBigLine كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  9. انقر على عرض السجلات ووسِّع الصف المتعلق بالطلب الذي تعذّر إكماله.

  10. من نافذة السجلّات، دوِّن التفاصيل التالية:
    • رمز الحالة: 502
    • مصدر الخطأ: target
    • رمز الخطأ: protocol.http.TooBigLine.
  11. إذا كانت قيمة مصدر الخطأ target وقيمة رمز الخطأ هي protocol.http.TooBigLine، يعني ذلك أنّ استجابة HTTP من الخادم الهدف/ الخلفية لها حجم خط استجابة أكبر من الحد الأقصى للحد المسموح به في Apigee Edge.

أداة التتبُّع

  1. فعِّل جلسة التتبُّع وإمّا:
    1. انتظِر حتى يحدث الخطأ 502 Bad Gateway.
    2. إذا كان بإمكانك إعادة إظهار المشكلة، عليك إجراء طلب بيانات من واجهة برمجة التطبيقات وإعادة إظهار الخطأ 502 Bad Gateway.
  2. اختَر أحد الطلبات التي تعذّر تنفيذها وافحص بيانات التتبّع.
  3. التنقّل خلال المراحل المختلفة لعملية التتبّع وتحديد مكان حدوث الخطأ.
  4. عادةً ما يظهر الخطأ في flowinfo الخطأ بعد مرحلة تم إرسال الطلب إلى الخادم الهدف مباشرةً كما هو موضّح أدناه:

    دوِّن قيم الخطأ في عملية التتبّع:

    • خطأ: response line exceeding 2,048
    • error.class: com.apigee.errors.http.server.BadGateway

    يشير هذا إلى أنّ Apigee Edge (مكون معالج الرسائل) تعرض الخطأ فور تلقّي استجابة من خادم الخلفية بسبب تجاوز حجم سطر الاستجابة الحد المسموح به.

  5. ستظهر لك رسالة الخطأ المُرسَلة إلى العميل في مرحلة الردّ المُرسَل إلى العميل كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  6. سجِّل قيم الخطأ من عملية التتبّع:
    • الخطأ: 502 Bad Gateway.
    • محتوى الخطأ: {"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
  7. يمكنك أيضًا الانتقال إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع والنقر عليها للاطّلاع على تفاصيل الخطأ.

    ( عرض صورة أكبر حجمًا)

    لاحظ قيمة ما يلي:

    عناوين الطلبات القيمة
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target
    محتوى الخطأ : النص {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}

NGINX

لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:

  1. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء 502 في HTTP.
  2. تحقَّق من سجلات وصول NGINX:

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

    المكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.

  3. ابحث عن أي أخطاء 502 تحدث خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في السابق) أو إذا كانت هناك أي طلبات لا تزال غير متوافقة مع 502.
  4. إذا عثرت على أي أخطاء 502 تتضمّن رمز X-Apigee-Error-code المطابق لقيمةX-Apigee-fault-code ، حدِّد قيمة X-Apigee-fault-code

    يحتوي إدخال النموذج أعلاه من سجل الوصول إلى NGINX على القيم التالية للسمة X- Apigee-error-code وX-Apigee-Error-source:.

    عناوين الاستجابة القيمة
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target

السبب: حجم سطر الاستجابة أكبر من الحد المسموح به

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي يتم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. إذا كان مصدر الخطأ يتضمّن القيمة target، يعني ذلك أنّ حجم سطر الاستجابة الذي أرسله تطبيق الخادم الهدف/الخلفية إلى Apigee أكبر من الحد المسموح به في Apigee Edge.
  3. يمكنك التحقّق من أنّ حجم سطر الاستجابة تجاوز الحدّ الأقصى المسموح به الذي يبلغ 2 كيلوبايت باستخدام إحدى الطريقتَين التاليتَين:

    رسالة الخطأ

    للتأكُّد من استخدام رسالة الخطأ، اتّبِع الخطوات التالية:

    إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تم استلامها من Apigee Edge، يُرجى الرجوع إلى faultstring.

    نموذج لرسالة خطأ:

    "faultstring":"response line size exceeding 2,048"
    

    تشير السمة faultstring أعلاه إلى أنّ حجم سطر الاستجابة تجاوز الحدّ الأقصى المسموح به وهو 2 كيلوبايت.

    الطلب الفعلي

    للتحقّق من استخدام الطلب الفعلي:

    إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم إجراؤه على تطبيق الخادم الهدف/الخلفية، اتّبِع الخطوات التالية:

    1. التحقق من حجم سطر الرد
    2. إذا وجدت أنّ حجم معرّف الموارد المنتظم (URI) يتجاوز الحد المسموح به في Apigee Edge، هذا هو سبب المشكلة.

      نموذج استجابة من الخادم الهدف/الخلفية:

      curl -v http://HOSTALIAS/test
      
      *   Trying 3.2.1.4...
      * TCP_NODELAY set
      * Connected to <hostalias> (3.2.1.4) port 80 (#0)
      > GET /test HTTP/1.1
      > Host: HOSTALIAS
      > User-Agent: curl/7.64.1
      > Accept: */*
      >
      < HTTP/1.1 200 1111…<trimmed>...11111111
      < Date: Mon, 26 Jul 2021 07:07:18 GMT
      < Content-Type: application/json
      < Content-Length: 269
      < Connection: keep-alive
      < Server: gunicorn/19.9.0
      < Access-Control-Allow-Origin: *
      < Access-Control-Allow-Credentials: true
      <
      {
      <Response Body>
      }
      * Connection #0 to host <hostalias> left intact
      * Closing connection 0
      

      في الحالة أعلاه، يزيد حجم سطر الاستجابة HTTP/1.1 200 1111…<trimmed>...11111111 عن 2 كيلوبايت، أي أنّه يحتوي على أكثر من حرفَين من أحرف ASCII K.

      إذا كنت تستخدم برنامجًا آخر، يمكنك مراجعة سجلات العميل ومحاولة معرفة حجم سطر الاستجابة الذي يتم إرساله إلى Apigee Edge.

    سجلّات "معالج الرسائل"

    للتحقق من صحة استخدام سجلات معالج الرسائل:

    إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك حينئذٍ استخدام سجلات "معالج الرسائل" للتحقق مما إذا كان حجم سطر الاستجابة قد تجاوز الحد المسموح به في Apigee Edge.

    1. حدِّد رقم تعريف الرسالة للطلب الذي تعذّر تنفيذه باستخدام رصد واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
    2. ابحث عن معرِّف الرسالة في سجلّ معالج الرسائل:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    3. ستجد أسطرًا من system.log مشابهة لما يلي:

      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1
      NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() :
      ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592
      useCount=1 bytesRead=0 bytesWritten=201 age=144ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048
      at <snipped>
      
      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1
      messageid:r-5110240-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
      

      يشير النص message = response line size exceeding 2,048 في رسالة الخطأ أعلاه إلى أنّ حجم سطر الاستجابة يتجاوز 2 كيلوبايت. لذلك، تعرض Apigee Edge الاستثناء وتعرض رمز الحالة 502 الذي يتضمّن رمز الخطأ protocol.http.TooBigline إلى تطبيقات العميل.

درجة الدقّة

إصلاح الحجم

الخيار #1 [إجراء يُنصح به]: إصلاح تطبيق الخادم الهدف/الخلفية لعدم إرسال أسطر استجابة بحجم أكبر من الحد المسموح به

  1. حلِّل سبب إرسال العميل المحدّد لسطر استجابة بحجم أكبر من الحد المسموح به على النحو المحدّد في الحدود.
  2. إذا لم يكن مرغوبًا فيه، عدِّل تطبيق الخادم الهدف/الخلفية لكي يرسل سطر استجابة بحجم أقل من الحد المسموح به.
  3. إذا كان هذا مناسبًا وكنت تريد إرسال سطر استجابة بحجم أكبر من الحد المسموح به، انتقِل إلى الخيارات التالية.

CwC

الخيار 2: استخدام سمة CwC لزيادة حد سطر الاستجابة

توفّر Apigee سمة CwC تسمح لها بزيادة الحد الأقصى لحجم سطر الاستجابة. للحصول على التفاصيل، راجع ضبط حد سطر الاستجابة على معالج الرسائل.

الحدود المسموح بها

تتوقّع Apigee ألا يرسل تطبيق العميل وخادم الخلفية طلبات/خطوط الاستجابة التي تكون أحجامها أكبر من الحد المسموح به كما هو موثق في الحد الأقصى لسطر الطلب/الاستجابة في حدود Apigee Edge.

  1. إذا كنت من مستخدمي Public Cloud، يكون الحدّ الأقصى لحجم الطلب وسطر الاستجابة كما هو موثَّق في حجم الطلب/الاستجابة-سطر في حدود Apigee Edge.
  2. إذا كنت من المستخدمين الخاصين على السحابة الإلكترونية ، قد يكون تم تعديل الحدّ الأقصى التلقائي لحجم الطلب وسطر الرد (على الرغم من أنّ ذلك لا يُنصَح به). يمكنك تحديد الحدّ الأقصى لحجم نص الاستجابة من خلال اتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الحالي.

كيف يمكن التحقّق من الحد الحالي؟

يوضّح هذا القسم كيفية التحقق من أنّه قد تم تعديل الخاصية HTTPResponse.line.limit بقيمة جديدة في معالجات الرسائل.

  1. في جهاز معالجة الرسائل، ابحث عن السمة HTTPResponse.line.limit في الدليل /opt/apigee/edge-message-processor/conf وتحقَّق لمعرفة القيمة التي تم ضبطها كما هو موضّح أدناه:
    grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
    
  2. في ما يلي نموذج النتيجة من الأمر أعلاه:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
    
  3. في مثال الإخراج أعلاه، لاحظ أنّه تم ضبط السمة HTTPResponse.line.limit على القيمة 2k في http.properties.

    يشير ذلك إلى أنّ الحدّ الأقصى لحجم سطر الاستجابة الذي تم ضبطه في Apigee لخدمات السحابة الإلكترونية الخاصة هو 2 كيلوبايت.

إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، يُرجى الانتقال إلى ضرورة جمع معلومات التشخيص.

ضرورة جمع معلومات التشخيص

اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:

إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:

  • اسم المؤسسة
  • اسم البيئة
  • اسم الخادم الوكيل لواجهة برمجة التطبيقات
  • إكمال أمر curl المُستخدَم لإعادة إظهار الخطأ 502
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات

إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:

  • رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
  • اسم المؤسسة
  • اسم البيئة
  • حزمة الخادم الوكيل لواجهة برمجة التطبيقات
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات التي تعذّر تنفيذها
  • أكمِل أمر curl المستخدَم لإعادة إظهار الخطأ 502.
  • سجلات وصول 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