Analyseur d'en-tête HTTP Link (RFC 8288) | Décomposer les link-values en rel et paramètres
Collez un en-tête Link d'une réponse HTTP et décomposez-le en link-values séparés par des virgules ; chacun est divisé en son <URI>, ses jetons rel et ses paramètres comme title. Un analyseur conscient des guillemets ne coupe jamais sur une virgule placée à l'intérieur de guillemets ou de <>.
💡 À propos de cet outil
Vous interrogez une API paginée, vous lancez curl -I et vous récupérez un en-tête Link qui empile next, prev, first et last sur une seule ligne. Déterminer à l'œil quel URI porte quel rel est pénible, et dès qu'une chaîne de requête contient une virgule ou qu'une valeur title enferme une virgule entre guillemets, un .split(",") naïf casse et déforme les URL.
Cet analyseur suit la grammaire de la section 3 du RFC 8288 : link-value = "<" URI ">" *( OWS ";" OWS link-param ). Il découpe d'abord sur les virgules de premier niveau en suivant la profondeur des <> et l'état des guillemets, si bien que les virgules à l'intérieur d'un URI ou d'une chaîne entre guillemets sont préservées. Chaque link-value est ensuite découpé sur les points-virgules en paramètres, et chaque paire name=value ou name="entre guillemets" est extraite, en retirant les séquences d'échappement par barre oblique inverse à l'intérieur des guillemets. Vous obtenez quatre compteurs — link-values, jetons rel, rels uniques et paramètres totaux — ainsi qu'une carte par lien avec le rel affiché en chips et les autres paramètres en clé = valeur.
🧐 Questions fréquentes
Q. Que se passe-t-il lorsque rel contient plusieurs valeurs ?
R. rel est une liste de jetons séparés par des espaces, donc rel="prev next" est valide. Chaque jeton devient son propre chip et alimente à la fois le total des jetons rel et le décompte des rels uniques.
Q. Une virgule dans un title entre guillemets va-t-elle casser le découpage ?
R. Non. Une valeur comme title="Page 2, brouillon" conserve sa virgule ; l'analyseur vérifie s'il se trouve entre guillemets avant de décider où se termine un link-value.
Q. Mon URI contient ; et , dans la chaîne de requête. Est-ce un problème ?
R. Non. Tout ce qui se trouve entre < et > est capturé tel quel comme URI, donc les caractères réservés qu'il contient ne déclenchent jamais de découpage.
Q. L'un de mes link-values est mal formé. L'analyse entière échoue-t-elle ?
R. Non. Un link-value sans < d'ouverture est exclu des décomptes, et les autres link-values bien formés sont quand même analysés.
Q. Y a-t-il une limite de saisie ? R. L'en-tête Link doit faire 20 000 caractères ou moins ; une saisie plus longue affiche une erreur.
📚 Le saviez-vous
L'en-tête Link est essentiellement l'élément HTML <link> promu au rang d'en-tête de réponse. Il est né dans le RFC 5988 et est aujourd'hui normalisé par le RFC 8288. L'API REST de GitHub s'appuie sur rel="next"/rel="prev" pour la pagination, et l'ère HTTP/2 a popularisé rel="preload" comme indice de récupération que les navigateurs exécutent avant d'analyser le corps. Les noms de relation sont tenus dans le registre IANA des Link Relation Types, qui rassemble des jetons connus comme alternate, canonical et stylesheet, et la spécification autorise aussi l'usage d'un URI absolu comme type de relation d'extension.