103 Early Hints

Accélérez les ressources critiques avec 103 Early Hints

Arjen Karel Core Web Vitals Consultant
Arjen Karel - linkedin
Last update: 2024-11-27

"103 Early hints" en bref

Le 103 Early hints est un en-tête serveur léger et "non final" avec le code d'état 103 et le nom Early Hints. Cet en-tête est spécial car il est envoyé avant que la "vraie" réponse du serveur ne soit envoyée. Votre navigateur peut utiliser cet en-tête pour récupérer des ressources critiques avant que la page ne soit reçue et rendue.

Les tests montrent que sans 103 resource hints, une image LCP apparaît 45 % plus lentement à l'écran. L'amélioration était encore plus grande lorsque l'en-tête 103 incluait également des feuilles de style.

Exemple de chaîne de requêtes critiques

Qu'est-ce que 103 - Early hints ?

Early hints est un en-tête HTTP qui est envoyé avant que le serveur web n'envoie la réponse HTTP finale. Les en-têtes HTTP permettent au client et au serveur de transmettre des informations supplémentaires avec une requête ou une réponse HTTP.
Cet en-tête HTTP permet au serveur de signaler au navigateur du client, à un stade précoce du processus de chargement, que certaines ressources, telles qu'une image ou une feuille de style, sont "critiques" pour le rendu de la page.
Les Early resource hints sont une amélioration par rapport au Server Push HTTP/2 retiré, où les resource hints étaient regroupés avec la réponse finale du serveur. La différence avec le Server Push est que les resource hints peuvent être reçus beaucoup plus tôt, de sorte que le navigateur peut également commencer le téléchargement plus tôt.

Comment un navigateur utilise-t-il 103 - Early hints ?

Les Early hints ne sont actuellement supportés que par Google Chrome à partir de la version 94. Comme Early hints est encore une fonction expérimentale, vous devrez lancer Chrome avec un soi-disant Chrome Browser Flag depuis la ligne de commande. Dans mon cas, je dois lancer Chrome depuis le terminal avec la commande :

google-chrome --enable-features=EarlyHintsPreloadForNavigation

Les Early hints ne fonctionnent pas lorsque :

  • Des Early hints provenant d'une source autre que le sujet principal (le HTML) sont envoyés
  • Des Early Hints sont envoyés depuis une iframe
  • Des Early hints sont envoyés via HTTP/1.1 ou antérieur
  • Des Early hints contiennent un dns-prefetch ou un prefetch hint

Les Early hints ne fonctionneront que pour les resource hints preload et preconnect lorsqu'ils sont envoyés depuis le document principal via HTTP2 ou HTTP/3. Il n'est pas permis de passer l'en-tête early hints depuis, par exemple, une image ou une iframe.

À quoi ressemblent les 103 Early hints ?

Après l'implémentation de 103 Early hints, dès qu'un navigateur demande une page web, un en-tête 103 Early hints est immédiatement renvoyé. Par exemple, cet en-tête indique que image.webp et style.css doivent être préchargés.

HTTP/1.1 103 Early Hints
Link: </image.webp>; rel=preload; as=image
Link: </style.css>; rel=preload; as=style

Pendant ce temps, le serveur peut commencer à générer la "vraie" réponse HTTP. Pour les pages dynamiques, cela peut prendre un peu de temps. Une fois que le serveur est prêt à l'envoyer, la réponse finale est envoyée.

HTTP/1.1 200 OK
Date: Thurs, 16 Sept 2021 11:30:00 GMT
Content-Length: 1234
[le reste de la réponse]

Envoyer 103 Early hints

En termes de PageSpeed, l'approche la plus rapide pour envoyer 103 Early hints est via votre propre serveur. Utilisez ce guide pour configurer 103 Early hints vous-même sur le serveur web Apache ou via le module NGINX expérimental. Activer 103 Early hints n'est pas facile à faire et les early hints ne s'intègrent pas encore bien avec les CMS populaires comme WordPress.

C'est pourquoi le moyen le plus simple actuellement pour activer les early hints est via Cloudflare. Inscrivez-vous pour early hint. Une fois admis, naviguez vers "Speed" -> "Optimization" et activez Early Hints

early hints cloudflare

Cloudflare acceptera les en-têtes resource hint et les traduira en un en-tête 103 early resource. Vous pouvez simplement envoyer un early hint en envoyant un en-tête preload ou preconnect. Cloudflare traduit ensuite cela en un en-tête 103 early hint.
Avec PHP et Cloudflare, les 103 Early hints peuvent être envoyés avec ce code :

header("Link: </image.webp>; rel=preload; as=image", false);
header("Link: </style.css>; rel=preload; as=style", false);

Résultats Lighthouse pour 103 Early hints

La question la plus importante est bien sûr : "Que signifie 103 early resource pour mes Core Web Vitals ?" J'ai testé 2 scénarios courants.

1. Early resource hint sur l'élément LCP

Immédiatement après le premier test, j'ai remarqué à quel point les early hints peuvent être efficaces. L'élément LCP (une image) est apparu à l'écran 35 % plus tôt que sans l'en-tête 103 Early hints présent.

HTTP/1.1 103 Early Hints
Link: </image.webp>; rel=preload; as=image
Préchargement uniquementlcp no early hints
103 Early hintslcp early hints

2. Early resource hint avec une grande feuille de style et l'élément LCP

Pour le deuxième test, j'ai ajouté un fichier CSS de 85 ko à la page. La différence dans les résultats Core Web Vitals est encore plus notable. Le First Contentful Paint (FCP) s'est amélioré de 1,8 seconde à 1,4 seconde et le Largest Contentful Paint (LCP) s'est amélioré de 3,2 secondes à seulement 2 secondes.

HTTP/1.1 103 Early Hints
Link: </image.webp>; rel=preload; as=image
Link: </style.css>; rel=preload; as=style

Préchargement uniquementlcp css no early hints
103 Early hintslcp css early hints

Make decisions with Data.

You cannot optimize what you do not measure. Install the CoreDash pixel and capture 100% of user experiences.

Create Free Account >>

  • 100% Capture
  • Data Driven
  • Easy Install
103 Early HintsCore Web Vitals 103 Early Hints