Analizador de cabecera HTTP Link (RFC 8288) | Divide link-values en rel y parámetros
Pega una cabecera Link de una respuesta HTTP y divídela en link-values separados por comas; cada uno se descompone en su <URI>, sus tokens rel y parámetros como title. Un tokenizador consciente de comillas nunca corta por una coma que esté dentro de comillas o dentro de <>.
💡 Sobre esta herramienta
Llamas a una API paginada, ejecutas curl -I y recibes una cabecera Link que apila next, prev, first y last en una sola línea. Saber a ojo qué URI lleva cada rel es incómodo, y en cuanto la cadena de consulta contiene una coma o un valor title envuelve una coma entre comillas, un .split(",") ingenuo se rompe y deforma las URL.
Este analizador sigue la gramática de la sección 3 del RFC 8288: link-value = "<" URI ">" *( OWS ";" OWS link-param ). Primero divide por las comas de nivel superior llevando la cuenta de la profundidad de <> y del estado de las comillas, de modo que las comas dentro de un URI o de una cadena entre comillas se respetan. Después separa cada link-value por punto y coma en parámetros y extrae cada par name=value o name="entrecomillado", deshaciendo las secuencias con barra invertida dentro de las comillas. Obtienes cuatro contadores —link-values, tokens rel, rels únicos y parámetros totales— más una tarjeta por enlace con el rel mostrado como chips y el resto de parámetros como clave = valor.
🧐 Preguntas Frecuentes
P. ¿Qué pasa cuando rel tiene más de un valor?
R. rel es una lista de tokens separados por espacios, así que rel="prev next" es válido. Cada token se convierte en su propio chip y suma tanto al total de tokens rel como al recuento de rels únicos.
P. ¿Una coma dentro de un title entre comillas romperá la división?
R. No. Un valor como title="Página 2, borrador" conserva su coma; el analizador comprueba si está dentro de comillas antes de decidir dónde termina un link-value.
P. Mi URI tiene ; y , en la cadena de consulta. ¿Es un problema?
R. No. Todo lo que hay entre < y > se captura literalmente como el URI, así que los caracteres reservados de su interior nunca provocan una división.
P. Uno de mis link-values está mal formado. ¿Falla todo el análisis?
R. No. Un link-value sin < de apertura se omite de los recuentos y los demás link-values bien formados se siguen analizando.
P. ¿Hay un límite de entrada? R. La cabecera Link debe tener 20 000 caracteres o menos; una entrada más larga muestra un error.
📚 Datos Curiosos
La cabecera Link es, en esencia, el elemento HTML <link> ascendido a cabecera de respuesta. Nació en el RFC 5988 y hoy la estandariza el RFC 8288. La API REST de GitHub se apoya en rel="next"/rel="prev" para la paginación, y la era HTTP/2 popularizó rel="preload" como pista de descarga que los navegadores ejecutan antes de analizar el cuerpo. Los nombres de relación viven en el registro IANA de Link Relation Types, que reúne tokens conocidos como alternate, canonical y stylesheet, y la especificación también permite usar un URI absoluto como tipo de relación de extensión.