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"
      }
   }
}

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

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

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

فهم خط الاستجابة

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

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

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

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

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

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

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

    HTTP/1.1 200 OK
    

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

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

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

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

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

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

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

السبب الوصف إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على
حجم سطر الاستجابة أكبر من الحد المسموح به حجم خط الاستجابة الذي أرسله الخادم الهدف/الخلفية كجزء من استجابة HTTP على Apigee Edge أكبر من الحد المسموح به في Apigee Edge مستخدمو Edge Public و Private Cloud

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

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

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

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

  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 لإجراء ما يلي: لتحديد المعلومات الأساسية حول أخطاء HTTP 502.
  2. تحقق من سجلات وصول NGINX:

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

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

  3. البحث لمعرفة ما إذا كانت هناك أي أخطاء 502 خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع 502
  4. في حال ظهور أي أخطاء 502 في رمز خطأ X-Apigee مطابقة قيمة protocol.http.TooBigLine، ثم تحديد قيمة X-Apigee-fault-source.

    يتضمن الإدخال النموذجي أعلاه من سجل وصول NGINX القيم التالية الخاصة بـ X- Apigee-يتوفر كود و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 كيلوبايت، أي أنّه يحتوي على لأكثر من حرفين بتنسيق K ASCII

      إذا كنت تستخدم برنامجًا آخر، يمكنك مراجعة سجلات العميل ومحاولة لمعرفة حجم خط الاستجابة الذي يتم إرساله إلى 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. إذا كنت مستخدمًا سحابيًا عامًا، يكون الحد الأقصى لـ "طلب" يتم توثيق حجم سطر الاستجابة لحجم سطر الطلب/الاستجابة في حدود 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 for Private يبلغ حجم السحابة الإلكترونية 2 كيلوبايت.

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

يجب جمع معلومات التشخيص

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

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

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

إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة، قدِّم المعلومات التالية:

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