HTTPQUERY
Français

103 Early Hints

Utilisation

Lorsqu’un serveur envoie 103 Early Hints, le client interprète les en-têtes Link et précharge les ressources indiquées. C’est particulièrement utile lorsque le serveur a besoin de temps pour traiter la requête avant d’assembler la réponse finale. Pendant que le serveur travaille, le client met ce temps à profit pour charger les feuilles de style, les images ou les scripts dont la page finale a besoin.

Remarque

Plusieurs réponses 103 Early Hints sont envoyées en amont de la réponse HTTP finale.

Les indications ne sont pas des garanties

Dans tout système reposant sur la prédiction, la précision varie. Lorsqu’un serveur renvoie 103 Early Hints en suggérant au client de récupérer certaines ressources, cette suggestion repose sur une hypothèse raisonnable. Seule la réponse HTTP finale fournit des en-têtes Link faisant autorité.

L’écart entre les indications et les en-têtes finaux se manifeste de deux façons : la réponse finale exige des ressources supplémentaires non mentionnées dans les indications, ou les ressources récupérées à la suite des indications précoces s’avèrent inutiles. Dans ce second cas, le client a effectué un travail supplémentaire sans bénéfice et la durée totale de la transaction augmente.

Les opérations effectuées à partir des indications précoces sont sûres. Par exemple, l’utilisation d’une méthode GET ne modifie pas l’état du serveur.

Impact SEO

103 Early Hints est une réponse informationnelle qui précède le code de statut final. Les robots d’exploration des moteurs de recherche traitent la réponse finale, et non les réponses informationnelles intermédiaires. Les gains de performance apportés par les indications précoces concernent les navigateurs, pas les robots. Ce code de statut s’utilise sans risque et n’interfère pas avec la façon dont Google traite la page.

Remplacement du server push

Le mécanisme 103 Early Hints est destiné à remplacer le mécanisme de server push, dans le cadre du framework de resource hints reposant sur rel=preload, dans les navigateurs modernes. Contrairement au server push, 103 Early Hints ne dépend pas de la réponse finale pour que le navigateur commence à récupérer les ressources indiquées.

Remarque

Pour des raisons de sécurité, les navigateurs limitent l’usage de 103 Early Hints aux seules connexions HTTP/2 et HTTP/3.

Exemple

Le client demande un fichier index.html et le serveur renvoie trois indications sur les ressources probablement nécessaires. Le fichier demandé ne figure pas dans le corps du message parce que le serveur est encore en train de générer la réponse. Le client commence à charger les ressources indiquées par chaque directive Link.

Après un court délai, le serveur renvoie la réponse finale 200, accompagnée des directives Link officielles et de index.html dans le corps du message. Notez les différences entre les indications précoces et la liste finale des ressources.

Requête

GET /index.html HTTP/1.1
Host: example.com

Réponse

HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </images/logo.svg>; rel=preload; as=image
Link: </videos/instructions_simple.mp4>; rel=preload; as=video

<there is a short pause in the transmission>
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 100
Link: </style.css>; rel=preload; as=style
Link: </images/logo.svg>; rel=preload; as=image
Link: </images/pro_badge.svg>; rel=preload; as=image
Link: </videos/instructions_advanced.mp4>; rel=preload; as=video

<message body will follow>

La première ressource indiquée, style.css, est récupérée et traitée par le client, tout comme l’image du logo et la vidéo instructions_simple.mp4. La feuille de style et le logo sont utilisables en l’état. L’image pro_badge présente dans la réponse finale n’apparaît pas dans les indications : le client récupère donc cette ressource à la réception de la réponse finale.

La vidéo instructions_advanced.mp4 des en-têtes Link finaux diffère de l’indication précoce. Le serveur avait suggéré instructions_simple.mp4 via les indications précoces, mais cette récupération était inutile. La vidéo nouvellement indiquée doit encore être récupérée et traitée avant que index.html ne s’affiche entièrement, ce qui allonge probablement le temps de chargement puisque deux vidéos ont été récupérées au lieu d’une.

Références de code

.NET

HttpStatusCode.EarlyHints

Rust

http::StatusCode::EARLY_HINTS

Rails

:early_hints

Go

http.StatusEarlyHints

Symfony

Response::HTTP_EARLY_HINTS

Python3.9+

http.HTTPStatus.EARLY_HINTS

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_EARLY_HINTS

Angular

@angular/common/http/HttpStatusCode.EarlyHints