
أنت تتصفح موقعًا إلكترونيًا، وبدلاً من تحميل الصفحة، تحدق في رسالة تقول "504 Gateway Timeout". تدور أيقونة التحميل لما يبدو وكأنه أبدية. تضغط على زر التحديث، لكن نفس الخطأ يظهر. الموقع ليس "معطلاً" من الناحية الفنية، لكن شيئًا ما في بنيته التحتية قد توقف عن انتظار الاستجابة.
تحدث هذه التجربة المحبطة بسبب أحد أكثر الأخطاء شيوعًا من جانب الخادم على الويب الحديث: رمز حالة 504 Gateway Timeout.
على عكس أخطاء العميل مثل 404 Not Found، والتي عادة ما تكون "خطأ" المستخدم، أو أخطاء الخادم مثل 500 Internal Server Error، والتي تحدث داخل التطبيق، فإن الخطأ 504 هو عطل في الاتصال بين الخوادم. إنه المعادل الرقمي لوسيط يرفع يديه قائلاً: "لقد انتظرت طويلاً للشخص الذي تريد التحدث إليه بالفعل، وأنا أستسلم."
ولكن ما هو بالضبط رمز حالة HTTP 504: Gateway Timeout، ولماذا يحدث؟ والأهم من ذلك، كيف يمكنك إصلاحه أو منعه من الظهور في تطبيقك أو واجهة برمجة التطبيقات (API) أو موقعك الإلكتروني؟
إذا كنت مطورًا، أو مسؤول نظام، أو مجرد مستخدم ويب فضولي، فإن فهم أسباب خطأ 504 وكيفية إصلاحه أمر ذو قيمة لا تصدق.
سنتناول كل ذلك بالتفصيل، بدءًا مما يعنيه هذا الرمز، إلى الأسباب الشائعة، وصولاً إلى الحلول العملية.
الآن، دعنا نستكشف ما يحدث خلف الكواليس عندما تواجه خطأ 504 Gateway Timeout.
هندسة الويب الحديثة: لا يوجد خادم واحد فقط
لفهم 504، نحتاج إلى فهم كيفية بناء مواقع الويب والتطبيقات الحديثة. عدد قليل جدًا من التطبيقات تعمل على خادم واحد بعد الآن. تستخدم معظمها بنية متعددة الطبقات تبدو كالتالي:
- متصفح المستخدم: يقوم بالطلب الأولي.
- موازن التحميل / الوكيل العكسي (Load Balancer / Reverse Proxy): يوزع حركة المرور على عدة خوادم خلفية (مثل NGINX, HAProxy, AWS ALB).
- خوادم الويب/التطبيقات: تشغل رمز التطبيق الفعلي (مثل Node.js, Python/Django, PHP).
- الخدمات الخلفية / واجهات برمجة التطبيقات (APIs): تتعامل مع مهام محددة مثل المصادقة، المدفوعات، أو معالجة البيانات (غالبًا ما تكون خدمات مصغرة).
- قاعدة البيانات / ذاكرة التخزين المؤقت (Database / Cache): تخزن وتسترجع البيانات.
يحدث الخطأ 504 عادةً بين الخطوتين 2 و 3، أو بين الخطوتين 3 و 4. يشير "البوابة" (gateway) في "Gateway Timeout" إلى الخادم الذي يعمل كوسيط - موازن التحميل أو الوكيل العكسي.
ماذا يعني رمز HTTP 504 Gateway Timeout بالفعل؟
يشير رمز الحالة 504 Gateway Timeout إلى أن خادمًا يعمل كبوابة أو وكيل لم يتلق استجابة في الوقت المناسب من خادم أمامي (upstream server) كان يحتاج إلى الوصول إليه لإكمال الطلب.
بشكل أبسط: "أنا (البوابة) طلبت المساعدة من خادم آخر، لكن هذا الخادم استغرق وقتًا طويلاً للرد عليّ، لذلك أنا أستسلم وأخبرك أن هناك مشكلة."
عادة ما تكون استجابة 504 نموذجية ضئيلة جدًا:
HTTP/1.1 504 Gateway TimeoutContent-Type: text/htmlContent-Length: 125
<html><head><title>504 Gateway Timeout</title></head><body><center><h1>504 Gateway Timeout</h1></center></body></html>
على عكس بعض الأخطاء الأخرى، عادةً لا يوجد نص مخصص لأن البوابة نفسها غالبًا ما تكون جزءًا بسيطًا من البنية التحتية لا تعرف كيفية إنشاء صفحات أخطاء فاخرة.
فكر في الأمر على هذا النحو:
تطلب من صديقك التحقق مما إذا كان المطعم مفتوحًا. يتصل صديقك بالمطعم، لكن لا أحد يجيب. بعد انتظار بعض الوقت، يخبرك صديقك:
“عذرًا، لم يجيبوا – لقد تلقيت انتهاء مهلة.”
هذا بالضبط ما يحدث مع 504 Gateway Timeout.
تحاول البوابة (عادةً وكيل عكسي مثل NGINX أو موازن تحميل) الاتصال بخادم أمامي (مثل تطبيق الويب أو قاعدة البيانات الخاصة بك). إذا استغرق هذا الخادم الأمامي وقتًا طويلاً للرد، فإن البوابة تلقي خطأ 504 وتلغي الطلب.
سلسلة المسؤولية: كيف يحدث خطأ 504
دعنا ننتقل إلى مثال ملموس باستخدام بنية تجارة إلكترونية شائعة.
1. الطلب: يبحث المستخدم عن منتج. يرسل متصفحه طلبًا إلى https://shop.example.com/search?q=laptop.
2. دور موازن التحميل: يصل الطلب أولاً إلى موازن التحميل (البوابة). مهمة موازن التحميل هي إعادة توجيه هذا الطلب إلى أحد خوادم التطبيقات المتاحة العديدة. لدى موازن التحميل إعداد مهلة، على سبيل المثال، 30 ثانية.
3. مهمة خادم التطبيق: يتلقى خادم التطبيق الطلب. لإنجازه، يحتاج إلى استدعاء خدمتين أخريين:
- يستدعي خدمة البحث للحصول على نتائج المنتجات.
- يستدعي خدمة ملف تعريف المستخدم للحصول على توصيات مخصصة.
4. المشكلة: تعاني خدمة ملف تعريف المستخدم من حمل عالٍ أو تعثر في قاعدة البيانات. تتعثر ولا تستجيب.
5. انتهاء المهلة: ينتظر خادم التطبيق... 25 ثانية... 28 ثانية... 29 ثانية... موازن التحميل، الذي لا يزال ينتظر استجابة من خادم التطبيق، يصل إلى حد المهلة البالغ 30 ثانية.
6. استجابة 504: يستسلم موازن التحميل. لا يمكنه إرجاع نتائج البحث لأنه لم يتلقها أبدًا من خادم التطبيق. لذلك فإنه يعيد 504 Gateway Timeout إلى متصفح المستخدم.
الرؤية الحاسمة هنا هي أن خادم التطبيق قد يكون لا يزال يعمل، محاولًا الحصول على استجابة من خدمة ملف تعريف المستخدم. لكن موازن التحميل قد ألغى الطلب بالفعل من وجهة نظره.
متى تتوقع خطأ 504
تكون أخطاء 504 أكثر شيوعًا في السيناريوهات التالية:
- يعتمد تطبيقك على خدمات أو خدمات مصغرة متعددة تابعة للجهة الخلفية.
- تكون الخدمة الأمامية غير متاحة مؤقتًا بسبب الصيانة أو الحمل الزائد.
- تكون واجهة برمجة تطبيقات (API) أو قاعدة بيانات تابعة لجهة خارجية بطيئة أو غير مستجيبة.
- تعاني مسارات الشبكة من زمن انتقال عابر أو فقدان حزم البيانات.
نظرًا لأن خطأ 504 عادةً ما يكون مؤقتًا، غالبًا ما تلعب استراتيجيات إعادة المحاولة وقواطع الدائرة دورًا كجزء من خطة مرونة قوية.
متى قد يكون خطأ 504 مقبولاً
هناك حالات مشروعة حيث يكون انتهاء مهلة البوابة متوقعًا أو مقبولًا:
- فترات الصيانة حيث يتم إبطاء الخدمات الأمامية أو إيقافها عن عمد.
- ارتفاعات مؤقتة في حركة المرور لا تستطيع الخدمات الأمامية استيعابها على الفور.
- مشكلات التبعية المتقطعة التي يتم التراجع عنها أو التخفيف من حدتها.
في هذه الحالات، يساعد التواصل الشفاف وسياسات إعادة المحاولة المصممة جيدًا في تقليل تأثير ذلك على المستخدم.
مثال واقعي لخطأ 504 Gateway Timeout
تخيل أنك تبني موقعًا للتجارة الإلكترونية. تتطلب عملية الدفع الخاصة بك استدعاء العديد من واجهات برمجة التطبيقات: الدفع، المخزون، الشحن، ومصادقة المستخدم.
الآن، إذا تباطأت واجهة برمجة تطبيقات الدفع فجأة أو أصبحت غير متاحة، فإن خادمك (الذي يعمل كبوابة) ينتظر استجابة. إذا لم يتلق استجابة خلال المهلة المحددة (على سبيل المثال، 30 ثانية)، فإنه يرمي:
504 Gateway Timeout
بالنسبة للمستخدمين، يبدو أن موقع الويب الخاص بك معطل. ولكن من الناحية الفنية، تكمن المشكلة في سلسلة الاتصال بين الخدمات.
504 مقابل أخطاء 5xx الأخرى: معرفة الفرق
من السهل الخلط بين أخطاء الخادم، لكن كل منها يروي قصة مختلفة عما حدث خطأ.
504 Gateway Timeout مقابل 502 Bad Gateway:
504تعني "استغرق الخادم الأمامي وقتًا طويلاً للرد." (مشكلة انتهاء المهلة)502تعني "أرسل لي الخادم الأمامي شيئًا غير صالح أو غير مرغوب فيه." (كانت الاستجابة مشوهة، أو تم رفض الاتصال بالكامل).
504 Gateway Timeout مقابل 500 Internal Server Error:
- يحدث
504على مستوى البنية التحتية بين الخوادم. - يحدث
500على مستوى التطبيق داخل التعليمات البرمجية الخاصة بك (على سبيل المثال، استثناء غير معالج في كود Python أو JavaScript الخاص بك).
504 Gateway Timeout مقابل 408 Request Timeout:
504هو انتهاء مهلة من جانب الخادم: انتهت مهلة البوابة في انتظار خادم آخر.408هو انتهاء مهلة من جانب العميل: انتهت مهلة الخادم في انتظار العميل لإرسال الطلب كاملاً.
الأسباب الشائعة لخطأ 504 Gateway Timeout
فهم الأسباب هو الخطوة الأولى نحو الوقاية والحل.
1. خوادم خلفية مثقلة
هذا هو السبب الأكثر شيوعًا. قد تكون خوادم التطبيقات الخاصة بك تحت حمل ثقيل، مما يتسبب في استجابتها ببطء أو عدم استجابتها على الإطلاق. قد يكون هذا بسبب:
- ارتفاع مفاجئ في حركة المرور
- استعلامات قاعدة بيانات غير فعالة
- موارد خادم غير كافية (وحدة المعالجة المركزية، ذاكرة الوصول العشوائي)
2. مشاكل الشبكة
يمكن أن تتسبب مشاكل الاتصال بين بوابتك وخوادمك الخلفية في حدوث انتهاء مهلة.
- ازدحام الشبكة
- قواعد جدار الحماية التي تمنع حركة المرور
- مشاكل في حل أسماء النطاقات (DNS)
3. العمليات كثيفة الموارد
تستغرق بعض العمليات وقتًا طويلاً بطبيعتها:
- إنشاء تقارير معقدة
- معالجة تحميلات الملفات الكبيرة
- تشغيل استدلال التعلم الآلي
إذا تجاوزت هذه العمليات حد المهلة الزمني لبوابتك، فستتسبب في أخطاء 504.
4. تبعيات الخدمة
إذا كان تطبيقك يعتمد على واجهات برمجة تطبيقات خارجية أو خدمات مصغرة بطيئة أو معطلة، فسوف ينتظر خادم التطبيق الخاص بك هذه الخدمات، مما قد يؤدي إلى انتهاء مهلة البوابة.
5. مهلات زمنية خاطئة التكوين
في بعض الأحيان، تكون المهلات الزمنية مضبوطة بشكل منخفض جدًا. قد يكون لدى البوابة مهلة 10 ثوانٍ، ولكن عملية معقدة مشروعة قد تستغرق 15 ثانية.
اختبار وتصحيح أخطاء واجهات برمجة التطبيقات باستخدام Apidog

