Il semble que, depuis que le web est ce qu’il est, la façon officielle de faire une redirection temporaire est d’envoyer au navigateur web le code HTTP 302. Un collègue m’est arrivé avec cette remarque l’autre jour. Pourquoi utiliser le code HTTP 302 pour faire une redirection temporaire alors que le code 307 Temporary Redirect existe?
Une mise en contexte s’impose
La première, la plus connue, est la redirection 301. Cette redirection, permanente, permet d’indiquer que la ressource demandée sera dorénavant accessible à une nouvelle adresse. La deuxième est la 302. Cette redirection est un utilitaire lorsqu’il est temps de déplacer un visiteur sur une autre page sans affecter l’indexation d’une page.
Cette affirmation est vraie. En particulier pour le monde du SEO où ces deux codes HTTP font foi de tout lorsqu’il est temps d’indexer une page web.
Alors donc, pourquoi parlons-nous encore du code HTTP 302 pour les redirections temporaires alors qu’il existe un code ayant une définition plus claire et pertinente? La raison est simple. Le code HTTP 307 appartient à la révision 1.1 du protocole HTTP. Cela veut dire qu’aux débuts d’internet, il y avait uniquement le code 302 et c’est ainsi que nous avons pris l’habitude de l’utiliser.
Comme HTTP/1.1 est un ajout à la version 1.0 de la spécification du protocole, les deux codes cohabitent parfaitement. D’autant plus que, le protocole HTTP étant ce qu’il est, il revient au client web de spécifier quelle version du protocole HTTP il préfère communiquer avec le serveur. Certains clients HTTP vont indiquer une préférence pour HTTP/1.0, malgré ses limitations, afin de bénéficier de la souplesse du protocole sur le nombre de connexions simultanées à un serveur.
Comment faire une redirection 307 avec ASP.NET MVC 5
Alors donc, si la rétrocompatibilité absolue envers les clients HTTP n’est pas votre genre, sachez qu’il est possible de faire une redirection HTTP 307 avec ASP.NET MVC sans problèmes.
De plus, considérez ceci. Les chances que vous aillez à supporter un client exigeant uniquement HTTP/1.0 sont assez minces. En particulier si vous faites du développement web comme moi. Pensez-y. Les sites que j’ai récemment développés sont uniquement compatibles avec Internet Explorer 9 et plus. Pas de problèmes de ce côté, n’est-ce pas?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public ActionResult About() | |
{ | |
HttpContext.Response.AddHeader("Location", "/Home/Contact"); | |
return new HttpStatusCodeResult(307); | |
} |
Ce code va produire les requêtes HTTP suivantes:
Une dernière pensée à ce sujet
À cette époque-ci, il est de moins en moins nécessaire de connaitre par cœur tous les codes HTTP pour arriver à faire du développement web. Toutefois, il est vraiment important de connaitre certains essentiels. Notamment comment les codes sont regroupés.
Est-ce que vous vous demandez quel est le rapport avec les redirections HTTP? Il y en a très peu, en fait. C’est juste que j’ai trouvé le tweet assez drôle et tant qu’à être dans le sujet du protocole HTTP, je n’ai pas pu m’empêcher!