J'ai besoin de rediriger l'utilisateur d'une page à une autre, mais je dois conserver la chaîne de référence d'origine. Ainsi, par exemple, s'ils commencent sur http://www.othersite.com/pageA.jsp , cliquez sur un lien qui les mène à http://www.example.com/pageB.jsp , qui exécute ensuite un 302 rediriger vers http://www.example.com/pageC.jsp , j'ai besoin que la chaîne de référence contiennehttp://www.othersite.com/pageA.jsp
Est-ce le comportement normal pour une redirection 302? Ou mon référent d'origine serait-il abandonné, en faveur de http://www.example.com/pageB.jsp
? Ce ne serait pas souhaitable.
Je ne sais pas si cela fait une différence, mais je travaille dans JSP et j'utilise response.sendRedirect()
pour exécuter la redirection 302.
Je devrais mentionner que j'ai fait une expérience avec cela, et qu'il semble avoir conservé la chaîne de référence d'origine ( http://www.othersite.com/pageA.jsp
) mais je voulais juste m'assurer que c'était le comportement par défaut normal, et pas quelque chose de bizarre de mon côté.
Bien que j'utilise actuellement une redirection 302, je pourrais probablement utiliser une redirection 301 à la place. Savez-vous si le comportement des redirections 301 est plus fiable?
la source
Réponses:
La réponse courte est que ce n'est pas spécifié dans la RFC 2616 pertinente http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36 que ce soit pour l'en-tête Referer ou le code d'état 302.
Votre meilleur pari est de faire un test avec plusieurs navigateurs et de voir s'il existe un comportement consensuel.
Pour une ceinture complète et des accolades, encodez le référent d'origine dans l'URL de redirection afin que vous puissiez garantir de le récupérer.
la source
Je ne sais pas pour le 302, mais j'ai testé le 301 sur certains navigateurs aujourd'hui, voici les résultats:
SCÉNARIO : l'utilisateur clique sur le lien sur domainX qui pointe vers domainA. domainA effectue une redirection 301 vers domainB.
referer
lors de l'atterrissage sur domainB est: domainX (même lors de l'utilisation de la navigation InPrivate et même lorsque l'utilisateur ouvre le lien dans un nouvel onglet)referer
lors de l'atterrissage sur domainB est: domainX (même lorsque l'utilisateur ouvre le lien dans un nouvel onglet)referer
lors de l'atterrissage sur domainB est: domainX (même lorsque l'utilisateur ouvre le lien dans un nouvel onglet)referer
lors de l'atterrissage sur domainB est: domainX ( sauf si l' utilisateur ouvre des liens dans un nouvel onglet)referer
lors de l'atterrissage sur domainB est: domainX (même lorsque l'utilisateur ouvre des liens dans un nouvel onglet)la source
Bonne question. Dans ce cas, l'envoi du référent dépend entièrement du navigateur (car le navigateur est invité à faire une autre requête à la nouvelle ressource).
RFC 2616 reste silencieux sur le problème:
Je ne ferais pas confiance au navigateur pour envoyer le bon référent. Je parie qu'il y en a au moins un qui envoie quelque chose de différent des autres.
solution de contournement
Si vous le pouvez, pourquoi ne pas ajouter un
?override_referer=<old_url>
paramètre à l'URL vers laquelle vous redirigez et analysez cette valeur au lieu de HTTP_REFERER.De cette façon, vous pouvez être sûr d'obtenir toujours le bon résultat, et vous ne perdez rien en sécurité: le référent peut être simulé de toute façon.
la source
J'ai eu le problème opposé: je voulais que ce référent soit "pageB" mais aucun des navigateurs actuels ne procédait de cette façon ...
J'ai donc essayé avec une redirection HTML sur pageB (au lieu de redirection 301 ou 302):
Et le résultat était surprenant:
J'espère que cela peut aider
la source