قد يكون تحديد السبب الجذري لأخطاء 504 المتقطعة أشبه بالبحث عن إبرة في كومة قش. عند تصحيح أخطاء 504، غالبًا ما يواجه المطورون صعوبة في الرؤية – تحديد الخادم أو الخدمة أو الطلب المسؤول. يوفر Apidog العديد من الميزات التي تجعل هذا أسهل بكثير.
مع Apidog، يمكنك:
- اختبار الأداء: استخدم Apidog لإرسال طلبات متزامنة متعددة إلى واجهة برمجة التطبيقات الخاصة بك وقياس أوقات الاستجابة. يمكن أن يساعدك هذا في تحديد ما إذا كانت بعض نقاط النهاية بطيئة تحت الحمل، مما قد يؤدي إلى أخطاء 504.
- إعداد المراقبة: أنشئ أدوات مراقبة آلية في Apidog تتحقق بشكل دوري من نقاط النهاية الخاصة بك. إذا استغرق الطلب وقتًا أطول من الحد الذي تحدده (على سبيل المثال، 25 ثانية عندما تكون مهلة البوابة 30)، يمكن لـ Apidog تنبيهك قبل أن يبدأ المستخدمون في رؤية أخطاء 504.
- اختبار تبعيات الخدمة: إذا كانت واجهة برمجة التطبيقات الخاصة بك تستدعي خدمات أخرى، فاستخدم Apidog لاختبار هذه التبعيات بشكل مستقل. يساعدك هذا في عزل ما إذا كانت المشكلة في تطبيقك أو في خدمة تابعة للجهة الخلفية.
- محاكاة الاستجابات البطيئة: استخدم خوادم Apidog الوهمية لمحاكاة استجابات الواجهة الخلفية البطيئة. يتيح لك هذا اختبار كيفية تعامل بوابتك وتطبيقك مع المهلات الزمنية دون إثقال نظام الإنتاج الخاص بك فعليًا.
- توثيق توقعات المهلة: استخدم ميزات توثيق Apidog لملاحظة نقاط النهاية التي يُتوقع أن تكون طويلة الأمد، مما يساعد فريقك على تعيين قيم مهلة مناسبة في البنية التحتية.
ونعم، يمكنك تنزيل Apidog مجانًا. إنه ليس مجرد بديل آخر لـ Postman، بل هو نظام بيئي كامل لتصميم واجهة برمجة التطبيقات (API) واختبارها ومراقبة أدائها.
استكشاف أخطاء 504 وإصلاحها
الخطوات الفورية:
- التحقق من موارد الخادم: انظر إلى وحدة المعالجة المركزية (CPU) والذاكرة (memory) وعمليات الإدخال/الإخراج للقرص (disk I/O) على خوادم التطبيق الخاصة بك.
- مراجعة السجلات: تحقق من سجلات التطبيق والبوابة الخاصة بك بحثًا عن الأخطاء التي حدثت وقت ظهور أخطاء 504.
- التحقق من التبعيات الخارجية: تأكد من أن أي واجهات برمجة تطبيقات (APIs) أو خدمات تابعة لجهات خارجية يستخدمها تطبيقك تعمل بشكل سليم.
الحلول طويلة الأمد:
- تحسين أداء التطبيق: تحديد وإصلاح استعلامات قاعدة البيانات البطيئة، وتحسين الكود، وتطبيق التخزين المؤقت (caching).
- ضبط إعدادات المهلة: زيادة قيم المهلة على بوابتك إذا كانت لديك عمليات مشروعة طويلة الأمد.
- تطبيق قواطع الدائرة (Circuit Breakers): استخدام أنماط توقف استدعاء خدمة فاشلة بعد عدة إخفاقات، مما يمنع انتهاء المهلة المتتالية.
- توسيع نطاق البنية التحتية الخاصة بك: إضافة المزيد من خوادم التطبيقات أو الترقية إلى مثيلات أقوى.
- تنفيذ المعالجة غير المتزامنة: للمهام طويلة الأمد، استخدم قائمة انتظار مهام (مثل Redis Queue أو AWS SQS) وارجع فورًا برمز
202 Accepted، ثم أبلغ المستخدم عند اكتمال المهمة.
أفضل الممارسات لمنع أخطاء 504 على المدى الطويل
دعنا نختتم الجزء التقني ببعض الاستراتيجيات الوقائية التي ستوفر عليك الكثير من المتاعب في المستقبل.
1. استخدم التخزين المؤقت كلما أمكن
يقلل التخزين المؤقت للاستجابات (على مستوى التطبيق، CDN، أو الوكيل) من حمل الواجهة الخلفية ووقت الاستجابة.
2. تحسين استعلامات قاعدة البيانات
غالبًا ما تتسبب استعلامات SQL غير المحسنة بشكل جيد في اختناقات في الواجهة الخلفية – قم بضبط الفهارس وتجنب الربط الكبير.
3. مراقبة صحة واجهة برمجة التطبيقات (API)
استخدم أدوات مثل Apidog أو Datadog أو Pingdom لمراقبة توفر وأداء واجهة برمجة التطبيقات بشكل مستمر.
4. تطبيق قواطع الدائرة
أضف نمط قاطع الدائرة في واجهة برمجة التطبيقات الخاصة بك لإيقاف الطلبات مؤقتًا إلى الخدمات الفاشلة.
5. التوسع التلقائي
استخدم التوسع التلقائي في البيئات السحابية مثل AWS أو Azure للتعامل مع الارتفاعات المفاجئة في حركة المرور.
6. تسجيل كل شيء
يساعدك التسجيل المركزي على اكتشاف نقاط النهاية البطيئة قبل أن تتحول إلى انقطاعات كاملة.
الجانب البشري: التواصل أثناء الانقطاعات
التواصل الشفاف أثناء انتهاء مهلة البوابة أمر مهم. أبلغ المستخدمين عندما تواجه الخدمة تأخيرات، وقدم وقت استعادة متوقعًا إن أمكن، وقدم تحديثات الحالة. تقلل خطة الاستجابة للحوادث المدارة جيدًا من إحباط المستخدم وتبني الثقة.
الأنماط المعمارية للتخفيف من أخطاء البوابات
- شبكة الخدمات مع سياسات انتهاء المهلة: مركزية تكوينات انتهاء المهلة ومعالجة الفشل.
- مهلات لكل قفزة: تكوين مهلات مناسبة عند كل قفزة في سلسلة الطلبات لمنع الانتظار الطويل.
- الضغط الخلفي والانتظار في الطابور: تخزين الطلبات مؤقتًا أثناء الازدحام لتخفيف الارتفاعات المفاجئة.
- عمليات النشر الكناري: طرح التغييرات تدريجياً لتقليل مخاطر التأخيرات الواسعة النطاق في الخدمات الأمامية.
- الخدمات الأمامية الزائدة عن الحاجة: توفير خدمات بديلة لتقليل نقاط الفشل الفردية.
تساعدك هذه الأنماط على احتواء تأثير التأخيرات في الخدمات الأمامية والحفاظ على تجربة المستخدم سليمة.
الخلاصة: ثمن الأنظمة الموزعة
رمز حالة HTTP 504 Gateway Timeout هو نتيجة طبيعية لهندسة الويب الحديثة والموزعة. على الرغم من أنه محبط للمستخدمين، إلا أنه يخدم غرضًا مهمًا: منع الطلبات من التعليق إلى أجل غير مسمى وضمان بقاء النظام الكلي مستجيبًا.
إن فهم أن خطأ 504 هو في الأساس مشكلة اتصال بين الخوادم - وليس بالضرورة خطأ في التطبيق - هو المفتاح لتصحيح الأخطاء بفعالية. من خلال مراقبة الأداء، وتحسين العمليات البطيئة، وتكوين البنية التحتية الخاصة بك بشكل صحيح، يمكنك تقليل هذه الأخطاء وتوفير تجربة أفضل لمستخدميك.
في المرة القادمة التي ترى فيها خطأ 504، ستعرف أنها قصة خادم بوابة صبور اضطر في النهاية إلى التوقف عن الانتظار. وعندما تقوم ببناء الأنظمة التي تحتاج إلى تجنب هذه المهلات، يمكن أن تكون أداة مثل Apidog أفضل حليف لك في تحديد اختناقات الأداء وضمان استجابة واجهات برمجة التطبيقات الخاصة بك في الوقت المناسب.
