Dois-je utiliser le code de redirection http 302 ou 307?
Supposons que j'ai une page sur mon site de communiqués de presse pour le mois en cours
http://www.mysite.com/mediareleases.aspx
Et pour des raisons qui il est banal d'aller dans*, cette page DOIT être donnée une chaîne de requête avec le jour du mois en cours afin de produire cette liste:
http://www.mysite.com/mediareleases.aspx?prevDays=18
En tant que telle, j'ai besoin de rediriger les clients demandant des http://www.mysite.com/mediareleases.aspx
à http://www.mysite.com/mediareleases.aspx?prevDays=whateverDayOfTheMonthItIs
Ma question est, si je veux à google d'indexer la page sans le paramètre de requête, dois-je utiliser le code d'état 302 ou 307 pour effectuer la redirection?
À la fois d'indiquer que la page est "temporairement" déplacé - qui est ce que je veux, parce que la page "déplace" chaque jour, si vous avez mon sens.
[*] Je suis l'aide d'une fonction d'un code source fermé .NET CMS donc mes mains sont liées.
source d'informationauteur Iain Fraser
Vous devez vous connecter pour publier un commentaire.
Google documents semble indiquer que les deux 302 et 307 sont traités de façon équivalente, et que "Googlebot va continuer d'explorer et d'indexer l'emplacement d'origine."
Mais, face à l'ambiguïté, vous pourriez aussi bien creuser dans la Rfc et essayer de faire la bonne Chose, avec l'espoir naïf que les robots vont faire la même chose. Dans ce cas, La RFC 2616 § 10.3 contient près de définitions identiques pour chaque code de réponse, à une exception près:
Qui ne frappe pas de moi comme d'une distinction importante. Ma lecture est que, 302 charge les clients que les webmasters ne sont pas crédibles, et 307 indique explicitement les webmasters que les clients feront pas confiance en eux, de sorte qu'ils peuvent librement modifier la redirection.
Je pense que le plus révélateur est le point de la note 302 définition:
Qui, pour moi, indique que 302 et 307 sont largement équivalentes, mais que les clients HTTP/1.0 a échoué à mettre en œuvre 302 correctement la première fois.
Courte réponse: aucun. Dans la plupart des cas, le code que vous voulez vraiment utiliser est de 303.
Pour la réponse longue, nous avons d'abord besoin d'un peu de fond.
Lors de l'obtention d'un code de redirection le client peut (A) charger le nouvel emplacement à l'aide du même type de demande ou (B) il peut le remplacer et à utiliser GET.
HTTP 1.0 spec n'ont pas de 303 et 307, elle ne comptait 302, qui a mandaté le comportement (A). Mais dans la pratique, il a été découvert que (Un) conduit à un problème avec l'envoyé des formulaires.
Dire que vous avez un formulaire de contact, le visiteur remplit et soumet et le client obtient une 302 à une page qui dit "merci, nous reviendrons vers vous". Le formulaire a été envoyé à l'aide de POST, donc la page de remerciement est également chargé à l'aide de POST. Supposons maintenant que le visiteur frappe recharger; la demande est renvoyé de la même manière qu'il a obtenu la première fois, c'est avec un POST (et la même charge utile dans le corps). Résultat final: le formulaire est soumis deux fois (et une fois de plus, pour chaque recharge). Même si le client demande à l'utilisateur une confirmation avant de faire ça, c'est toujours gênant dans la plupart des cas.
Ce problème est devenu si répandu que client producteurs ont décidé de remplacer la spécification et la question des demandes pour l'emplacement redirigé. En gros, c'est un oubli dans le protocole HTTP 1.0 spec. Ce que les clients le plus besoin était 303 (et le comportement (B) ci-dessus), mais au lieu de cela, ils ont seulement reçu 302 (et (A)).
Si HTTP 1.0 aurait offert à la fois 302 et 303 il n'y aurait eu aucun problème. Mais il n'a pas, donc il en est résulté un 302 laquelle personne ne s'en sert correctement. Donc, HTTP 1.1 ajouté 303 (cruellement), mais a également décidé d'ajouter 307, ce qui est techniquement identique à 302, mais une sorte de "explicite 302"; il dit "ouais, je sais que les questions entourant 302, je sais ce que je fais, de me donner de comportement (A)".
Maintenant, revenons à notre question. Vous voyez maintenant pourquoi dans la plupart des cas, vous voudrez 303.
Cas où vous souhaitez conserver le type de demande sont très rares. Et si vous ne vous trouvez un tel cas, la réponse est simple: utiliser 302. Le client parle de HTTP 1.0, auquel cas il ne peut pas comprendre 307; ou il parle de HTTP 1.1, ce qui signifie qu'il n'a aucune raison de conserver le rebelious comportement de vieux clients de l'ie. il met en œuvre 302 correctement, afin de l'utiliser!
5 ans sur... notez que le comportement de la 307 a été mis à jour par RFC-7231#6.4.7 en juin 2014, et est sensiblement différent d'un 302, en ce que la méthode ne peut pas changer:
Probablement pas un problème pour la question d'origine, mais peut être applicable à d'autres qui viennent à travers cette question, il suffit de regarder pour la différence.
Je ressens votre douleur. Comme une solution, il est difficile de dire ce que les moteurs de recherche vont le faire. Il semble que chacun a sa propre manière de gérer les redirections. Ce lien suggère qu'un 302 indexe le contenu de la redirection de la page, mais toujours utiliser le principal lien de la page, mais il n'est pas clair qu'une 307 fera.
Une autre façon vous pourriez envisager de procéder est avec une redirection javascript et un
<noscript>
tag expliquer ce qui se passe. Ce sera aussi immonde non-javascript des navigateurs, et vous devez procéder avec prudence pour éviter Google sournois-site de la routine de détectionmais je pense que tant que votre noscript contient un lien hypertexte qui correspond à la nouvelle URL, vous seriez OK.De toute façon, j'avais toujours poursuivre le faire purement côté serveur demande si c'est possible. Heck, si votre trafic est faible, vous pourriez traiter votre page d'accueil comme un proxy dans le cas où il n'y a pas de chaîne de requête. Ont-il utiliser un thread d'arrière-plan de la demande elle-même avec la chaîne de requête et pipe les résultats. 🙂
modifier viens de voir que vous utilisez .NET. Peut-être envisager cette réponse de la SORTE: C# puis-je modifier la Requête.La forme de variables? .