Analizador de cabeceras HTTP

Pegue una petición o respuesta HTTP completa — el bloque que imprime curl -v, o lo que muestra el panel Red del navegador — y cada línea de cabecera se decodifica: el nombre, el valor, una frase en lenguaje sencillo sobre lo que hace y el documento que la define. Set-Cookie se desglosa atributo a atributo (Secure, HttpOnly, SameSite, Max-Age, Expires…), los parámetros de Content-Type y Accept se expanden, y el bloque se audita en busca de los problemas estructurales clásicos: líneas plegadas obsoletas, caracteres ilegales, cabeceras duplicadas y cabeceras enviadas en el sentido equivocado. Todo se ejecuta en su navegador y no se sube nada.
Automáticamente mira la primera línea: una línea de petición (GET /ruta HTTP/1.1) indica petición, una línea de estado (HTTP/1.1 200 OK) indica respuesta, y cualquier otra cosa se lee como un bloque suelto de cabeceras. Las otras opciones fuerzan el sentido, lo que cambia qué avisos se aplican.
Todavía no hay nada analizado. Pegue arriba un bloque de petición o respuesta y pulse Analizar cabeceras, o pulse Ejemplo para ver un caso resuelto.
Dónde conseguir un bloque que merezca la pena analizar. En un terminal, curl -v https://example.com/ 2>&1 imprime la petición y la respuesta con los prefijos > y <; quítelos y pegue. curl -sI https://example.com/ da solo el bloque de cabeceras de respuesta. En el navegador, abra las herramientas de desarrollo, pestaña Red, recargue, seleccione la petición del documento y use Copiar → Copiar cabeceras de respuesta; para el lado de la petición use Copiar como cURL y lea los indicadores. Un bloque simple de líneas Nombre: valor sin línea inicial también se analiza; en ese caso las comprobaciones de sentido se relajan.
Autoprueba
Vuelve a ejecutar el analizador sobre bloques fijos: detección de sentido, ambos conjuntos de ejemplo, todas las reglas de atributos de Set-Cookie (SameSite=None sin Secure, un Max-Age no numérico, un Expires roto, un atributo desconocido, una cookie sin signo igual), unión de líneas obs-fold, nombres de campo ilegales, cabeceras duplicadas, incoherencias de sentido y las rutas negativas. No se envía nada a ningún sitio.
¿Qué es una cabecera HTTP?
En una frase: un mensaje HTTP es una línea inicial, un bloque de líneas Nombre: valor llamadas cabeceras, una línea vacía y un cuerpo opcional — las cabeceras llevan todo lo referente al mensaje salvo el propio cuerpo: quién lo envió, qué puede aceptar, cómo se almacena en caché, cómo se autentica y qué espera el emisor de vuelta.
Las cuatro familias
FamiliaViaja enEjemplosResponde a la pregunta
Cabeceras de peticióncliente → servidorHost, Accept, Cookie, Referer, Authorizationlo que quiere el cliente y quién dice ser
Cabeceras de respuestaservidor → clienteLocation, Server, Set-Cookie, Retry-Afterlo que hizo el servidor y lo que pide a cambio
Cabeceras de representaciónambas, sobre el cuerpoContent-Type, Content-Length, Content-Encoding, ETagen qué formato está el cuerpo y de qué copia se trata
Cabeceras de controlambas, sobre la conexiónCache-Control, Connection, Via, Transfer-Encodingcómo se gestionan el mensaje y la conexión durante el trayecto

Algunas cabeceras son estrictamente unidireccionales: If-None-Match solo tiene sentido en una petición, y Set-Cookie solo en una respuesta. Analizar en el sentido equivocado es uno de los errores clásicos de depuración por copiar y pegar, y por eso esta página lo señala.

La gramática de una línea de cabecera

RFC 9110 define una línea de campo como field-name ":" OWS field-value OWS — un nombre formado solo por caracteres de token (letras, dígitos y !#$%&'*+-.^_`|~), dos puntos sin espacio antes, y un valor de caracteres visibles, espacios y tabuladores. Los nombres de cabecera no distinguen mayúsculas (content-type es igual que Content-Type); los valores casi siempre sí distinguen. Una línea que empieza por espacio o tabulador continuaba la cabecera anterior — obs-fold, obsoleta desde 2014: un proxy que la desplegue puede cambiar el significado de la cabecera, así que aquí el analizador la une pero le avisa de que existe.

Errores habituales
  • Confiar en X-Forwarded-For. Lo añade cada proxy del camino, y un cliente puede falsificar el primer salto. Le dice lo que afirma una cadena de proxies, no quién está conectado; trátela como una pista y prefiera un proxy que controle y que la sobrescriba.
  • Leer solo las cabeceras de respuesta. La mitad de los errores interesantes (un Accept duplicado, un Host ausente, una cabecera de autorización dirigida al host equivocado) están en la petición, que el navegador oculta por defecto. Use Copiar como cURL para ver las suyas.
  • Fusionar líneas de Set-Cookie. La mayoría de cabeceras duplicadas pueden combinarse con comas — Set-Cookie no, porque la coma aparece dentro del propio valor. Los navegadores tratan cada línea como una cookie separada.
  • Esperar que Content-Length sea el tamaño del cuerpo que escribió. Es el tamaño tras aplicar Content-Encoding, y solo cuando el mensaje no va en trozos; una respuesta con Transfer-Encoding: chunked no tiene una longitud única significativa.
  • Juzgar las cabeceras por su prefijo X-. La convención murió con el RFC 6648: X-Forwarded-For y X-Content-Type-Options son estándares de facto permanentes, mientras que muchas cabeceras sin X son experimentales. Juzgue por el documento que la define, no por el prefijo.
Preguntas frecuentes

¿Es seguro pegar cabeceras aquí? El análisis se realiza por completo en su navegador y no se sube nada. Aun así, un bloque de cabeceras copiado es una huella digital: las cookies, las cabeceras de autorización y el User-Agent exacto pueden identificarle juntos; analice solo bloques que no le importaría enseñar a un compañero.

¿Por qué mi navegador muestra cabeceras como :status que esta página considera errores? Son pseudocabeceras de HTTP/2 y HTTP/3: las capas de tramas binarias sustituyen la línea inicial y Host por campos pseudo. Esta página analiza el texto clásico de HTTP/1.1; las pseudocabeceras son la misma información después de que el protocolo la traduzca.

¿Qué pasó con X-XSS-Protection? Está obsoleta: el auditor que controlaba causó sus propios fallos de seguridad y los navegadores la eliminaron. Su función corresponde a una Content-Security-Policy — genere una con el generador de CSP y audite el conjunto completo con el comprobador de cabeceras de seguridad.

¿Cómo se comprueba un atributo de Set-Cookie? Según el RFC 6265: nombre y valor se separan en el primer signo igual, los atributos tras el primer punto y coma; Expires debe ser una fecha en formato de cookie, Max-Age dígitos, SameSite uno de Strict/Lax/None — y None sin Secure lo rechazan los navegadores actuales, así que se señala.

¿Puedo analizar solo una lista de líneas de cabecera? Sí: elija Solo bloque de cabeceras y pegue sin línea inicial. Las comprobaciones de sentido se relajan; lo demás (estructura, Set-Cookie, parámetros) sigue funcionando.