Przekierowania HTTP

Przekierowania HTTP robione są natychmiastowo i bez pytania użytkownika. Nie zmieniają znaczenia zapytania, czyli dla klientów nie powinno być różnicy, czy pobierają plik bezpośrednio, czy po przekierowaniu.

Stronę wygenerowaną razem z przekierowaniem traktuje się tylko jako informację dla przeglądarek nie obsługujących przekierowań.

Przekierowania za pomocą HTTP są jedynym sensownym sposobem. „Alternatywy” takie jak <meta refresh> czy JavaScript nie oferują nic pozytywnego użytkownikowi i stosowane są głównie jako obejście trudności jakie autorzy mają ze skonfigurowaniem serwera.

Adres przekierowania: Location

Nagłówek Location określa pod jaki adres ma następić przekierowanie. Musi to być absolutny URL, wraz z protokołem i domeną.

  Location: http://example.com/nowastrona

Jeśli w PHP funkcja header() nie działa, należy dodać ob_start() na początku skryptu!

Żeby przekierować pod adres na tym samym serwerze, można wykorzystać otrzymany nagłówek Host. W PHP:

  header('Location: http://'.$_SERVER['HTTP_HOST'].'/nowastrona');

Nagłówek Location działa tylko, gdy ustawi się odpowiedni status.

Przekierowanie na stałe: 301 Redirect

Nie wolno ustawiać tego statusu w odpowiedzi na POST formularza, zobacz status 303

Status 301 oznacza, że przekierowanie jest na stałe i przeglądarka od tej pory może używać tylko wskazanego adresu. Może nawet uaktualnić zakładki użytkownika.

Wykorzystywany jest najczęściej do przekierowania z domeny bez „www.” na wersję z „www.” (lub odwrotnie). Przydatny jest też gdy publikuje się nową wersję strony mającą inne nazwy podstron, a chce się zapewnić poprawne działanie starych odnośników.

Przekierowanie tymczasowe: 302 Found

Nie wolno ustawiać tego statusu w odpowiedzi na POST formularza, zobacz status 303

Oznacza, że przekierowanie jest jednorazowe i przeglądarka w przyszłości ma nadal używać tego adresu.

Wykorzystywany jest do tworzenia specjalnych adresów, których treść jest zmienna, np.

 http://example.com/najnowsza-wiadomosc
 http://example.com/losowy-artykul

Jeśli pod stroną z losowym artykułem od razu była by wygenerowana treść, wtedy użytkownik nie mógłby dodać konkretnego artykułu do zakładek, a wyszukiwarki zaindeksowałyby co innego, niż potem użytkownicy dostaną. Przekierowanie tymczasowe rozwiązuje ten problem — użytkownicy i wyszukiwarki mogą dostać konkretny adres w odpowiedzi na ogólny.

Przekierowanie po POST: 303 See other

Specyfikacja HTTP zabrania przeglądarkom, bez zezwolenia użytkownika, wysyłać formularzy pod przekierowany adres, dlatego jest osobny status, który wymusza zmianę metody z POST na GET.

Statusu 303 należy używać, gdy przekierowanie następuje w odpowiedzi na wysłany formularz, np. po zalogowaniu. Gwarantuje on, że przeglądarka nie odmówi przekierowania, ani nie będzie wysyłała formularza ponownie.

Dodatkowo dzięki zmianie metody z POST na GET odświeżenie strony nie będzie wysyłało formularza ponownie (choć nie jest to gwarancją, że formularz nie zostanie wysłany wielokrotnie). Bug w IE

Pytania? Komentarze? Napisz na forum kursu lub edytuj tę stronę.


Zmodyfikowano: 13.01.2007, 20:20