HTTPS et HSTS : les redirections 307 sont fictives pour Google

Mathieu Chartier SEO 0 commentaire

La migration d'un site vers HTTPS est fastidieuse et il est souvent recommandé d'utiliser le protocole HSTS (HTTP Strict Transport Security) pour faciliter le passage des URL en HTTP vers HTTPS. HSTS permet de passer directement à la version sécurisée des pages web, et la redirection retournée est généralement la 307 (redirection interne).

Le 28 octobre 2014, le site Search Engine Roundtable avait traité de ce sujet, montrant ainsi une capture des entêtes récupérées (redirections) lorsqu'un site était migré vers HTTPS en utilisant HSTS. Barry Schwartz avait insisté sur le fait que les navigateurs retournaient un code 200 (chargement réussi) en HTTPS et un 307 lorsque l'on tapait l'URL en HTTP.

Redirection 307 "interne" et transparente pour Google avec HTTPS et HSTS

John Mueller a apporté des précisions à ce sujet sur Google+ (traduction rapide) :

HTTPS et HSTS : 301, 302 ou 307 ? Si la combinaison de ces lettres et nombres ne signifie rien pour vous, vous seriez curieux d'apprendre pourquoi Chrome vous affiche une redirection 307 pour les pages utilisant HSTS.

En fait, c'est assez simple. Après avoir vu l'URL HTTPS avec l'entête HSTS (par exemple, avec une redirection issue de la version HTTP), Chrome considèrera qu'il voit une redirection 307 chaque fois que vous essaierez d'accéder à la page HTTP. Votre serveur ne retourne pas une 307, Chrome vous montre juste ceci pour expliquer qu'il fait une redirection pour vous. Vous pouvez confirmer cela en observant la taille de la réponse : "0 bytes" pour la "redirection" 307. En d'autres termes, la 307 n'est pas du tout une redirection en fait, c'est juste un "placeholder" (texte de remplacement, NDLR).

La redirection 307 affichée par Chrome avec HSTS n'est qu'un leurre (redirection interne)

Zineb Ait Mahajji en a rajouté une couche sur Twitter à ce sujet :

Avec l'implémentation d'HSTS, Googlebot voit une redirection 301 (testez avec "Explorer comme Google"). La 307 est juste une "redirection interne". Le navigateur décide simplement de ne même pas appeler la version HTTP. Il utilise une "redirection interne" 307 pour aller directement à la version HTTPS, sans faire appel au serveur.

Au moins, avec ces deux réponses détaillées, le message est clair, même si en réalité, nous aurions dû nous en douter. En effet, la redirection 307 est une redirection temporaire fictive côté client (appelée "redirection interne", comme le dit à juste titre Zineb), contrairement aux redirections 302 qui sont temporaires côté serveur. Par conséquent, le code retourné par Google Chrome ne peut servir que d'indication (ou de "placeholder" comme le dit si bien John Mueller) pour préciser que HSTS force le passage vers HTTPS.