
Una plataforma de pruebas abierta que sondea servidores HTTP/1.1 frente a los requisitos de RFC 9110/9112, vectores de contrabando y manejo de entrada malformada. Agregue su framework, obtenga resultados de cumplimiento automáticamente.
Http11Probe es un probador de cumplimiento y seguridad para servidores HTTP/1.1. Envía solicitudes malformadas, ambiguas y de tamaño excesivo a un servidor a través de sockets TCP sin procesar y comprueba cómo responde frente a lo que realmente exigen las RFC 9110 y RFC 9112. Estos son los casos incómodos como finales de línea LF sin CR, plegado de líneas obsoleto, contrabando de solicitudes CL/TE, trucos de fragmentación de chunks, cabeceras de tamaño excesivo y bytes NUL, donde un analizador estricto y uno permisivo empiezan a discrepar.
Las mismas 215 pruebas se ejecutan contra 42 servidores de referencia escritos en 12 lenguajes, desde Nginx, Apache y Envoy hasta Kestrel, Gin, Actix y los servidores integrados en Node, Bun y Deno. Cada resultado se puntúa según la redacción MUST/SHOULD/MAY de la especificación y se marca como Pass, Fail o Warn. Un Warn solo significa que la RFC permite tanto el comportamiento estricto como el permisivo, por lo que ninguno de los dos es incorrecto.
Encontrarás la documentación completa, un glosario por prueba con citas de las RFC y la matriz de resultados en vivo para cada servidor en http-probe.com.
El probe es agnóstico respecto al objetivo. Prueba cualquier servidor HTTP/1.1 que ya esté escuchando en --host:--port, y no hay ningún flag para elegir un framework. Inicia primero el servidor (o deja que probe-local.sh levante uno por ti), luego apunta el probe hacia él.
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080
| Flag | Descripción | Predeterminado |
|---|---|---|
--host | Nombre de host o dirección IP de destino | localhost |
--port | Número de puerto de destino | 8080 |
--category | Ejecutar solo las pruebas de esta categoría (Compliance, Smuggling, MalformedInput, Normalization, Cookies, Capabilities) | todas |
--test | Ejecutar solo IDs de prueba específicos, sin distinguir mayúsculas y minúsculas (repetible) | todas |
--timeout | Tiempo de espera de conexión y lectura en segundos por prueba | 5 |
--output | Escribir los resultados JSON en un archivo | ninguno |
--verbose, -v | Imprimir la respuesta sin procesar del servidor para cada prueba | desactivado |
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080 --output results.json
Ejecutar pruebas específicas:
dotnet run --project src/Http11Probe.Cli -- --test SMUG-CL-TE-BOTH --test SMUG-DUPLICATE-CL
Los resultados se transmiten a la consola a medida que se completa cada prueba, con un resumen al final:
Score: 97/97 19 warnings (146 tests, 35.5s)
El probe solo envía solicitudes, no inicia servidores. Para probar uno de los servidores incluidos en src/Servers/, usa scripts/probe-local.sh. Hace lo mismo que hace el pipeline de CI: construir la imagen Docker del servidor, ejecutarla en --network host, esperar a que arranque, probarla y luego desmontarla.
# Probe one server by its directory name under src/Servers/, e.g. ActixServer
scripts/probe-local.sh --server ActixServer
# Probe every bundled server
scripts/probe-local.sh --all
El valor de --server es el nombre del directorio (ActixServer), no el nombre para mostrar (Actix). Si tu daemon de Docker necesita root, añade --docker-sudo para no tener que ejecutar todo el script con sudo:
scripts/probe-local.sh --server ActixServer --docker-sudo
| Flag | Descripción |
|---|---|
--server <Dir> | Probar un único servidor por su nombre de directorio en src/Servers/ (p. ej. NginxServer) |
--all | Probar todos los servidores en src/Servers/*/probe.json |
--port <Port> | Puerto de destino (predeterminado: 8080) |
--skip-build | Omitir dotnet build (asume que ya existe una compilación Release) |
--verbose | Pasar --verbose al CLI |
--docker-sudo | Ejecutar los comandos de Docker mediante sudo (te permite ejecutar el script sin sudo) |
-h, --help | Mostrar ayuda |
Escribe probe-<ServerDir>.json (uno por servidor), además de probe-data.js y docs/static/probe/data.js para el renderizado local. Necesitarás jq, docker, curl, python3 y el SDK de .NET 10.
probe-local.sh es solo un envoltorio de conveniencia. Si prefieres hacerlo a mano, por ejemplo para mantener un servidor en marcha durante varias ejecuciones del probe, construye y ejecuta el contenedor tú mismo, luego apunta el probe hacia él. Ejecuta estos comandos desde la raíz del repositorio, ya que ese es el contexto de compilación de 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
También puedes apuntar el probe a cualquier servidor HTTP/1.1 que ya tengas en ejecución:
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 9000
Requiere el SDK de .NET 10.
dotnet build Http11Probe.slnx
El flujo de trabajo Probe se ejecuta en pull requests y en workflow_dispatch. Construye la imagen Docker de cada servidor, lo prueba y publica una tabla comparativa como comentario en el PR.