دليل واستكشاف أخطاء منفذ المضيف المحلي 127.0.0.1:57573
شغّل سكربت Flask صغيرًا. الصق الرابط `http://127.0.0.1:57573` في المتصفح. ستكون هناك نتيجتان: إما أن يتم تحميل الصفحة، أو أن يضيء مؤشر الطرفية باللون الأحمر مع ظهور رسالة `ECONNREFUSED` ويظهر المتصفح رمز انقطاع الاتصال.
لا يُعدّ أيٌّ من هذين الأمرين غامضًا. يتألف العنوان من جزأين: 127.0.0.1 هو عنوان IPv4 المحلي، و57573 هو منفذ اختاره نظام التشغيل عشوائيًا تقريبًا من مجموعة المنافذ المتاحة. يكشف هذا الدليل عن كلا الجزأين. سنستعرض سبب استخدام العديد من الخوادم المحلية لمنفذ كهذا، ونتناول بالتفصيل ستة أخطاء شائعة قد تحدث قبل فتح الاتصال. بنهاية هذا الدليل، ستكون قادرًا على ربط خدمة بالواجهة الصحيحة، ومعرفة ما يستمع فعليًا إلى المنفذ، وحلّ تعارضات المنافذ وحظر جدار الحماية، وتأمين الخادم المحلي قبل ربطه بالإنترنت العام.
ماذا تعني العبارة 127.0.0.1:57573 بلغة بسيطة؟
ثلاثة أجزاء. عنوان IP 127.0.0.1 هو عنوان IPv4 المحلي. النقطتان الرأسيتان تعنيان "وعلى هذا المنفذ". 57573 هو المنفذ نفسه، ويقع ضمن نطاق الأرقام العالية التي لا تمتلكها أي خدمة منتشرة على نطاق واسع بشكل دائم.
اتصل به، وسيقوم نظام التشغيل بتوجيه الحزمة مباشرةً إلى جهازك المحلي. لا حاجة لبطاقة شبكة، ولا لمحول، ولا لرحلة ذهاب وإياب عبر أي سلك. يسمح هذا العنوان لعملية ما بالتواصل مع عمليات أخرى على نفس المضيف دون تعريض أي شيء لشبكة خارجية. هذه هي الفكرة الأساسية لتقنية الاسترجاع الحلقي.
يُعدّ هذا الحجز أقدم من معظم المطورين الذين يستخدمونه. ففي عام 1989، حجبت RFC 1122، القسم 3.2.1.3، نطاق العناوين 127.0.0.0/8 بالكامل، أي جميع عناوينها البالغ عددها 16,777,216 عنوانًا، نهائيًا. ويُصنّف سجل عناوين IPv4 للأغراض الخاصة التابع لهيئة IANA، والذي تُنظّمه RFC 6890 ويتم تحديثه بواسطة RFC 8190، هذا النطاق نفسه على أنه غير قابل لإعادة التوجيه، وغير قابل للتوجيه عالميًا، ومحجوز بواسطة البروتوكول. أي عملية تستمع إلى 127.0.0.1 لا ترى سوى حركة البيانات الواردة من مضيفها الخاص. أما أي بيانات واردة من خارج هذا النطاق وتدّعي أنها تستخدم عنوان مصدر 127، فيتم تجاهلها تلقائيًا. ويُطلق خبراء الشبكات على هذه الحزم اسم "البيانات الغريبة".
يُعدّ اسم "Localhost" مجرد اسم مضيف سهل الاستخدام لنفس الغرض. افتح الملف `/etc/hosts` على نظامي macOS أو Linux، أو الملف `C:\Windows\System32\drivers\etc\hosts` على نظام Windows، وستجد هذا السطر في أعلى الملف: `127.0.0.1 localhost`.

