Es ist bekannt, dass das URL-Fragment (der Teil nach dem #
) nicht an den Server gesendet wird.
Ich frage mich allerdings, wie Fragmente funktionieren, wenn eine Serverumleitung (über HTTP-Status 302 und Location:
Header) beteiligt ist.
Meine Frage ist wirklich zweifach:
Wenn die ursprüngliche URL ein Fragment (
/original.php#foo
) hatte und eine Umleitung zu erfolgt/new.php
, geht der Fragmentteil der ursprünglichen URL einfach verloren? Oder wird es manchmal auf die neue URL angewendet?
Wird die neue URL jemals/new.php#foo
in diesem Fall sein?Wird der Fragment unabhängig von der ursprünglichen URL
/new.php#foo
"geehrt" , wenn der Server mit einem Fragment ( ) zu einer neuen URL umleitet ? Oder hat der Server wirklich überhaupt nichts damit zu tun, das Fragment zu stören - und wird der Browser es daher ignorieren, indem er einfach zu geht/new.php
?
Antworten:
Update 27.06.2014 :
RFC 7231, Hypertext Transfer Protocol (HTTP / 1.1): Semantik und Inhalt , wurde als VORGESCHLAGENER STANDARD veröffentlicht. Aus dem Changelog :
Die wichtigen Punkte aus Abschnitt 7.1.2. Ort :
Dies sollte Ihre Fragen klar beantworten.
Update END
Dies ist ein offenes (nicht angegebenes) Problem mit der aktuellen HTTP-Spezifikation . Es wird in zwei Ausgaben der IETF-Arbeitsgruppe httpbis behandelt :
# 6 erlaubt Fragmente im
Location
Header. # 43 sagt dies:Dies führt zu der am besten kompatiblen und zukunftssicheren Antwort auf Ihre Frage (da dieses Problem möglicherweise standardisiert wird):
A: Fragmente von Original-URLs werden verworfen.
B: Fragmente aus dem
Location
Header werden berücksichtigt.quelle
Safari 5 und IE9 und darunter löschen das Fragment des ursprünglichen URI, wenn eine HTTP / 3xx-Umleitung auftritt. Wenn der Location-Header in der Antwort ein Fragment angibt, wird es verwendet.
IE10 +, Chrome 11+, Firefox 4+ und Opera "verbinden" das Fragment des ursprünglichen URI nach einer 3xx-Umleitung erneut.
Testseite: http://www.webdbg.com/test/redir/fragment/ .
Weitere Informationen zu diesem Problem finden Sie unter http://blogs.msdn.com/b/ieinternals/archive/2011/05/17/url-fragments-and-redirects-anchor-hash-missing.aspx
quelle
Location
ein Fragment enthält, wird es korrekt beibehalten. Aber wenn ein umgeleiteterLocation
mit einem Fragmente einer anderen 3xx Umleitung durchläuft, wird es aus unerklärlichen Gründen das Fragment aus der ersten Umleitung ignorieren, die mit den zwei vorherigen Verhalten nicht im Einklang steht. Chrome und Firefox bewahren es konsequent auf.Nur um Sie wissen zu lassen, finden Sie hier die richtige Spezifikation. von w3c definiert, wie sich alle verhalten sollen: http://www.w3.org/TR/cuap#uri - Klausel 4.1 - siehe unten:
quelle
Posten eines ähnlichen Problems mit der Lösung, mit der ich konfrontiert bin.
Hoffe, es hilft jemandem mit der ähnlichen Anforderung von
preserving hash in IE
302 Weiterleitungen.quelle