Aktualizacja 2014-czerwiec-27 :
RFC 7231, Hypertext Transfer Protocol (HTTP / 1.1): Semantics and Content , został opublikowany jako PROPONOWANY STANDARD. Z Changelog :
Składnia pola nagłówka Location została zmieniona, aby umożliwić wszystkie odwołania URI, w tym odniesienia względne i fragmenty, wraz z pewnymi wyjaśnieniami, kiedy użycie fragmentów byłoby niewłaściwe. (Punkt 7.1.2)
Ważne punkty z sekcji 7.1.2. Lokalizacja :
Jeśli wartość lokalizacji podana w odpowiedzi 3xx (przekierowanie) nie ma składnika fragmentu, agent użytkownika MUSI przetworzyć przekierowanie tak, jakby wartość dziedziczyła składnik fragmentu odwołania URI używanego do wygenerowania celu żądania (tj. Przekierowanie dziedziczy fragment oryginalnego odniesienia, jeśli istnieje).
Na przykład żądanie GET wygenerowane dla odwołania URI „ http://www.example.org/~tim ” może skutkować odpowiedzią 303 (Zobacz inne) zawierającą pole nagłówka:
Location: /People.html#tim
co sugeruje, że klient użytkownika przekierowuje do „ http://www.example.org/People.html#tim ”
Podobnie żądanie GET wygenerowane dla odwołania URI „ http://www.example.org/index.html#larry ” może skutkować odpowiedzią 301 (przeniesioną na stałe) zawierającą pole nagłówka:
Location: http://www.example.net/index.html
co sugeruje, że program użytkownika przekierowuje do „ http://www.example.net/index.html#larry ”, zachowując oryginalny identyfikator fragmentu.
Powinno to jasno odpowiedzieć na Twoje pytania.
Zaktualizuj END
jest to otwarty (nieokreślony) problem z aktualną specyfikacją HTTP . omówiono go w 2 wydaniach grupy roboczej IETF httpbis :
# 6 zezwala na fragmenty w Location
nagłówku. # 43 mówi tak:
Właśnie przetestowałem to w różnych przeglądarkach.
- Firefox i Safari używają fragmentu w nagłówku lokalizacji.
- Opera używa fragmentu ze źródłowego URI, jeśli jest obecny, w przeciwnym razie fragmentu z lokalizacji przekierowania
- IE (8) ignoruje fragment w identyfikatorze URI lokalizacji, więc użyje fragmentu ze źródłowego URI, jeśli jest obecny
Wniosek:
„Uwaga: zachowanie, gdy identyfikatory fragmentów z oryginalnego URI i przekierowania muszą zostać połączone, jest nieokreślone; obecne programy klienckie rzeczywiście różnią się tym, który fragment ma pierwszeństwo”.
[…]
Wydaje się, że IE8 nie używać idenfitier fragment Location
(zachowanie widziałem może być ograniczona do localhost).
Dlatego wydaje się, że mamy spójne zachowanie dla Safari / IE / Firefox / Chrome (właśnie przetestowane), ponieważ fragment z nagłówka Location jest używany, bez względu na oryginalny identyfikator URI.
Dlatego zmieniam swoją propozycję, aby udokumentować to zgodnie z oczekiwaniami.
Prowadzi to do najbardziej kompatybilnej z przeglądarkami i przyszłościowej (ponieważ ten problem ostatecznie zostanie ujednolicony) odpowiedzi na Twoje pytanie:
O: fragmenty z oryginalnych adresów URL są odrzucane.
B: fragmenty Location
nagłówka są honorowane.