web-dev-qa-db-fra.com

Que signifie exactement HTTP / 1.1 302?

Un article que j'ai lu une fois disait que cela signifiait sauter (d'un URI à un autre), mais j'ai détecté ce "302" même s'il n'y avait pas du tout de saut!

105
omg

Une redirection 302 signifie que la page a été temporairement déplacée, alors qu'une relance 301 signifie qu'elle a été déplacée de manière permanente.

Les valeurs 301 sont bonnes pour la valeur de référencement, tandis que les valeurs 302 ne le sont pas, car les instructions 301 demandent aux clients d'oublier la valeur de l'URL d'origine, tandis que les valeurs 302 conservent la valeur de l'original et peuvent donc potentiellement réduire la valeur en créant deux adresses URL distinctes chacun produit le même contenu (les moteurs de recherche les considèrent comme des doublons distincts plutôt que comme une seule ressource portant deux noms).

69
CodeMonkey1313

Cette question a été posée il y a longtemps, alors que le RFC 2616 traînait toujours. Certaines réponses à cette question sont basées sur ce document, qui n’est plus pertinent de nos jours. Citant Mark Nottingham qui, au moment de la rédaction de cet article, copréside les groupes de travail HTTP et QUIC de l’IETF:

N'utilisez pas la RFC2616 . Supprimez-le de vos disques durs, de vos signets et gravez (ou recyclez de manière responsable) toutes les copies imprimées.

L'ancienne RFC 2616 a été remplacée par les documents suivants qui, ensemble, définissent le protocole HTTP/1.1:

Je vise donc à fournir une réponse basée sur le RFC 7231 qui est la référence actuelle pour les codes d’état HTTP/1.1.

Le code d'état _302_

Une réponse avec 302 est un moyen courant d’exécuter une redirection d’URL. Avec le code d'état 302 , la réponse doit inclure un en-tête Location avec un autre URI. Cet en-tête sera analysé par l'agent d'utilisateur, puis effectuera la redirection:


Redirection example


Les navigateurs Web peuvent passer de POST à GET dans la requête suivante. Si ce comportement n'est pas souhaité, le code d'état 307 (redirection temporaire) peut être utilisé à la place.

Voici comment le code d'état 302 est défini dans le RFC 7231 :

6.4.3. 302 trouvé

Le code d'état _302_ (trouvé) indique que la ressource cible réside temporairement sous un autre URI. É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.

Le serveur DEVRAIT générer un champ d’en-tête Location dans la réponse contenant une référence d’URI pour les différents URI. L'agent d'utilisateur PEUT utiliser la valeur du champ Location pour la redirection automatique. La charge utile de réponse du serveur contient généralement une courte note hypertexte avec un lien hypertexte vers le ou les différents URI.

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

Selon Web Docs MDN de Mozilla , un cas d'utilisation typique de 302 est:

La page Web n'est temporairement pas disponible pour des raisons qui n'ont pas été imprévues. De cette façon, les moteurs de recherche ne mettent pas à jour leurs liens.

Autres codes d'état pour la redirection

Le RFC 7231 définit les codes d'état suivants pour la redirection:

  • 301 (déplacé de façon permanente)
  • 302 (trouvé)
  • 307 (redirection temporaire)

Le RFC 7238 a été créé pour définir un autre code d'état pour la redirection:

  • 308 (redirection permanente)

Reportez-vous à ceci réponse pour plus de détails.

47
cassiomolin

Une manière simple de regarder les redirections HTTP 301 vs. 302 est la suivante:

Supposons que vous ayez un signet " http://sample.com/sample ". Vous utilisez un navigateur pour y aller.

À ce stade, une redirection 302 vers une URL différente signifierait que vous devez conserver votre signet au format " http://sample.com/sample ". En effet, l'URL de destination peut changer dans le futur.

Une redirection 301 vers une autre URL signifierait que votre signet doit changer pour indiquer la nouvelle URL car il s'agit d'une redirection permanente.

24
Redbeard

From RFC 2616 (spécification du protocole de transfert d'hypertexte) :

 10.3.3 302 trouvé 
 
 La ressource demandée réside temporairement sous un autre URI. 
 La redirection pouvant parfois être modifiée, le client DEVRAIT [.____]. .] continuer à utiliser l'URI de demande pour les demandes futures. Cette réponse 
 Ne peut être mise en cache que si elle est indiquée par un champ 
 D'en-tête Cache-Control ou Expires. 
 
 L'URI temporaire DEVRAIT être indiqué par le champ Location du champ 
 réponse. À moins que la méthode de la requête ne soit HEAD, l'entité de la réponse 
 DEVRAIT contenir une courte note hypertexte avec un hyperlien vers 
 Le ou les nouveaux URI. 

La source:

http://www.ietf.org/rfc/rfc2616.txt

10
Reginaldo

Comme indiqué dans le définitions du code d'état http , un 302 indique une redirection (temporaire). "La ressource demandée réside temporairement sous un autre URI"

5
Mitchell McKenna

302 est une réponse indiquant le changement d'emplacement de la ressource - "Trouvé".

L'URL où la ressource devrait maintenant être située doit figurer dans l'en-tête de réponse 'Location'.

Le "saut" doit être effectué par le client demandeur (faites une nouvelle demande à l'URL de la ressource dans le champ d'en-tête d'emplacement de réponse).

5
Demi

En termes de référencement, 301 et 302 sont bons, cela dépend de la situation,

Si une seule version peut être renvoyée (c’est-à-dire que l’autre redirige vers elle), c’est génial! Ce comportement est avantageux car il réduit le contenu en double. Dans le cas particulier des redirections vers les URL de fin de barre oblique, nos résultats de recherche indiqueront probablement la version de l’URL avec le code de réponse 200 (le plus souvent, l’adresse de fin de barre oblique), qu’il s’agisse d’une redirection de type 301 ou 302.

5
Sunil

De Wikipedia :

Le code d'état de réponse HTTP 302 trouvé est le moyen le plus courant d'effectuer une redirection. C'est un exemple de pratique industrielle en contradiction avec la norme.

4
Paul Sonier

Le code HTTP 302 est destiné à la redirection, voir http://en.wikipedia.org/wiki/HTTP_302 .

Il indique au navigateur en train de lire une page d'aller ailleurs et de charger une autre page. Son utilisation est très courante.

2
BeWarned

Selon RFC 1945/Protocole de transfert d'hypertexte - HTTP/1. :

   302 Moved Temporarily

   The requested resource resides temporarily under a different URL.
   Since the redirection may be altered on occasion, the client should
   continue to use the Request-URI for future requests.

   The URL must be given by the Location field in the response. Unless
   it was a HEAD request, the Entity-Body of the response should
   contain a short note with a hyperlink to the new URI(s).

   If the 302 status code is received in response to a request using
   the POST method, the user agent must not automatically redirect the
   request unless it can be confirmed by the user, since this might
   change the conditions under which the request was issued.

       Note: When automatically redirecting a POST request after
       receiving a 302 status code, some existing user agents will
       erroneously change it into a GET request.
1