HTTP
La pantalla HTTP es a la vez un inspector de solicitudes y una herramienta de carga:
- enviar una sola solicitud y ver el estado, el tiempo que tardó, los encabezados y el cuerpo;
- autenticarte con Basic, un token Bearer o Digest;
- conservar las cookies que define un servidor, como hace un navegador;
- enviar la misma solicitud muchas veces a la vez — una Ráfaga de carga — y leer el caudal y los percentiles de latencia.
Enviar una solicitud
- Abre HTTP.
- Elige el método y escribe la URL, por ejemplo
http://127.0.0.1:8080/health. - Añade Encabezados si el servidor los necesita; + encabezado añade una fila, ✕ quita una. Una fila sin nombre no se envía.
- Para un método distinto de GET y HEAD, escribe el Cuerpo. El texto se queda en el campo mientras cambias a GET o HEAD y vuelve con el otro método, pero no se envía mientras tanto.
- Pulsa Enviar.
La línea bajo los botones da el veredicto al instante — estado, tiempo y tamaño, o por qué no hubo respuesta — y el panel Respuesta muestra el resto. La solicitud (método, URL, encabezados, cuerpo, tiempo de espera y Conservar cookies) se conserva cuando cambias de pantalla y cuando reinicias la aplicación; las credenciales no.
| Tecla | Dónde | Qué hace |
|---|---|---|
| Enter | la URL, un encabezado, una credencial, el tiempo de espera | envía |
| Ctrl+Enter | cualquier campo de la solicitud, el cuerpo incluido | envía |
| Ctrl+S | cualquier campo de la solicitud | la guarda como señal (abajo) |
Campos de la solicitud
| Campo | Qué | Predeterminado |
|---|---|---|
| Método | GET, POST, PUT, PATCH, DELETE, HEAD u OPTIONS | GET |
| URL | Una URL http:// o https:// | http://127.0.0.1:8080/ |
| Encabezados | Pares de nombre y valor, enviados tal como se escriben. Sin un User-Agent propio, Signal Lab envía SignalLab/0.1. | Accept: application/json |
| Autenticación | Cómo se autentica la solicitud (abajo) | Ninguna |
| Conservar cookies | Devolver las cookies que definen los servidores (abajo) | activado |
| Cuerpo | Se envía exactamente como se escribe; no se añade ningún Content-Type, así que añade el encabezado que corresponda. Un cuerpo vacío no se envía. El campo no se muestra para GET y HEAD, y entonces la solicitud no lleva ningún cuerpo — ni en el envío, ni en una señal guardada, ni en Al experimento — aunque hayas escrito uno con otro método. | vacío |
| Tiempo de espera (ms) | Cuánto puede durar todo el intercambio, respuesta y cuerpo incluidos | 10 000 |
Autenticación
| Autenticación | Campos | Qué se envía |
|---|---|---|
| Ninguna | — | ningún encabezado Authorization |
| Basic | Nombre de usuario, Contraseña | Authorization: Basic …, el nombre y la contraseña en base64, con la primera solicitud |
| Token Bearer | Token | Authorization: Bearer <token> |
| Digest | Nombre de usuario, Contraseña | nada al principio; la respuesta al desafío del servidor (abajo) |
Cambiar entre Basic y Digest conserva el nombre y la contraseña.
Digest
Con Digest, Signal Lab envía la solicitud sin credenciales. Cuando el servidor responde 401 con un desafío Digest, Signal Lab calcula la respuesta a partir del desafío y tu contraseña y vuelve a enviar la solicitud. La respuesta que ves es la de esa segunda solicitud, marcada Digest: desafío respondido, y la latencia cuenta ambos intercambios — lo que espera un cliente.
- Algoritmos: MD5 y SHA-256, y sus variantes
-sess. Cuando un servidor ofrece ambos, se usa SHA-256. - Calidad de protección:
authyauth-int, y la respuesta más antigua sinqop. - Cuando el servidor dice que el nonce se agotó (
stale), o vuelve a pedirlo con uno nuevo, la solicitud se responde otra vez, hasta 3 veces más. Cuando rechaza la respuesta al nonce que dio en último lugar, el401se mantiene: el nombre o la contraseña son incorrectos. - Los redireccionamientos los sigue Signal Lab mismo, así que la URL que pregunta es la que se responde. Un desafío de otro origen no se responde: las credenciales escritas para un host no van a ningún otro. Pasar de
http://ahttps://en el mismo host y los puertos predeterminados cuenta como el mismo host.
Cuando el desafío no se puede responder, el 401 se mantiene y el panel dice por qué:
| Message | Meaning |
|---|---|
| The server answered 401 without asking for Digest | El servidor quiere otro esquema; prueba Basic o Bearer. |
| The server asked for Digest with … | Un algoritmo que Signal Lab no habla; habla MD5 y SHA-256. |
| The server asked for Digest without a realm or nonce | El desafío del servidor está incompleto. |
| The request was sent on to …, which asked for Digest | Un redireccionamiento llevó a otro origen, cuyo desafío no se responde. |
Dónde van las credenciales
Las credenciales van solo al encabezado Authorization de la solicitud cuando se envía. El Inspector, la consola y los informes de experimento nunca muestran ese encabezado. En esta pantalla se guardan solo en memoria y desaparecen tras un reinicio — salvo que la solicitud esté vinculada a una señal guardada, que las trae de vuelta.
WARNING
Una solicitud guardada como señal conserva sus credenciales en el archivo de la biblioteca, signals.json, como texto sin formato. En un experimento, escribe una contraseña como {{secret.NAME}} en su lugar; consulta Datos y plantillas.
Cookies
Con Conservar cookies activado, lo que un servidor define con Set-Cookie se conserva en el almacén de cookies de la pantalla y se devuelve con las solicitudes posteriores a ese servidor, siguiendo las reglas del navegador (dominio, ruta de acceso, Secure, caducidad). El almacén lo usan las solicitudes de esta pantalla, su ráfaga y las señales HTTP que envías desde la biblioteca. Desactívalo para enviar solicitudes sin cookies y no conservar ninguna.
El panel de cookies bajo la solicitud y la respuesta lista lo que contiene el almacén: Nombre, Valor, Dominio y ruta (un dominio que empieza por . también cubre sus subdominios), Caduca (con la sesión para una cookie sin caducidad) y Marcas (Secure, HttpOnly, SameSite). Las cookies caducadas no se listan. Borrar vacía el almacén.
El almacén vive mientras vive la aplicación: un reinicio empieza con uno vacío. En un servidor, hay un almacén por cada página que haya iniciado sesión en él. Una ejecución de experimento tiene un almacén propio (consulta Experimentos), y signallab send http no usa ninguno.
La respuesta
| Parte | Qué |
|---|---|
| Estado | El código de estado y su motivo; ERR cuando no llegó ninguna respuesta |
| Latencia | Desde el envío hasta el último byte del cuerpo, en milisegundos |
| Tamaño | El tamaño del cuerpo |
| Encabezados de respuesta | Haz clic en la línea con su recuento para mostrarlos u ocultarlos |
| Cuerpo | Formateado cuando es JSON; Ver sin formato y Formatear JSON alternan. Se muestran hasta 256 KiB, luego … (truncated). |
Cuando no hay respuesta, el panel dice por qué, con las mismas palabras que en todas partes de Signal Lab: rechazada, sin respuesta a tiempo, el nombre no resuelve, un problema de certificado, etc. El detalle técnico del sistema queda plegado debajo.
Redireccionamientos
Los redireccionamientos (301, 302, 303, 307, 308) se siguen, hasta 10; la respuesta que se muestra es la última. Tras 301, 302 y 303 la solicitud continúa como GET sin cuerpo (HEAD sigue siendo HEAD); tras 307 y 308 como estaba. El Authorization y las cookies escritas para un host no se envían a otro.
Conexiones seguras
El certificado de un servidor https:// se comprueba contra los certificados en los que este sistema confía. Un certificado autofirmado o caducado se rechaza con "A secure connection to … could not be made"; no hay ningún ajuste para saltarse la comprobación. Para probar un servidor con tu propio certificado, añádelo a los certificados de confianza del sistema.
Ráfaga de carga
La Ráfaga de carga envía la solicitud en pantalla — con su autenticación y, mientras Conservar cookies está activado, el almacén de cookies — muchas veces, y la mide.
- Define Concurrencia, Total, Duración, s y Tasa, req/s.
- Pulsa Iniciar ráfaga. La ráfaga es una tarea: Detener ráfaga, o detenerla en la franja de la consola, la termina.
| Campo | Qué | Predeterminado |
|---|---|---|
| Concurrencia | Solicitudes en curso a la vez, 1–512 | 20 |
| Total | Solicitudes que enviar; 0 — seguir enviando hasta que termine la duración | 500 |
| Duración, s | Segundos que dura; 0 — parar cuando se envíe el total | 0 |
| Tasa, req/s | Solicitudes iniciadas por segundo, 0,1–100 000; 0 — tan rápido como vayan los hilos | 0 |
Con Total y Duración, s a 0, la ráfaga funciona hasta que la detengas.
Hay dos formas de enviar:
- Tasa, req/s 0. Cada hilo vuelve a enviar en cuanto tiene una respuesta. Esto averigua cuánto aguanta el servidor, pero un servidor lento también frena la ráfaga.
- Una tasa. Las solicitudes empiezan según un plan fijo — a 10 por segundo, una cada 100 ms desde el inicio — por lentas que sean las respuestas. Una solicitud cuyo momento llega mientras todos los hilos están ocupados espera como máximo 50 ms por uno; después de eso se omite y se cuenta como Omitidas, nunca se envía tarde. Las solicitudes omitidas significan que la concurrencia es demasiado baja para esta tasa, o que el servidor es más lento de lo que la tasa necesita.
| Número | Qué |
|---|---|
| Enviadas | Solicitudes que han tenido respuesta o han fallado |
| OK | Respondidas con un estado 2xx |
| Fallidas | Sin respuesta, o cualquier estado fuera de 200–299 |
| Omitidas | Omitidas, como arriba (solo con una tasa) |
| RPS | Solicitudes por segundo durante la última décima de segundo; cuando la ráfaga ha terminado, durante toda la ráfaga. Con una tasa, la etiqueta nombra la tasa pedida. |
| p50, p90, p95, p99 | El tiempo dentro del cual terminó esa proporción de las solicitudes, fallos incluidos; preciso hasta un 0,5 % |
| Media, Mín., Máx. | La media, la más rápida y la más lenta |
Los números se actualizan unas 10 veces por segundo. El gráfico que hay junto a ellos dibuja las solicitudes por segundo durante los últimos 24 segundos, aproximadamente.
Con Digest, el desafío de la primera solicitud se responde una vez y esa respuesta sirve para todas las solicitudes de la ráfaga.
WARNING
Una ráfaga es carga real. Apúntala solo a servidores que sean tuyos o que puedas probar.
Para rampas, escalones, picos y umbrales de superado/fallado, ejecuta la solicitud bajo carga en un experimento.
En el Inspector
Con la captura activada, cada intercambio aparece como una trama con el protocolo http y el origen http: el método, la URL, el estado y el tiempo en el resumen, los encabezados de la respuesta y el inicio del cuerpo (2000 caracteres) en su detalle, el estado como veredicto (failed cuando no llegó ninguna respuesta, · digest after 401 cuando se respondió un desafío). La trama registra el tamaño del cuerpo, no sus bytes. El encabezado Authorization de la solicitud nunca está en ella. Una ráfaga pone como mucho un intercambio cada 100 ms en la captura. Consulta Inspector.
Guardar y reutilizar
- Guardar como señal. Guardar… conserva la solicitud — método, URL, encabezados, cuerpo, tiempo de espera y autenticación — en la biblioteca de señales. La pantalla queda vinculada a ella: Guardar (Ctrl+S) la actualiza, Guardar como… la copia, la etiqueta la abre en Señales. Abrir una señal HTTP desde la biblioteca la carga aquí de nuevo, credenciales incluidas. Consulta Señales.
- Añadir a un experimento. Al experimento añade un paso Solicitud HTTP con la misma solicitud al experimento abierto, justo antes de Fin o después del paso seleccionado, y lo abre.
- Simular esto. Bajo una respuesta, Simular esto crea una ruta de emulador que responde a este método y ruta de acceso con este estado, encabezados y cuerpo. Elige un emulador HTTP en Agregar a, o Un emulador nuevo, y pulsa Agregar la ruta; la ruta va la primera en ese emulador, y la pantalla Emuladores se abre en él. Consulta Emuladores.
En experimentos
| Paso | Qué hace |
|---|---|
| Solicitud HTTP | Envía una solicitud; su URL, encabezados, cuerpo y credenciales aceptan {{templates}}. Puede ejecutarse bajo carga. Detalles |
| Estado HTTP, Texto de respuesta, Encabezado de respuesta, Tiempo de respuesta | Comprueban la última respuesta. Detalles |
| Extraer valor | Guarda un campo JSON, un encabezado, el estado, el cuerpo o la coincidencia de una expresión regular como variable. Detalles |
| Rama por estado | Continúa por Sí o No según el estado. Detalles |
| Esperar solicitud HTTP | Espera a que llegue una solicitud — del sistema que pruebas — al propio escucha o emulador de la ejecución. Detalles |
| Emulador | Una API HTTP que responde por rutas durante toda la ejecución. Detalles |
Desde la línea de comandos
signallab send http envía una solicitud, como esta pantalla:
signallab send http GET http://127.0.0.1:8080/health --expect-status 200
signallab send http POST http://127.0.0.1:8080/api/items \
-H 'Content-Type: application/json' --body '{"name":"lamp"}'
signallab send http GET http://127.0.0.1:8080/private -u admin:secret --digestLa línea de estado va a la salida de error estándar y el cuerpo a la salida estándar:
HTTP 200 OK · 3 ms · 15 B
{"status":"ok"}| Opción | Qué | Predeterminado |
|---|---|---|
-H, --header 'Name: value' | Un encabezado; repítelo para más | — |
--body TEXT, --body @FILE | El cuerpo, o el contenido de un archivo | — |
--expect-status N | Sale con 1 salvo que el estado sea N | — |
--timeout MS | Cuánto esperar la respuesta | 10 000 |
-u, --user NAME:PASSWORD | Autenticación Basic | — |
--digest | Con --user: responder en su lugar al desafío Digest del servidor | — |
--bearer TOKEN | Authorization: Bearer TOKEN | — |
--json | Imprimir toda la respuesta como JSON en la salida estándar | — |
Sale con 0 cuando llegó una respuesta (y tenía el estado esperado), 1 cuando no llegó ninguna, el estado no era el esperado o un desafío Digest no se pudo responder, y 2 cuando una opción no es válida. No conserva ninguna cookie. Consulta Línea de comandos.
Problemas
| Lo que ves | Causa habitual |
|---|---|
… refused the connection — nothing is listening on that port | El servidor no se está ejecutando, o escucha en otro puerto o dirección. |
No answer from … in time | El servidor es lento o inalcanzable; comprueba la dirección, o sube Tiempo de espera (ms). |
Cannot resolve … | El nombre de host no resuelve en este equipo — una errata, o un nombre que solo conoce otra red. |
A secure connection to … could not be made | El certificado no es de confianza aquí (autofirmado, caducado, otro nombre), o TLS falló. Consulta Conexiones seguras. |
… is not a valid address | La URL está mal formada o no empieza por http:// o https://. |
| El servidor dice que falta el cuerpo o es del tipo equivocado | Ningún encabezado Content-Type que corresponda al cuerpo, o un cuerpo vacío. |
401 con Digest | Lee el mensaje bajo el estado: consulta Digest. |
| Omitidas por encima de 0 | Sube Concurrencia, o baja la tasa: el servidor responde más despacio de lo que la tasa necesita. |
| Fallidas alto aunque el servidor responda | Todo estado fuera de 200–299 cuenta como fallido, 404 y 500 incluidos. |
En un servidor, las solicitudes salen del servidor: 127.0.0.1 es el servidor mismo. Consulta Servidor.
Cada mensaje de error está en Mensajes de error.