عنوان الاسترجاع: كيف يتم توجيه localhost إلى جهازك
127.0.0.1 هو العنوان الأشهر، ولكنه ليس الوحيد. فمجموعة عناوين 127.0.0.0/8 بأكملها، والتي تضم أكثر من ستة عشر مليون عنوان، تُعيد توجيه المستخدم. يمكنك اختبار الاتصال بالعنوان 127.42.42.42 على نظام لينكس، وهو يعمل. يستخدم معظمنا 127.0.0.1 بشكل تلقائي، ولكن المجموعة الأوسع تُصبح مهمة عند قراءة قواعد iptables أو تدقيق صورة نظام مُحصّنة. (هناك مسودة مطروحة في IETF منذ سنوات تقترح استعادة معظم نطاق 127/8 للاستخدام أحادي البث، ولكنها لم تُعتمد).
جانب IPv6 أبسط. عنوان واحد فقط، `::1`، مُعرّف في RFC 4291. لا يوجد نطاق /8. لا يوجد نطاق احتياطي. إذا كانت خدمتك مرتبطة فقط بـ `::1`، فلن تحصل أي محاولة للوصول إلى 127.0.0.1 على أي استجابة، والعكس صحيح. على نظام Linux حديث ونظام macOS، يُشير `localhost` إلى كلا العنوانين، لذا عادةً ما يُحاول المتصفح الوصول إلى `::1` أولًا، ثم يفشل، ثم يعود إلى `::1`. ستلاحظ هذا التأخير البسيط، ولكنه ملحوظ. ثبّت عنوانًا واحدًا داخل البرنامج النصي، وسيختفي هذا الغموض.
تتولى نواة النظام معالجة حزم البيانات المحلية (loopback) عبر واجهة افتراضية. يُطلق عليها في لينكس اسم `lo`، وفي ماك أو إس اسم `lo0`. يُمكنك عرضها باستخدام الأمرَين `ip link show` و`ifconfig lo0`. يُراقب جدار الحماية نفسه الذي يُراقب جميع البيانات الأخرى حزم البيانات المحلية، ولهذا السبب قد يؤدي استخدام إعدادات جدار حماية صارمة إلى تعطيل حركة البيانات المحلية. سنتناول هذا الموضوع بمزيد من التفصيل في الأقسام اللاحقة.
خلاصة القول في مجال التطوير: يُعدّ عنوان IP 127.0.0.1 الواجهة الأكثر أمانًا للاتصال. لا يمكن لأي شيء خارج جهازك الوصول إليه. تمتلك الحاويات والآلات الافتراضية عناوين IP خاصة بها، منفصلة عن عنوان IP الخاص بالمضيف، وهذا ما يُربك معظم المطورين في المرة الأولى التي يتوقعون فيها أن يصل عنوان IP 127.0.0.1 داخل حاوية Docker إلى خدمة على جهاز الكمبيوتر المحمول.
لماذا المنفذ 57573؟ شرح نطاقات أرقام منافذ IANA
المنفذ 57573 ليس مميزًا. لقد استحوذ عليه نظام التشغيل أو إطار العمل لأنه كان متاحًا. لفهم سبب ظهور هذا الرقم الكبير بشكل متكرر، يجب النظر في كيفية تقسيم هيئة IANA لمساحة المنافذ ذات 16 بت. يُمكن الاطلاع على آلية عمل هذه الطريقة في RFC 6335 وسجل أرقام منافذ بروتوكولات النقل وأسماء الخدمات التابع لهيئة IANA.
| يتراوح | اسم IANA | أمثلة |
|---|---|---|
| 0–1023 | النظام / المنافذ المعروفة | 22 SSH، 80 HTTP، 443 HTTPS، 53 DNS |
| 1024–49151 | منافذ المستخدم / المنافذ المسجلة | 3306 MySQL، 5432 Postgres، 8080 alt-HTTP |
| 49152–65535 | ديناميكي / خاص / مؤقت | يتم تعيينها تلقائيًا بواسطة نظام التشغيل، ولا يتم تسجيلها أبدًا لدى هيئة الأرقام المخصصة للأرقام المخصصة (IANA). |
النطاق 49152–65535 هو النطاق الذي توصي به هيئة IANA للمنافذ المؤقتة. غالبًا ما تختلف أنظمة التشغيل الفعلية عن ذلك. يأتي نظام لينكس افتراضيًا بنطاق 32768–60999 (باستخدام الأمر `sysctl net.ipv4.ip_local_port_range`). يستخدم نظام ويندوز منذ فيستا النطاق 49152–65535. أما نظام XP، فقد استخدم النطاق 1025–5000، وهو نطاق ضيق جدًا كان يستهلك المنافذ بشكل كبير تحت الضغط، مما تسبب في انقطاعات شهيرة. يلتزم نظام macOS بمواصفات IANA. يتوافق المنفذ 57573 مع جميع المنافذ الافتراضية الحديثة. هذه الحقيقة وحدها تفسر سبب ظهوره المتكرر في سجلات المطورين.
عندما يُنفّذ الكود الخاص بك الأمر `app.run(port=0)` في Flask، أو `server.listen(0)` في Node، يختار نظام التشغيل أي منفذ متاح من نطاقه الديناميكي المحلي. على حاسوب محمول يعمل بنظام Linux، يتراوح هذا النطاق بين 32768 و60999. يقع المنفذ 57573 ضمن هذا النطاق. وينطبق الأمر نفسه على الأدوات التي تُعيّن المنافذ تلقائيًا: Vite (التي اعتمدت عمدًا على المنفذ 127.0.0.1 افتراضيًا في عام 2022 لمنع المطورين من تسريب الخوادم عبر شبكات Wi-Fi العامة)، وwebpack-dev-server، وVS Code Live Server، وJupyter، وSelenium driver bridges، وPlaywright، ومصحح أخطاء Node `--inspect=0`. تطلب هذه الأدوات من النواة منفذًا عاليًا متاحًا وتستخدم أي منفذ تحصل عليه.
لذا، إذا ظهر المنفذ 57573 في تتبع الأخطاء، فإن الإجابة المباشرة غالبًا ما تكون صحيحة. إما أن عملية ما ربطت هذا المنفذ عمدًا، أو أن إطار عمل طلب "أي منفذ متاح" فاختارت النواة هذا المنفذ. لا يوجد أي خطأ في رقم المنفذ 57573 تحديدًا. تتعامل معظم أطر الاختبار والتطوير المحلية مع النطاق العالي بأكمله كبيئة آمنة ومعزولة، لأنه لا توجد خدمة عامة تعتمد عليه.
ربط خادم بـ 127.0.0.1 مقابل 0.0.0.0 مقابل ::1
اختر هدف الربط الخاطئ وستواجه أخطاءً غريبة. إليك ثلاثة تعريفات يجب تذكرها.
العنوان 127.0.0.1 مخصص فقط لعنوان IPv4 المحلي. يمكن الوصول إليه من نفس الجهاز عبر أي عميل IPv4. لا يمكن الوصول إليه من خارج الشبكة.
::1 يربط عنوان IPv6 المحلي فقط. نفس الفكرة، ولكن فقط عملاء IPv6 على نفس الجهاز.
يربط العنوان 0.0.0.0 جميع واجهات IPv4 على الجهاز. يمكن لأي شخص يتصل بجهازك الوصول إليه، بما في ذلك الهواتف المتصلة بنفس شبكة Wi-Fi، وأجهزة VPN، والإنترنت العام (مع إعادة توجيه المنافذ).
للاستخدام اليومي في التطوير، استخدم عنوان IP 127.0.0.1. فهو الواجهة الوحيدة التي لا تشكل فيها جدران الحماية وسياسات VPN والتعرض غير المقصود أي مشكلة. تستخدمه كل من Flask وFastAPI وExpress افتراضيًا.
بحسب تجربتي، يتجه المستخدمون إلى استخدام 0.0.0.0 من ثلاثة مصادر مختلفة: الاختبار على الهاتف عبر الشبكة المحلية، والاختبار داخل حاوية Docker، واتباع دليل تعليمي قام مؤلفه بنسخ الإعدادات الافتراضية الخاطئة ولصقها. لكل مصدر طريقة أكثر أمانًا. للاختبار عبر الشبكة المحلية، اربط عنوان IP الخاص بالشبكة المحلية وأضف قاعدة جدار حماية مؤقتة. أما بالنسبة لحاوية Docker، فاربط 0.0.0.0 داخل الحاوية، ولكن انشرها على المضيف باستخدام الأمر `docker run -p 127.0.0.1:8080:8080 …`. بالنسبة للأدلة التعليمية، تجاهل سطر 0.0.0.0 وثبّت عنوان IP على 127.0.0.1 إلا إذا كان لديك سبب وجيه.
يُظهر مقتطف Flask ممل الإعداد الافتراضي الآمن:
```
from flask import Flask
app = Flask(__name__)
@app.route("/")
دالة index():
return "مرحباً، localhost!"
إذا كان __name__ == "__main__":
app.run(host="127.0.0.1", port=57573)
```
فحص المنفذ 57573 باستخدام netstat و lsof و ss
هناك شيء ما يستمع على المنفذ 57573 ولا تعرف ما هو. يعتمد الأمر على نظام التشغيل لديك. احفظ هذه القائمة المختصرة وستستخدمها لسنوات.
| نظام التشغيل / الصدفة | يأمر | ملحوظات | |
|---|---|---|---|
| لينكس (الحديث) | `ss -tlnp \ | grep :57573` | يستبدل الأمر netstat. يعرض العملية إذا قمت بتشغيله كمسؤول النظام (root). |
| لينكس (الإصدار القديم) | `netstat -tlnp \ | grep :57573` | قد لا يتم تثبيت أدوات الشبكة على الصور الصغيرة |
| نظام التشغيل macOS | `lsof -i :57573` | الأمر نفسه ينطبق على نظام لينكس. يشمل ذلك العملية والمستخدم. | |
| موجه أوامر ويندوز | `netstat -ano \ | findstr :57573` | يتم ربط عمود PID بمدير المهام |
| ويندوز باور شيل | `Get-NetTCPConnection -LocalPort 57573` | أنظف، قابل للبرمجة |
مخرجات لينكس النموذجية:
```
$ ss -tlnp | grep 57573
استمع 0 4096 127.0.0.1:57573 0.0.0.0:* users:(("python3",pid=18432,fd=4))
```
ستة حقول، من اليسار إلى اليمين: الحالة، قائمة انتظار الإرسال، قائمة انتظار الاستقبال، العنوان المحلي، عنوان النظير، العملية (PID 18432 في هذه الحالة). استخدم الأمر `kill 18432` على أنظمة يونكس، والأمر `Stop-Process -Id 18432` في باور شيل. انتهى. إذا كنت ترغب فقط في إعادة المنفذ، فهذا هو الحل الكامل.
ماذا لو لم يظهر شيء؟ حينها لا يوجد شيء يستجيب، وهذه بحد ذاتها معلومة مفيدة. خطأ المتصفح الذي تراه باستمرار، "تم رفض الاتصال"، يعني عادةً هذا تحديدًا. خادمك معطل. إما أنه تعطل عند بدء التشغيل، أو أنه لم يتصل بالعنوان الذي أدخلته.
أخطاء شائعة في فشل الاتصال ومعانيها
ستة أشياء. هذه هي قائمة الأخطاء الكاملة التي تراها على العنوان 127.0.0.1:57573. اقرأ سلسلة الخطأ، واختر مجموعة منها.
تشير عبارات "EADDRINUSE" و"العنوان قيد الاستخدام" و"المنفذ 57573 مُخصّص بالفعل" إلى نفس المعنى. يستخدم تطبيق آخر هذا المنفذ. تُحدد أوامر الفحص من القسم السابق التطبيق الذي يستخدمه. قم بإيقافه، أو استخدم منفذًا مختلفًا لخدمتك. تُنجز أدوات مثل netstat أو lsof المهمة في سطر واحد.
يشير الرمز `ECONNREFUSED`، وهو اختصار لعبارة "تم رفض الاتصال"، إلى أن بروتوكول TCP قد تم الوصول إلى نواة النظام، ولكن لم يتم الرد على المكالمة. توقف خادمك عند بدء التشغيل، أو لم يتم ربطه أصلاً. راجع نافذة الطرفية التي شغّلت منها الخادم، ستجد سجل الأخطاء هناك.
يشير خطأ "ETIMEDOUT" و"انتهت مهلة الاتصال" إلى اختفاء الحزم دون إشعار. في الإصدار 127.0.0.1، من المفترض ألا يحدث ذلك أبدًا. عند حدوثه، يكون السبب قاعدة جدار حماية، أو برنامج VPN، أو أداة حماية نقاط النهاية. قم بتعطيلها واحدة تلو الأخرى، ثم أعد المحاولة، وكرر العملية.
تظهر رسالة "EACCES" ("تم رفض الوصول") عند محاولة الربط بمنفذ أقل من 1024 بدون صلاحيات المستخدم الجذر. استخدم منفذًا أعلى مثل 57573، أو شغّل الملف التنفيذي بصلاحيات المستخدم الجذر. الخيار الثالث غير متاح.
يشير الخطأ `EAI_NONAME` وأخطاء نظام أسماء النطاقات الأخرى إلى عدم حلّ اسم المضيف. من المفترض أن يربط ملف المضيفين `localhost` بالعنوان 127.0.0.1. قد يكون عميل VPN قد تجاوز هذا الربط. ربما يكون مسؤول النظام قد نشر صورة معطوبة. افتح ملف المضيفين. تأكد من أن `127.0.0.1 localhost` هو السطر الأول غير المُعلّق.
أخيرًا، المشكلة الخفية. بعد إيقاف تشغيل النظام بشكل صحيح، تُبقي النواة المقبس في وضع TIME_WAIT لمدة دقيقتين تقريبًا. أعد تشغيل الخادم بسرعة وستظهر لك رسالة "العنوان قيد الاستخدام" رغم عدم وجود أي مستخدمين. ثلاثة حلول: الانتظار، أو ضبط `SO_REUSEADDR` في إعدادات الربط، أو ببساطة تغيير المنفذ. معظمنا يختار تغيير المنفذ.
اقرأ سلسلة الخطأ. اختر الحاوية. طبّق الإصلاح. عادةً ما تُغلق الحلقة بأكملها في أقل من دقيقة.

