piapia123
es

Formato de cabeceras HTTP

Web

Todo se ejecuta en tu navegador: no se sube nada

Entrada
Arrastra un archivo aquí para cargarlo
Resultado

⚠️ No usa la red: las cabeceras de respuesta las obtienes tú. La forma más simple es `curl -I https://example.com` (con `-I` se envía solo HEAD, así que devuelve exactamente las cabeceras), o copiarlas del panel Red de las herramientas de desarrollo. Coloca en una tabla una pantalla llena de cabeceras HTTP: sirven tanto las de petición como las de respuesta, y la salida de `curl -I` se puede pegar tal cual. Además de alinear, se calculan de paso un par de cosas: `Content-Length` se convierte en un tamaño legible (`20480` no dice nada a simple vista), el charset de `Content-Type` se extrae aparte y el código de estado se separa de la línea de estado para poder consultarlo. ⚠️ En las respuestas también se comprueban tres cabeceras de seguridad que deberían estar: `X-Content-Type-Options` (sin ella, el navegador puede ejecutar un `.txt` subido por el usuario como script), `Strict-Transport-Security` (sin ella, la primera visita aún puede ir por HTTP en claro) y `Content-Security-Policy` (sin ella, un solo XSS lee todo lo de la página). Cuando investigas cómo han inyectado un sitio, lo primero que quieres ver es si está `Content-Security-Policy`. Dos puntos que se suelen fallar se tratan aquí conforme a la norma: las cabeceras repetidas nunca se fusionan (una respuesta puede llevar una docena de líneas `Set-Cookie`, y unirlas con comas cambia el significado, porque su valor ya puede contener comas); y las líneas de continuación se pliegan (una línea que empieza por un espacio continúa la anterior, un estilo que HTTP/1.1 dejó obsoleto pero que aún aparece en capturas y en pasarelas antiguas).

Funciones

  • Admite cabeceras de petición y de respuesta; la salida de `curl -I` sirve tal cual
  • Los nombres repetidos se conservan como filas separadas, nunca se fusionan (una docena de `Set-Cookie` es normal)
  • Las líneas de continuación se pliegan en una sola línea con un espacio
  • `Content-Length` se vuelve un tamaño legible; el charset de `Content-Type` se extrae
  • El código de estado se saca de la línea de estado para consultarlo con facilidad
  • Comprueba tres cabeceras de seguridad que falten y explica el coste de cada ausencia
  • Todo se analiza en tu dispositivo: las cabeceras nunca salen de él

Cómo se usa

  1. Pega las cabeceras en bruto a la izquierda (la salida de `curl -I https://…` sirve)
  2. Desactiva la comprobación de seguridad si no la quieres
  3. El resultado aparece al instante; cada fila se copia por separado
  4. Para mirar una cookie, lleva las líneas `Set-Cookie` a «Formato de cookies»

Preguntas frecuentes

¿Por qué hay dos filas con el mismo nombre de cabecera? ¿Está roto el análisis?
No: eso es correcto. HTTP permite que una cabecera aparezca más de una vez, y `Set-Cookie` es el caso habitual: una docena de líneas `Set-Cookie` en una respuesta es de lo más normal, cada una describe una cookie distinta. ⚠️ A propósito no se fusionan en una sola fila. Combinar valores repetidos con comas es HTTP válido, pero `Set-Cookie` es la excepción de siempre: su valor ya puede contener comas (por ejemplo la fecha `Expires=Wed, 21 Oct 2015 07:28:00 GMT`), y una vez unidos ya no hay forma de separarlos. El resultado es un análisis que parece haber salido bien mientras falta una cookie.
¿Qué es una «línea de continuación»?
Un estilo antiguo en que un valor largo se parte en varias líneas, y cada línea siguiente empieza por un espacio o un tabulador para marcar que continúa la anterior. ``` X-Custom: part one part two ``` Esas dos líneas son una sola cabecera cuyo valor es `part one part two`. RFC 7230 dejó obsoleto el estilo (se confunde con el cuerpo y es difícil de analizar bien), pero todavía aparece en herramientas de captura y pasarelas antiguas, así que aquí se trata y se etiqueta.
¿Tengo que añadir todas las cabeceras de seguridad que señala?
Depende, pero las tres merecen una mirada seria. `X-Content-Type-Options: nosniff` no cuesta prácticamente nada y debería estar en cualquier sitio: sin ella, el navegador puede tratar como script un archivo subido por el usuario. `Strict-Transport-Security` solo significa algo en HTTPS, y ojo: una vez servida es difícil retirarla (los navegadores recuerdan el `max-age`), así que empieza con un valor corto. `Content-Security-Policy` es la más valiosa y la más fácil de configurar mal: una política estricta de golpe dejará la página en blanco con toda probabilidad, así que empieza con `Content-Security-Policy-Report-Only` y recoge informes de infracción antes de cambiarla. Y una cosa más: estas tres solo tienen sentido en las respuestas, así que pegar una petición no activa la comprobación.

Herramientas relacionadas