web-dev-qa-db-fra.com

Différence entre les codes de redirection HTTP

Les différences entre les différents codes de redirection HTTP 3XX ne me sont pas claires. Oui, j'ai lu la spécification, mais il semble y avoir un certain décalage entre la pratique standard et la pratique actuelle ici.

Le 301 Le code de redirection semble assez clair: cela signifie que la ressource a été déplacée de manière permanente vers un autre URI et que les futures requêtes doivent utiliser cet URI.

Et le 307 _ Le code de redirection semble également clair: cela signifie que la redirection est temporaire et que les futures requêtes doivent toujours utiliser l'URI d'origine.

Mais je ne peux pas dire quelle est la différence entre 302 et 303, ou pourquoi l’un d’eux est vraiment différent de 301. Il paraît que 302 était initialement destiné à être une redirection temporaire (comme 307), mais dans la pratique, la plupart des navigateurs le traitaient comme un 303. Mais quelle est la différence entre un 303 et un 301? Est 301 supposé vouloir dire que la redirection est plus permanent?

141
Channel72
  • 1: redirection permanente. Les clients qui font des demandes ultérieures pour cette ressource doivent utiliser le nouvel URI. Les clients doivent non suivre automatiquement la redirection pour les demandes POST/PUT/DELETE.
  • 2: redirection pour une raison non définie. Les clients qui font des demandes ultérieures pour cette ressource devraient non utiliser le nouvel URI. Les clients doivent non suivre automatiquement la redirection pour les demandes POST/PUT/DELETE.
  • : redirection pour une raison non définie. En règle générale, "L'opération est terminée, continuez ailleurs." Les clients qui font des demandes ultérieures pour cette ressource devraient non utiliser le nouvel URI. Les clients devraient suivent la redirection pour les demandes POST/PUT/DELETE, mais tilisez GET pour la demande suivante.
  • 7: redirection temporaire. La ressource peut revenir à cet endroit ultérieurement. Les clients qui font des demandes ultérieures pour cette ressource doivent utiliser l'ancien URI. Les clients doivent non suivre automatiquement la redirection pour les demandes POST/PUT/DELETE.

Personnellement, je recommande d'éviter 302 si vous avez le choix. De nombreux clients ne respectent pas les spécifications lorsqu'ils rencontrent un 302. Pour les redirections temporaires, vous devez utiliser 303 ou 307, en fonction du type de comportement souhaité pour les demandes non-GET. Préférez 307 à 303 sauf si vous avez besoin du comportement alternatif sur POST/PUT/DELETE.

127
Bob Aman

La différence entre 303 et 307 est la suivante:

: voir autre. La demande est reçue correctement, mais les résultats doivent être récupérés à l'aide de GET sur l'URL de redirection.

7: redirection temporaire. L'ensemble de la demande doit être redirigé vers la nouvelle URL. Toutes les données de publication doivent être réaffichées.

Notez que 2 devait avoir le comportement de 307, mais la plupart des navigateurs l'ont implémenté comme le comportement de 303 (les deux n'existaient pas à l'époque). Par conséquent, ces deux nouveaux codes ont été introduits pour remplacer le code 302.

La différence entre 301 et 303:

1: le document est déplacé. Les futures demandes doivent utiliser la nouvelle URL. Cette URL est obsolète.

Remarque: soyez prudent avec ce code. Les navigateurs et les mandataires ont tendance à appliquer une mise en cache très agressive. Par conséquent, si vous répondez avec un message 301, le retour à cette URL risque de prendre un certain temps.

: la demande est reçue correctement. Toutes les demandes PUT sont traitées. Le document résultant peut être récupéré à partir de l'URL de redirection. La demande future devrait toujours aller à l'URL d'origine.

76
GolezTrol