أنت تعرض مستندات 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 النموذجية من ثلاثة أجزاء:
- خط الحالة (يُشار إليه باسم Response-Line في Apigee)
- ( مجموعة من عناوين HTTP )
- [ النص الأساسي ]
يتكون سطر الاستجابة من ثلاثة أجزاء: إصدار البروتوكول متبوعًا برقمي رمز الحالة والعبارة النصية المرتبطة به كما هو موضّح أدناه:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
عندما يتم إرسال استجابة HTTP بواسطة تطبيق الخادم الهدف/الخلفية، فإن السطر الأول الذي
إرسال يمثل سطر الاستجابة كما هو موضح أعلاه. ويتبع ذلك
العناوين ونص الاستجابة/حمولة البيانات.توضح لقطة الشاشة التالية نموذج
curl
وجزء الطلب وجزء Response (بالإضافة إلى
سطر الاستجابة).
فهم حجم سطر الاستجابة
في النموذج الذي تمت مناقشته أعلاه، يتضمن سطر البداية (السطر الأول) في الرد أيضًا في ما يلي خط الاستجابة:
HTTP/1.1 200 OK
يبلغ حجم سطر الاستجابة هذا
~15 bytes
نظرًا لأنه يحتوي على15 ASCII characters
. نظرًا لأن ذلك يقع في نطاق الحد المسموح به في Apigee Edge، يتم إرسال الرد إلى العميل بدون أي الأخطاء بواسطة Apigee Edge.- وبالمثل، إذا نظرت إلى
faultstring
في رسالة الخطأ المعروضة أعلاه، وتحتوي على"response line size exceeding 2,048"
. ويشير هذا إلى أن خط الاستجابة في استجابة HTTP الإرسال بواسطة الخادم الهدف/الخلفية تجاوز 2048 بايت.
فهم سطر الاستجابة الكبير
وفقًا لتعريف سطر الحالة (يُشار إليه هنا باسم خط الاستجابة) وطلبات HTTP النموذجية فإن الحجم سيكون أصغر بكثير من الحد التلقائي المحدد البالغ 2 كيلوبايت في Apigee Edge، لذلك قد لا الوصول إلى الحد الأقصى. ومع ذلك، إليك بعض السيناريوهات المحتملة التي يمكنك فيها تجاوز هذا الحد:
- الخادم الهدف/الخلفية ليس نظام HTTP. قد يستجيب باستخدام عنوان URL غير HTTP. الاستجابة.
- هناك مشكلات في الخادم الهدف/الخلفية ويرسل سطر استجابة طويلاً كجزء من بروتوكول HTTP الاستجابة.
مزيد من المعلومات عن هذا الموضوع في الحصول على خطأ Protocol.http.TooBigLine، "يتجاوز حجم سطر الاستجابة 2,048.
في ما يلي الأسباب المحتملة لحدوث الخطأ:
السبب | الوصف | إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على |
---|---|---|
حجم سطر الاستجابة أكبر من الحد المسموح به | حجم خط الاستجابة الذي أرسله الخادم الهدف/الخلفية كجزء من استجابة HTTP على Apigee Edge أكبر من الحد المسموح به في Apigee Edge | مستخدمو Edge Public و Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم 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
.
- انتظِر إلى أن يحدث الخطأ
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
- يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد موضع التعذُّر حدث.
سيظهر الخطأ عادةً في الخطأ
flowinfo
فقط بعد مرحلة تم إرسال الطلب إلى الخادم الهدف كما هو موضّح أدناه:دوِّن قيم الخطأ من عملية التتبُّع:
- الخطأ:
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 (بيانات "إحصاءات 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:
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لإجراء ما يلي:
لتحديد المعلومات الأساسية حول أخطاء HTTP
502
. تحقق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: يتم استبدال ORG وENV وPORT# بقيم فعلية.
- البحث لمعرفة ما إذا كانت هناك أي أخطاء
502
خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع502
في حال ظهور أي أخطاء
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
السبب: حجم سطر الاستجابة أكبر من الحد المسموح به
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام واجهة برمجة التطبيقات. سجلات الوصول للمراقبة أو أداة التتبع أو NGINX كما هو موضح في خطوات التشخيص الشائعة:
- إذا كانت قيمة المصدر الخطأ هي
target
، فهذا يشير إلى أنّ حجم سطر الاستجابة الذي يرسله تطبيق خادم الخلفية/الهدف إلى Apigee أكبر من الحد المسموح به في Apigee Edge. يمكنك التحقّق من أنّ حجم خط الاستجابة تجاوز الحدّ المسموح به البالغ 2 كيلوبايت باستخدام واحد من الطرق التالية:
رسالة الخطأ
للتحقق باستخدام رسالة الخطأ:
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تلقّيتها من Apigee Edge، يُرجى الرجوع إلى
faultstring
نموذج لرسالة خطأ:
"faultstring":"response line size exceeding 2,048"
تشير
faultstring
أعلاه إلى أنّ حجم "خط الاستجابة" تجاوز الحجم المسموح به. الحد الأقصى المسموح به: 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
- تحديد معرّف الرسالة للطلب الذي تعذّر إكماله باستخدام واجهة برمجة التطبيقات مراقبة، وأداة التتبع، أو سجلات الوصول إلى NGINX كما هو موضح في خطوات التشخيص الشائعة.
ابحث عن معرِّف الرسالة في سجل معالج الرسائل:
/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:
- إذا كنت مستخدمًا خاصًا على السحابة الإلكترونية من المحتمل أنّك عدّلت الحد الأقصى التلقائي حد حجم الطلب وخط الاستجابة (على الرغم من أنه ليس ممارسة موصى بها). يمكنك تحديد الحد الأقصى لحجم خط الاستجابة باتباع التعليمات الواردة في كيفية التحقّق من الحدّ الأقصى الحالي
كيف يمكن التحقّق من الحدّ الأقصى الحالي؟
يوضِّح هذا القسم كيفية إثبات أنّ الموقع الإلكتروني 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
.يشير ذلك إلى أنّ الحدّ الأقصى لحجم سطر الاستجابة الذي تم ضبطه في 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