إعدادات جدار الحماية التي تحظر المنفذ 57573
من الناحية النظرية، يُسمح دائمًا بحركة مرور الشبكة الداخلية (Loopback). لكن عمليًا، قد تخالف قواعد جدار الحماية هذا السماح. أما المشتبه بهم المعتادون في عام 2026:
- قم بتفعيل جدار حماية تطبيقات macOS مع ضبط خيار "حظر الاتصالات الواردة" على الوضع الصارم. أضف الملف التنفيذي الذي يمتلك المنفذ 57573 إلى قائمة السماح في إعدادات النظام ← الشبكة ← جدار الحماية.
- عدم تطابق في ملف تعريف جدار حماية Windows Defender. تظهر لك أداة مطور جديدة تطلب منك السماح بالوصول. تنقر على "إلغاء" تلقائيًا، فيتم حظر الوصول دون أي تنبيه. افتح `wf.msc`، وألغِ قاعدة الرفض، ثم وافق على طلب السماح في المرة القادمة.
- جدار الحماية ufw أو iptables في لينكس مع تشديد السياسات الافتراضية. يعرض الأمر `ufw status verbose` قائمة القواعد. يسمح الأمر `ufw allow from 127.0.0.1` بفتح الاتصال المحلي (loopback) بشكل صريح. تسمح معظم توزيعات لينكس افتراضيًا بالاتصال المحلي (loback)، لكن بعض الصور المحسّنة لا تسمح بذلك.
- شبكة VPN مؤسسية أو وكيل انعدام الثقة يعترض حركة البيانات. بعض الوكلاء يوجه الاتصالات المحلية عبر مستمع في مساحة المستخدم، ويقومون بتعطيل الاتصال المحلي (loopback) دون علم المستخدم. قم بتعطيل الوكيل لمدة دقيقة واحدة للتأكد.
- برامج مكافحة الفيروسات أو برامج حماية نقاط النهاية. قد تقوم منتجات الكشف والاستجابة لنقاط النهاية (EDR) أحيانًا بحظر الملفات الثنائية الخاصة بالمطورين التي تستخدم منافذ عالية حتى يتم إضافتها إلى القائمة البيضاء.
في أي بيئة مؤسسية مُدارة، توقع حدوث واحد على الأقل من هذه المشاكل. عملية التشخيص واحدة: تحقق من إعدادات جدار الحماية، ثم شغّل الأمر `curl http://127.0.0.1:57573` من نفس سطر الأوامر الذي شغّل الخادم. إذا نجح الأمر مع المتصفح، فربما تستخدم واجهة خاطئة (غالبًا `::1` بدلًا من 127.0.0.1) أو أن سياسة الوصول إلى الشبكة الخاصة مُفعّلة. إذا فشل الأمر أيضًا، فربما يعترض النظام أو جدار الحماية البيانات قبل وصولها إلى برنامجك. يتداول مطورو الويب ومديرو الشبكات هذه النصائح على مواقع ويكي داخلية لأن الأعراض تبدو متطابقة حتى تتكرر مرتين.
Localhost في Docker و WSL و GitHub Codespaces
ثلاثة مواضع يتوقف فيها المضيف المحلي عن التصرف بالطريقة التي تتوقعها.
لنبدأ بـ Docker. داخل الحاوية، يُعدّ 127.0.0.1 عنوان الاسترجاع الخاص بها ، وليس عنوانك. لذا، إذا كان حاسوبك المحمول يُشغّل خدمةً على 127.0.0.1:57573، فلن تتمكن الحاوية من الوصول إليها عبر هذا العنوان. أبدًا. بوابة المضيف موجودة في مكان آخر: `host.docker.internal` على نظامي Mac وWindows، وعنوان IP جسري على نظام Linux. يتطلب الاتجاه المعاكس (خدمة الحاوية، المُستدعي المضيف) استخدام علامة النشر. على سبيل المثال: `docker run -p 127.0.0.1:57573:57573 my-image`. عند حذف `-p`، لن يكون المنفذ موجودًا خارج الحاوية.
يتميز WSL2 بخصائصه الفريدة. في وضع الشبكة المتطابقة (المُفعّل اختياريًا في Windows 11 22H2 والإصدارات الأحدث، عبر `[wsl2] networkingMode=mirrored`)، يتم مشاركة حزمة بروتوكولات الشبكة الخاصة بالمضيف مع الجهاز الظاهري WSL. في هذا الوضع، تستجيب خدمة على العنوان 127.0.0.1:57573 داخل WSL على Windows على نفس العنوان. لا يزال وضع NAT الافتراضي يُعيد توجيه المنافذ، ولكن فقط لسلاسل `localhost`، وليس دائمًا للعنوان 127.0.0.1 نفسه. يوجد أيضًا خطأ برمجي خطير معروف، مُسجّل تحت رقم Microsoft WSL #40169. يقوم الوضع المتطابق بقفل نطاقات كبيرة من المنافذ ذات النطاق الترددي العالي دون علم المستخدم. تفشل محاولات الربط على 127.0.0.1 مع ظهور الخطأ `WinError 10013`، والذي يُبلغ عنه Python بشكل مفيد على أنه `PermissionError`. عندما يرفض منفذ الربط على Windows دون سبب واضح، تحقق من هذا أولًا.
تعمل ميزات GitHub Codespaces وVS Code Remote SSH في اتجاهين متعاكسين. فهما يقومان بإعادة توجيه المنافذ تلقائيًا. عند تشغيل خادم داخل مساحة عمل على العنوان 127.0.0.1:57573، يقوم المحرر بفتح نفق لك، كاشفًا هذا المنفذ على عنوان URL فريد github.dev. يتصل تبويب المتصفح الذي تفتحه على حاسوبك المحمول بهذا العنوان، وليس 127.0.0.1، ويمر الطلب عبر النفق عائدًا إلى مساحة العمل.
لذا، يبدو اسم نقطة النهاية متشابهًا. لكن المسار الفعلي الذي تسلكه الحزمة يختلف اختلافًا كبيرًا في كل بيئة. خمس دقائق تقضيها في تحديد البيئة التي تعمل بها توفر عليك عشرين دقيقة من التحديق في رسالة "تم رفض الاتصال".
بروتوكول HTTPS على الخادم المحلي: أفضل الممارسات لتطوير محلي آمن
تُصرّ المتصفحات الحديثة والعديد من واجهات برمجة التطبيقات (APIs) على استخدام بروتوكول HTTPS حتى في التطوير المحلي. خدمات العامل (Service Workers)، وتحديد الموقع الجغرافي (Geolocation)، وواجهة برمجة تطبيقات الحافظة (Clipboard API)، وأي ملف تعريف ارتباط مُصنّف على أنه "آمن" (Secure)، جميعها ترفض العمل عبر بروتوكول HTTP العادي. هناك استثناء واحد: 127.0.0.1، الذي يتعامل معه المتصفح بالفعل كسياق آمن. يغطي هذا الاستثناء معظم عمليات التطوير البسيطة. أما بالنسبة لأي شيء آخر، فيُفضّل استخدام بروتوكول TLS محليًا.
أفضل أداة للحصول على شهادات موثوقة هي mkcert، من تطوير فيليبو فالسوردا. شغّلها مرة واحدة باستخدام الأمر `mkcert -install`، ثم `mkcert localhost 127.0.0.1 ::1`، وستحصل على شهادة `localhost+2.pem` بالإضافة إلى مفتاح. وجّه خادم التطوير الخاص بك إلى هاتين الشهادتين. سيظهر المتصفح رمز القفل بدون أي تحذير، لأن mkcert قام بتثبيت مرجع مصدق محلي في نظامك، ويخزن Firefox الشهادات الموثوقة. لا يستطيع Let's Encrypt إصدار شهادة حقيقية لـ `127.0.0.1`، لعدم وجود نطاق للتحقق منه، لذا فإن المرجع المصدق المحلي هو الحل الأمثل.
بعض الأنماط الأخرى التي يجدر معرفتها:
- لإجراء الاختبارات الآلية، استخدم خدمة نظام أسماء النطاقات السحرية (مثل `nip.io` أو `sslip.io` أو `traefik.me` أو `localhost.direct`) لتحويل عنوان IP إلى اسم مضيف حقيقي مثل `127.0.0.1.nip.io`. يمكن لـ Let's Encrypt أو ZeroSSL توثيق هذه الشهادات، بل إن `localhost.direct` تنشر شهادة عامة مُسبقة الإصدار.
- قم بربط خدمتك بـ 127.0.0.1، وليس 0.0.0.0، حتى تتطابق الشهادة (التي تغطي `127.0.0.1`) بالفعل.
- احفظ شهادات المطورين خارج نظام Git. يقوم الأمر mkcert بوضعها في مجلد العمل الخاص بك افتراضيًا. أضف الزوج إلى ملف `.gitignore` فورًا.
- قم بتغيير شهادة المرجع المصدق المحلية كل بضعة أشهر. الأمر `mkcert -uninstall` يقوم بتنظيفها.
- إذا كنت تستخدم خادم وكيل MITM تابعًا للشركة، فتقبل أن يقوم هذا الخادم باستبدال شهاداتك. عطّل خادم الوكيل على العنوان `127.0.0.1` إذا كانت أدواتك تدعم ذلك.
للمتصفحات أيضًا قاعدة خاصة جديرة بالمعرفة. وفقًا لمواصفات W3C Secure Contexts، تُعتبر عناوين `http://127.0.0.1` و`http://localhost` و`http://[::1]` عناوين "يُحتمل أن تكون موثوقة"، مما يسمح لصفحة HTTPS بجلبها دون تفعيل حظر المحتوى المختلط. هذا الاستثناء مُخصص تحديدًا للتطوير المحلي.
لا يُمثّل localhost حدًا أمنيًا بالمعنى الذي يتصوره المطورون عادةً. إذ يُمكن خداع المتصفحات للوصول إليه من مواقع ويب عشوائية عبر إعادة توجيه نظام أسماء النطاقات (DNS)، حيث يُعيد موقع خبيث توجيه اسم مضيفه إلى 127.0.0.1، مما يسمح لبرامج جافا سكريبت على صفحة المهاجم بالتواصل مع الخدمات المحلية ضمن نطاق الموقع الأصلي. تُعدّ ثغرة Zoom CVE (CVE-2019-13450) لعام 2019 مثالًا نموذجيًا على ذلك. فقد قامت Zoom بتثبيت خادم ويب مخفي على `localhost:19421` على نظام macOS، بحيث يُمكن لروابط الاجتماعات تشغيل تطبيق سطح المكتب، كما يُمكن لأي موقع ويب جلب البيانات منه لإجبار المستخدم على الانضمام إلى الاجتماع مع تشغيل الكاميرا. وقد تأثر ما يقارب 4 ملايين جهاز Mac، بالإضافة إلى 13 عميلًا من العلامات التجارية الخاصة تم شحنها على نفس المحرك. وقد استبدل متصفح Chrome 142، الذي صدر في أواخر عام 2025، نظام الوصول إلى الشبكة الخاصة القديم بنظام الوصول إلى الشبكة المحلية. تتطلب الصفحات العامة الآن طلب إذن صريح قبل الوصول إلى عناوين الاسترجاع أو العناوين الخاصة، مما يُبطل معظم الحيل التي أتمتتها أداة Singularity التابعة لمجموعة NCC. وقد وثّق تقرير استشاري صادر عن Straiker عام 2025 هجومًا مماثلاً ضد خوادم بروتوكول سياق النموذج (MLP) التي تعمل محليًا، والتي أصبحت ثغرة متنامية بسرعة مع ازدياد عدد وكلاء LLM الذين يُشغّلهم المطورون على عناوين الاسترجاع. لذا، يُنصح بالربط الصارم بالعنوان 127.0.0.1، وطلب المصادقة، والتحقق من ترويسة `Origin`، وتجنب استخدام CORS ذي الأحرف البديلة في واجهات برمجة تطبيقات التطوير. هذه العادات الأربع كفيلة بمنع معظم هذه الهجمات.
نصائح لحل المشكلات وقائمة فحص تشخيصية سريعة
عندما يرفض 127.0.0.1:57573 الاستجابة، قم بمراجعة هذه القائمة المختصرة قبل الشك في وجود سحر أعمق.
١. تأكد من أن الخادم يعمل بالفعل. انظر إلى نافذة الأوامر التي شغّلت الخادم منها. إذا تعطل، فستجد سجل الأخطاء هناك.
٢. تأكد من ربطه بالعنوان ١٢٧.٠.٠.١، وليس ٠.٠.٠.٠ أو ::١ فقط. معظم الأطر البرمجية تطبع عنوان الربط عند بدء التشغيل. اقرأ السطر.
3. جرّب الأمر `curl -v http://127.0.0.1:57573` من نفس نافذة الأوامر. هل يعمل الأمر curl؟ المشكلة في المتصفح، وليست في الخادم.
٤. تحديد مالك المنفذ. في لينكس، استخدم الأمر `ss -tlnp | grep :57573`. في ماك أو إس، استخدم الأمر `lsof -i :57573`. في ويندوز، استخدم الأمر `netstat -ano | findstr :57573`.
5. هل العملية الخاطئة هي المسؤولة؟ قم بإيقافها، ثم أعد تشغيل الخادم.
٦. لا يوجد أي شيء يستمع؟ راجع سجل بدء التشغيل. يشير `EACCES` إلى منفذ ذي امتيازات. يشير `EADDRINUSE` عادةً إلى حالة انتظار TIME_WAIT قديمة.
٧. جرّب استخدام صيغة IPv6: `curl http://[::1]:57573`. إذا نجح أحد العنوانين `127.0.0.1` أو `::1` بينما لم ينجح الآخر، فإن خدمتك تعمل بنظام أحادي الطبقة.
٨. جرّب منفذًا مختلفًا: مرّر `--port 12345` (أو أي منفذ آخر) وأعد التحميل. هل يعمل المنفذ الجديد؟ لديك تعارض خاص بالمنفذ.
٩. أوقف تشغيل VPN وبرامج مكافحة الفيروسات وبرامج نقاط النهاية لمدة دقيقة واحدة. إذا بدأ الخادم 57573 بالرد، فهذا يعني أن أحدها كان يستهلك البيانات.
١٠. أعد تشغيل الجهاز، أو على الأقل أعد تشغيل واجهة الشبكة. نادرًا ما يكون هذا هو الحل. قد يؤدي إلى مسح المقابس القديمة وحالة جدار الحماية العالقة عندما لا ينجح أي حل آخر.
في معظم مشاكل المطورين، تكشف الخطوات الأربع الأولى لحل المشكلة سبب انقطاع الاتصال. أما الخطوات المتبقية فتغطي الحالات النادرة، حيث يخفي عدم تطابق بروتوكول IPv6، أو وجود منافذ قديمة، أو جدار حماية معادٍ، سبب العطل الحقيقي. اقرأ رسالة الخطأ، ثم اتبع الخطوات المذكورة في القائمة.
ملاحظة هامة بخصوص Plisio: عند دمج روابط الويب الخاصة بمعالج دفع العملات الرقمية، يحتاج البوابة إلى عنوان URL عام لإرسال طلبات POST إليه. تقبل فواتير Plisio عنوان `callback_url` في حمولة API، ويرسل النظام تحديثات الحالة إلى نقطة النهاية هذه. بحكم التعريف، لا يمكن الوصول إلى خادمك المحلي على 127.0.0.1:57573 من الإنترنت العام، لذا فإن الحل القياسي هو استخدام نفق. في عام 2026، كانت الخيارات الشائعة هي ngrok (شخصي 8 دولارات شهريًا، احترافي 20 دولارًا شهريًا)، وCloudflare Tunnel (مجاني حتى 50 مستخدمًا على أساس Zero Trust)، وTailscale Funnel (مجاني للاستخدام الشخصي، فرق مدفوعة تبدأ من 6 دولارات للمستخدم شهريًا). يأخذ كل منها اسم مضيف عام ويعيد توجيه حركة المرور إلى عنوان IP الخاص بجهاز الكمبيوتر المحمول الخاص بك على 127.0.0.1:57573. توفر حزم تطوير البرامج (SDKs) الخاصة بـ Plisio لـ Python و PHP و Node أداة مساعدة `validate_callback` التي تتحقق من HMAC-SHA1 `verify_hash` على جسم JSON المرتب، لذلك بمجرد توصيل النفق، يعمل نفس المعالج بشكل متطابق في بيئة التطوير وفي بيئة الإنتاج.