Ich muss den Benutzer von einer Seite auf eine andere umleiten, aber ich muss die ursprüngliche Verweiszeichenfolge beibehalten. Wenn sie beispielsweise auf http://www.othersite.com/pageA.jsp beginnen , klicken Sie auf einen Link, der sie zu http://www.example.com/pageB.jsp führt , der dann eine 302 ausführt Umleitung zu http://www.example.com/pageC.jsp , muss die Referer-Zeichenfolge enthalten seinhttp://www.othersite.com/pageA.jsp
Ist dies das normale Verhalten für eine 302-Weiterleitung? Oder würde mein ursprünglicher Referer zugunsten von fallen gelassen werden http://www.example.com/pageB.jsp
? Das wäre nicht wünschenswert.
Ich weiß nicht, ob es einen Unterschied macht, aber ich arbeite in JSP und verwende es response.sendRedirect()
, um die 302-Umleitung auszuführen.
Ich sollte erwähnen, dass ich ein Experiment damit durchgeführt habe und es anscheinend die ursprüngliche Referer-Zeichenfolge ( http://www.othersite.com/pageA.jsp
) beibehalten hat, aber ich wollte nur sicherstellen, dass dies das normale Standardverhalten ist und nicht etwas Seltsames an meinem Ende.
Obwohl ich derzeit eine 302-Umleitung verwende, könnte ich wahrscheinlich stattdessen eine 301-Umleitung verwenden. Wissen Sie, ob das Verhalten für 301-Weiterleitungen zuverlässiger ist?
quelle
Antworten:
Eine kurze Antwort ist, dass sie weder für den Referer-Header noch für den 302-Statuscode im entsprechenden RFC 2616 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.36 angegeben ist .
Am besten führen Sie einen Test mit mehreren Browsern durch und prüfen, ob ein Konsensverhalten vorliegt.
Codieren Sie für vollständige Gürtel und Zahnspangen den ursprünglichen Referrer in der Weiterleitungs-URL, damit Sie garantieren können, dass Sie ihn abrufen.
quelle
Ich weiß nichts über den 302, aber ich habe den 301 heute in einigen Browsern getestet, hier die Ergebnisse:
SZENARIO : Benutzer klickt auf den Link auf domainX, der auf domainA verweist. domainA führt eine 301-Umleitung zu domainB durch.
referer
bei der Landung auf Domäne B lautet: DomäneX (auch bei Verwendung von InPrivate-Browsing und selbst wenn der Benutzer den Link in einer neuen Registerkarte öffnet)referer
bei der Landung auf Domain B lautet: domainX (auch wenn der Benutzer den Link in einem neuen Tab öffnet)referer
bei der Landung auf Domain B lautet: domainX (auch wenn der Benutzer den Link in einem neuen Tab öffnet)referer
bei der Landung auf Domain B lautet: DomainX (es sei denn, der Benutzer öffnet Links in einem neuen Tab)referer
bei der Landung auf Domain B lautet: domainX (auch wenn der Benutzer Links in einem neuen Tab öffnet)quelle
Gute Frage. In diesem Fall hängt das Senden des Referers vollständig vom Browser ab (da der Browser angewiesen wird, eine weitere Anforderung an die neue Ressource zu stellen).
RFC 2616 schweigt zu dem Problem:
Ich würde dem Browser nicht vertrauen, dass er den richtigen Referer mitschickt. Ich wette, es gibt mindestens einen, der etwas anderes sendet als die anderen.
Problemumgehung
Wenn Sie können, fügen
?override_referer=<old_url>
Sie der URL, zu der Sie umleiten, einen Parameter hinzu und analysieren Sie diesen Wert anstelle von HTTP_REFERER.Auf diese Weise können Sie sicher sein, immer das richtige Ergebnis zu erzielen, und Sie verlieren nichts an Sicherheit: Der Referer kann in beiden Fällen gefälscht werden.
quelle
Ich hatte das entgegengesetzte Problem: Ich wollte, dass der Referer "pageB" ist, aber keiner der aktuellen Browser verfahren so ...
Also habe ich es mit einer HTML-Umleitung auf Seite B versucht (anstelle der 301- oder 302-Umleitung):
Und das Ergebnis war überraschend:
Hoffe das kann helfen
quelle