Quelle est la différence entre les codes d'état HTTP 301 et 308?

138

Quelle est la différence entre les codes HTTP 301et les 308codes d'état?

  • 301 (Déplacé de façon permanente): Cette demande et toutes les demandes futures doivent être dirigées vers l'URI donné.

  • 308 (Redirection permanente): La demande et toutes les demandes futures doivent être répétées en utilisant un autre URI.

Ils semblent similaires.

Alexandre Drobyshevsky
la source
Pas de code 308 dans tools.ietf.org/html/rfc2616 et tools.ietf.org/html/rfc6585 , donc la question doit être adressée à l'inventeur de ce code non standard.
KonstantinL
4
Il y a la spécification RFC 7538, donc c'est du vrai code HTTP
Alexander Drobyshevsky
2
Eh bien, tools.ietf.org/html/rfc7538 : Remarque: ce code d'état est similaire à 301, sauf qu'il ne permet pas de changer la méthode de requête de POST à ​​GET.
KonstantinL
4
N'utilisez pas la RFC 2616 comme référence. Il était obsolète par les RFC 7230-35.
cassiomolin

Réponses:

258

Un aperçu de 301, 302et307

La RFC 7231 , la référence actuelle pour la sémantique et le contenu du protocole HTTP / 1.1, définit le code d'état 301(déplacé de façon permanente) et 302(trouvé), qui permet de changer la méthode de demande de POSTà GET. Cette spécification définit également le 307code d'état (Redirection temporaire) qui ne permet pas de changer la méthode de demande de POSTen GET.

Voir plus de détails ci-dessous:

6.4.2. 301 Déménagé Définitivement

Le 301code d'état (déplacé de façon permanente) indique que la ressource cible a reçu un nouvel URI permanent et que toute référence future à cette ressource doit utiliser l'un des URI inclus. [...]

Remarque: Pour des raisons historiques, un agent utilisateur PEUT changer la méthode de demande de POSTà GETpour la demande suivante. Si ce comportement n'est pas souhaité, le 307code d'état (Redirection temporaire) peut être utilisé à la place.

6.4.3. 302 Trouvés

Le 302code d'état (Trouvé) indique que la ressource cible réside temporairement sous un URI différent. Étant donné que la redirection peut être modifiée à l'occasion, le client doit continuer à utiliser l'URI de demande effectif pour les demandes futures. [...]

Remarque: Pour des raisons historiques, un agent utilisateur PEUT changer la méthode de demande de POSTà GETpour la demande suivante. Si ce comportement n'est pas souhaité, le 307code d'état (Redirection temporaire) peut être utilisé à la place.

6.4.7. 307 Redirection temporaire

Le 307code d'état (Redirection temporaire) indique que la ressource cible réside temporairement sous un URI différent et que l'agent utilisateur NE DOIT PAS changer la méthode de demande s'il effectue une redirection automatique vers cet URI. Étant donné que la redirection peut changer avec le temps, le client doit continuer à utiliser l'URI de la demande effective d'origine pour les demandes futures. [...]

Remarque: Ce code d'état est similaire à 302(Trouvé), sauf qu'il ne permet pas de changer la méthode de demande de POSTà GET. Cette spécification ne définit aucune contrepartie équivalente pour 301(déplacé de façon permanente) (la RFC 7238 , cependant, définit le code d'état 308 (redirection permanente) à cet effet).

Le besoin de 308

La RFC 7238 a été créée pour définir le 308code de statut (Redirection permanente), qui est similaire à 301(Déplacé de manière permanente) mais ne permet pas de changer la méthode de demande de POSTà GET.

Le 308code d'état est maintenant défini par la RFC 7538 (qui a rendu obsolète la RFC 7238 ).

3. 308 Redirection permanente

Le 308code d'état (Redirection permanente) indique que la ressource cible a reçu un nouvel URI permanent et que toute référence future à cette ressource doit utiliser l'un des URI inclus. Les clients dotés de capacités d'édition de liens doivent automatiquement relier les références à l'URI de demande effectif à une ou plusieurs des nouvelles références envoyées par le serveur, lorsque cela est possible. [...]

Remarque: Ce code d'état est similaire à 301(Déplacé définitivement), sauf qu'il ne permet pas de changer la méthode de demande de POSTà GET.

Nous avons les éléments suivants:

                                                             +-----------+-----------+
                                                             | Permanent | Temporary |
+------------------------------------------------------------+-----------+-----------+
| Allows changing the request method from POST to GET        | 301       | 302       |
+------------------------------------------------------------+-----------+-----------+
| Doesn't allow changing the request method from POST to GET | 308       | 307       |
+------------------------------------------------------------+-----------+-----------+

Choisir le code de statut le plus approprié

Michael Kropat a rassemblé un ensemble de tableaux de décision qui aident à déterminer le meilleur code de statut pour chaque situation. Consultez les informations suivantes pour les codes d'état 2xxet 3xx:

Choisir un code d'état 2xx ou 3xx

cassiomoline
la source
3
Étant donné que la question était spécifiquement sur le destinction entre 301 et 308, pourriez - vous donner quelques explications sur: « ne permet à la méthode de demande à changer de POSTde GET» ? Cela signifierait-il qu'un formulaire posté ne peut pas être traité, mais qu'un nouveau formulaire pourrait être mis en service puis posté lors d'une prochaine demande?
R. Schreurs
1
Ce projet de spécification ( tools.ietf.org/id/draft-hunt-http-rest-redirect-00.html ) suggère que les services ReSTful devraient utiliser 308 même pour les GET. "Les codes de redirection HTTP 301-306 NE DEVRAIENT PAS être utilisés à moins que le fournisseur de services ne sache que le client est en fait un agent utilisateur." Cependant, ce n'est qu'un brouillon. Je ne sais pas si / quand il sera accepté.
Bruce Adams
1
Cet article, the-definitive-guide-to-get-vs-post , explique pourquoi autoriser une POSTdemande (sûre) à être changée en un to GET(dangereux dans la mesure où les données sont transmises en l'ajoutant à l'URL - et les URL peuvent être enregistrées - y compris les mots de passe) peut être un problème de sécurité et doit généralement être évité, à moins que vous ne sachiez qu'il est prudent de le modifier. De nos jours, il semble qu'il soit généralement pris en charge et qu'il préfère utiliser 307, 308 plutôt que 301, 302. Mais vous devez vérifier.
SherylHohman
1
Mnemonic 308est comme un infini latéral, donc Redirection permanente, et ne changez jamais la méthode de demande - c'est aussi un type de demande permanent et fixe. Ensuite, se 307trouve l' 1étape ci-dessous - Méthode de demande permanente / de conservation (Get / Post), mais redirection vers un emplacement temporaire: 7 - ressemble à "virage à gauche" ou détour temporaire, et 7 est également similaire à k, alors "gardez" le méthode de demande.
SherylHohman
Vous avez oublié de mentionner CV incomplet .
Knu