
منصة اختبار مفتوحة تختبر خوادم HTTP/1.1 وفقًا لمتطلبات RFC 9110/9112، ونواقل التهريب، ومعالجة المدخلات غير الصالحة. أضف إطار عملك، واحصل على نتائج التوافق تلقائيًا.
Http11Probe هو أداة اختبار امتثال وأمان لخوادم HTTP/1.1. يرسل طلبات مشوهة وغامضة وضخمة إلى الخادم عبر مآخذ TCP الخام، ويتحقق من استجابته وفقًا لما يتطلبه RFC 9110 و RFC 9112 فعليًا. هذه هي الحالات المحرجة مثل إنهاء السطر بـ LF فقط، طي السطور القديم، تهريب طلبات CL/TE، حيل تأطير الكتل، الرؤوس الضخمة، و بايتات NUL، حيث يبدأ المحلل الصارم والمتساهل في الاختلاف.
نفس الاختبارات الـ 215 تُجرى على 41 خادمًا مرجعيًا مكتوبًا بـ 12 لغة، من Nginx و Apache و Envoy إلى Kestrel و Gin و Actix والخوادم المدمجة في Node و Bun و Deno. يتم تسجيل كل نتيجة وفقًا لصياغة MUST/SHOULD/MAY في المواصفات وتوضع علامة Pass أو Fail أو Warn. Warn تعني فقط أن RFC يسمح بالسلوك الصارم والمتساهل معًا، لذا لا أحد منهما خاطئ.
ستجد الوثائق الكاملة، ومسردًا لكل اختبار مع اقتباسات من RFC، ومصفوفة النتائج الحية لكل خادم على http-probe.com.
الأداة غير مرتبطة بهدف محدد. إنها تختبر أي خادم HTTP/1.1 يستمع بالفعل على --host:--port، ولا يوجد علم لاختيار إطار العمل. ابدأ الخادم أولاً (أو دع probe-local.sh يقوم بتشغيله لك)، ثم وجّه الأداة إليه.
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080
| Flag | الوصف | الافتراضي |
|---|---|---|
--host | اسم المضيف الهدف أو عنوان IP | localhost |
--port | رقم المنفذ الهدف | 8080 |
--category | تشغيل اختبارات هذه الفئة فقط (Compliance, Smuggling, MalformedInput, Normalization, Cookies, Capabilities) | الكل |
--test | تشغيل معرفات اختبار محددة فقط، غير حساس لحالة الأحرف (قابل للتكرار) | الكل |
--timeout | مهلة الاتصال والقراءة بالثواني لكل اختبار | 5 |
--output | كتابة نتائج JSON إلى ملف | لا شيء |
--verbose, -v | طباعة الاستجابة الخام للخادم لكل اختبار | إيقاف |
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080 --output results.json
تشغيل اختبارات محددة:
dotnet run --project src/Http11Probe.Cli -- --test SMUG-CL-TE-BOTH --test SMUG-DUPLICATE-CL
تتدفق النتائج إلى وحدة التحكم مع اكتمال كل اختبار، مع ملخص في النهاية:
Score: 97/97 19 warnings (146 tests, 35.5s)
الأداة ترسل الطلبات فقط، ولا تبدأ الخوادم. لاختبار أحد الخوادم المضمنة تحت src/Servers/، استخدم scripts/probe-local.sh. يفعل نفس ما يفعله خط CI: بناء صورة Docker للخادم، تشغيله على --network host، انتظار تشغيله، اختباره، ثم إيقافه.
# اختبار خادم واحد باسم الدليل تحت src/Servers/، مثل ActixServer
scripts/probe-local.sh --server ActixServer
# اختبار كل الخوادم المضمنة
scripts/probe-local.sh --all
قيمة --server هي اسم الدليل (ActixServer)، وليس اسم العرض (Actix). إذا كان برنامج Docker الخفي يحتاج إلى صلاحيات الجذر، أضف --docker-sudo حتى لا تضطر إلى تشغيل السكريبت بأكمله بـ sudo:
scripts/probe-local.sh --server ActixServer --docker-sudo
| Flag | الوصف |
|---|---|
--server <Dir> | اختبار خادم واحد باسم دليله تحت src/Servers/ (مثل NginxServer) |
--all | اختبار كل الخادوم تحت src/Servers/*/probe.json |
--port <Port> | المنفذ الهدف (الافتراضي: 8080) |
--skip-build | تخطى dotnet build (يفترض وجود بناء Release بالفعل) |
--verbose | تمرير --verbose إلى CLI |
--docker-sudo | تشغيل أوامر Docker عبر sudo (يسمح بتشغيل السكريبت بدون sudo) |
-h, --help | إظهار المساعدة |
يكتب probe-<ServerDir>.json (واحد لكل خادم)، بالإضافة إلى probe-data.js و docs/static/probe/data.js للعرض المحلي. ستحتاج إلى jq و docker و curl و python3 و .NET 10 SDK.
probe-local.sh هو مجرد غلاف مناسب. إذا كنت تفضل القيام بذلك يدويًا، مثلاً لإبقاء الخادم قيد التشغيل عبر عدة جولات اختبار، قم ببناء وتشغيل الحاوية بنفسك، ثم وجّه الأداة إليها. قم بتشغيل هذه الأوامر من جذر المستودع، لأنه سياق بناء Docker:
docker build -t probe-actix -f src/Servers/ActixServer/Dockerfile .
docker run -d --name probe-target --network host probe-actix
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080
docker rm -f probe-target
يمكنك أيضًا توجيه الأداة إلى أي خادم HTTP/1.1 يعمل بالفعل لديك:
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 9000
يتطلب .NET 10 SDK.
dotnet build Http11Probe.slnx
يعمل سير عمل Probe على طلبات السحب و workflow_dispatch. يقوم ببناء صورة Docker لكل خادم، واختباره، ونشر جدول مقارنة كتعليق على PR.