أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
المشكلة
يتلقّى تطبيق العميل رمز حالة 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.
قبل أن نلقي نظرة على الأسباب المحتملة لهذا الخطأ، دعونا نفهم معنى Response-Line وكيفية التحقّق من حجمه.
التعرّف على Response-Line
تتألف استجابة HTTP النموذجية من ثلاثة أجزاء:
- Status-Line (يُشار إليها باسم Response-Line في Apigee)
- ( مجموعة من عناوين HTTP )
- [ Body ]
يتألف سطر الاستجابة من ثلاثة أجزاء: إصدار البروتوكول يليه رمز حالة رقمي وعبارة نصية مرتبطة كما هو موضّح أدناه:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
عندما يرسل تطبيق الخادم المستهدف/الخلفي استجابة HTTP، يمثّل السطر الأول الذي يتم إرساله سطر الاستجابة كما هو موضّح أعلاه. يلي ذلك العناوين ونص الاستجابة/الحِمل.تعرض لقطة الشاشة النموذجية التالية طلب curl نموذجيًا، وجزء الطلب وجزء الاستجابة (بالإضافة إلى سطر الاستجابة).
فهم حجم "سطر الرد"
في النموذج الذي تمت مناقشته أعلاه، يكون سطر البداية (السطر الأول) في الرد، والذي يُشار إليه أيضًا باسم Response-Line، على النحو التالي:
HTTP/1.1 200 OK
يبلغ حجم Response-Line هذا
~15 bytesلأنّه يحتوي على15 ASCII characters. بما أنّ هذا الإجراء يندرج ضمن الحدّ المسموح به في Apigee Edge، يتم إرسال الردّ إلى العميل بدون أي أخطاء من Apigee Edge.- وبالمثل، إذا نظرت إلى
faultstringفي رسالة الخطأ الموضّحة أعلاه، ستجد أنّها تحتوي على"response line size exceeding 2,048". يشير ذلك إلى أنّ Response-Line في استجابة HTTP التي أرسلها الخادم المستهدف/خادم الخلفية تجاوزت 2,048 بايت.
فهم Response-Line الكبير
وفقًا لتعريف Status-Line (المشار إليه هنا باسم Response-Line) وطلبات واستجابات HTTP النموذجية، سيكون الحجم أصغر بكثير من الحدّ التلقائي المحدّد البالغ 2 كيلوبايت في Apigee Edge، لذلك قد لا نصل إلى الحدّ. في ما يلي بعض السيناريوهات المحتملة التي قد تتجاوز فيها هذا الحدّ:
- الخادم المستهدف/الخلفي ليس نظام HTTP. قد تكون الاستجابة غير متوافقة مع HTTP.
- يواجه الخادم المستهدف/الخادم الخلفي مشاكل ويرسل Response-Line طويلاً كجزء من استجابة HTTP.
يمكنك الاطّلاع على مزيد من المعلومات حول هذا الموضوع في مقالة Getting error protocol.http.TooBigLine, "response line size exceeding 2,048.
في ما يلي الأسباب المحتملة لظهور هذا الخطأ:
| السبب | الوصف | تعليمات تحديد المشاكل وحلّها التي تنطبق على |
|---|---|---|
| حجم سطر الرد أكبر من الحدّ المسموح به | حجم Response-Line الذي يرسله الخادم المستهدف/خادم الخلفية كجزء من استجابة HTTP إلى Apigee Edge أكبر من الحد المسموح به في Apigee Edge | مستخدمو Edge Public Cloud وEdge Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات أو التقنيات التالية لتشخيص هذا الخطأ:
API Monitoring
لتشخيص الخطأ باستخدام "مراقبة واجهة برمجة التطبيقات"، اتّبِع الخطوات التالية:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge بصفتك مستخدمًا لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقِل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
- يمكنك اختيار فلتر الخادم الوكيل لتضييق نطاق رمز الخطأ.
- رسم بياني لرمز الخطأ مقابل الوقت
اختَر الخلية التي تحتوي على رمز الخطأ
protocol.http.TooBigLineكما هو موضح أدناه:
ستظهر لك معلومات حول رمز الخطأ
protocol.http.TooBigLineكما هو موضّح أدناه:
انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.
- من نافذة السجلّات، سجِّل التفاصيل التالية:
- رمز الحالة:
502 - مصدر الخطأ:
target - رمز الخطأ:
protocol.http.TooBigLine
- رمز الحالة:
- إذا كانت قيمة مصدر الخطأ هي
targetوكانت قيمة رمز الخطأ هيprotocol.http.TooBigLine، يشير ذلك إلى أنّ حجم سطر الاستجابة في استجابة HTTP من الخادم الخلفي/ الخادم المستهدف أكبر من الحدّ الأقصى المسموح به في Apigee Edge.
أداة التتبُّع
- فعِّل جلسة التتبُّع
وأي مما يلي:
- انتظِر إلى أن يظهر الخطأ
502 Bad Gateway. أو - إذا كان بإمكانك إعادة إظهار المشكلة، أجرِ طلب البيانات من واجهة برمجة التطبيقات وأعِد إظهار الخطأ
502 Bad Gateway.
- انتظِر إلى أن يظهر الخطأ
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص التتبُّع.
- تنقَّل بين مراحل التتبُّع المختلفة وحدِّد مكان حدوث الخطأ.
عادةً ما يظهر الخطأ في
flowinfoError بعد مرحلة إرسال الطلب إلى الخادم المستهدف مباشرةً، كما هو موضّح أدناه:
دوِّن قيم الخطأ من التتبُّع:
- الخطأ:
response line exceeding 2,048 - error.class:
com.apigee.errors.http.server.BadGateway
يشير ذلك إلى أنّ Apigee Edge (مكوّن "معالج الرسائل") يعرض الخطأ فور تلقّيه الردّ من خادم الخلفية بسبب تجاوز حجم سطر الردّ الحدّ المسموح به.
- الخطأ:
ستظهر لك رسالة الخطأ المُرسَلة إلى العميل في مرحلة الردّ المُرسَل إلى العميل كما هو موضّح أدناه:
- دوِّن قيم الخطأ من التتبُّع:
- الخطأ:
502 Bad Gateway. - محتوى الخطأ:
{"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
- الخطأ:
يمكنك أيضًا الانتقال إلى مرحلة AX (تسجيل بيانات الإحصاءات) في التتبُّع والنقر عليها للاطّلاع على تفاصيل الخطأ.
لاحظ قيمة ما يلي:
عناوين الطلبات القيمة X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetمحتوى الخطأ : النص الأساسي {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX، اتّبِع الخطوات التالية:
- إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الأساسية حول أخطاء HTTP
502. تحقَّق من سجلّات الوصول إلى NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logالمكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.
- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
502خلال مدة زمنية معيّنة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال غير ناجحة مع502. إذا عثرت على أي أخطاء
502تطابق قيمة X-Apigee-fault-codeprotocol.http.TooBigLine، حدِّد قيمة X-Apigee-fault-source.
يحتوي إدخال النموذج أعلاه من سجلّ الوصول إلى NGINX على القيم التالية لـ X- Apigee-fault-code وX-Apigee-fault-source:
عناوين الاستجابة القيمة X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source target
السبب: حجم سطر الرد أكبر من الحدّ المسموح به
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام أداة مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلّات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
- إذا كانت قيمة مصدر الخطأ هي
target، يشير ذلك إلى أنّ حجم سطر الاستجابة الذي أرسله تطبيق الخادم الخلفي/الخادم المستهدف إلى Apigee أكبر من الحدّ المسموح به في Apigee Edge. يمكنك التأكّد من أنّ حجم سطر الردّ قد تجاوز الحدّ المسموح به البالغ 2 كيلوبايت باستخدام إحدى الطريقتَين التاليتَين:
رسالة الخطأ
لإثبات صحة المعلومات باستخدام رسالة الخطأ، اتّبِع الخطوات التالية:
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تلقّيتها من Apigee Edge، يُرجى الرجوع إلى
faultstring.نموذج رسالة الخطأ:
"faultstring":"response line size exceeding 2,048"
يشير الرمز
faultstringأعلاه إلى أنّ حجم سطر الردّ تجاوز الحدّ المسموح به وهو 2 كيلوبايت.الطلب الفعلي
لإثبات صحة الرمز باستخدام الطلب الفعلي، اتّبِع الخطوات التالية:
إذا كان بإمكانك الوصول إلى الطلب الفعلي المقدَّم إلى تطبيق الخادم الخلفي/الهدف، اتّبِع الخطوات التالية:
- التحقّق من حجم Response-Line
- إذا تبيّن لك أنّ حجم معرّف الموارد المنتظم (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 كيلوبايت، أي أنّه يتضمّن أكثر من 2000 حرف ASCII.إذا كنت تستخدم برنامجًا آخر، يمكنك مراجعة سجلّات البرنامج ومحاولة معرفة حجم سطر الرد الذي يتم إرساله إلى Apigee Edge.
سجلّات "معالج الرسائل"
لإثبات صحة البيانات باستخدام سجلّات "معالج الرسائل"، اتّبِع الخطوات التالية:
إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات "معالج الرسائل" للتحقّق مما إذا كان حجم سطر الرد قد تجاوز الحدّ المسموح به في Apigee Edge.
- حدِّد معرّف الرسالة للطلب الذي تعذّر تنفيذه باستخدام "رصد واجهة برمجة التطبيقات" أو أداة "التتبُّع" أو سجلّات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
ابحث عن معرّف الرسالة في سجلّ "معالج الرسائل" (Message Processor) باتّباع الخطوات التالية:
/opt/apigee/var/log/edge-message-processor/logs/system.logستجد سطورًا من
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 [مقترَح]: إصلاح تطبيق الخادم المستهدف/الخلفي لكي لا يرسل أسطر استجابة بحجم أكبر من الحد المسموح به
- حلِّل سبب إرسال العميل المحدّد لسطر استجابة بحجم أكبر من الحدّ المسموح به كما هو محدّد في الحدود.
- إذا لم يكن ذلك مرغوبًا فيه، عدِّل تطبيق الخادم المستهدف/الخلفي بحيث يرسل سطر استجابة بحجم أقل من الحد المسموح به.
- إذا كان ذلك مرغوبًا وأردت إرسال سطر ردّ بحجم أكبر من الحد المسموح به، انتقِل إلى الخيارات التالية.
CwC
الخيار 2: استخدام السمة CwC لزيادة الحدّ الأقصى لعدد الأحرف في سطر الردّ
توفّر Apigee السمة CwC التي تتيح لها زيادة الحد الأقصى لحجم سطر الرد. للحصول على التفاصيل، يُرجى الاطّلاع على ضبط الحدّ الأقصى لعدد أسطر الردّ في "معالج الرسائل".
الحدود
تتوقّع Apigee ألا يرسل تطبيق العميل وخادم الخلفية أسطر طلب/ردّ تتجاوز أحجامها الحدّ المسموح به كما هو موضّح في الحدّ الأقصى لسطر الطلب/الردّ في حدود Apigee Edge.
- إذا كنت مستخدمًا للسحابة الإلكترونية العامة، يكون الحدّ الأقصى لحجم سطر الطلب والاستجابة هو ما هو موضّح في حجم سطر الطلب/الاستجابة ضمن حدود Apigee Edge.
- إذا كنت مستخدمًا في Private Cloud، فمن المحتمل أنّك عدّلت الحد الأقصى التلقائي لحجم سطر الطلب والاستجابة (على الرغم من أنّها ليست ممارسة يُنصح بها). يمكنك تحديد الحد الأقصى لحجم سطر الردّ باتّباع التعليمات الواردة في مقالة كيفية التحقّق من الحدّ الحالي.
كيف يمكن التحقّق من الحدّ الحالي؟
يوضّح هذا القسم كيفية التأكّد من تعديل السمة HTTPResponse.line.limit بقيمة جديدة في "معالجات الرسائل".
- على جهاز "معالج الرسائل"، ابحث عن السمة
HTTPResponse.line.limitفي الدليل/opt/apigee/edge-message-processor/confوتحقّق من القيمة التي تم ضبطها كما هو موضّح أدناه:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- في ما يلي نموذج للنتيجة من الأمر أعلاه:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
في مثال الناتج أعلاه، لاحظ أنّه تم ضبط السمة
HTTPResponse.line.limitبالقيمة2kفيhttp.properties.يشير ذلك إلى أنّ الحدّ الأقصى لحجم Response-Line الذي تم ضبطه في Apigee for Private Cloud هو 2 كيلوبايت.
إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، انتقِل إلى المعلومات التشخيصية التي يجب جمعها.
يجب جمع معلومات التشخيص
اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:
إذا كنت مستخدمًا لخدمة السحابة الإلكترونية العامة، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم خادم وكيل لواجهة برمجة التطبيقات
- أمر curl الكامل المُستخدَم لإعادة إنتاج الخطأ
502 - ملف التتبُّع لطلبات البيانات من واجهة برمجة التطبيقات
إذا كنت مستخدمًا في Private 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