Różnice między różnymi kodami przekierowań HTTP 3XX nie są dla mnie jasne. Tak, przeczytałem specyfikację, ale wydaje się, że istnieje pewna rozbieżność między standardem a rzeczywistą praktyką.
301
Kod przekierowanie wydaje się wystarczająco jasne: To oznacza, że zasób został na stałe przeniesiony do innego URI, a przyszłe wnioski powinny wykorzystywać że URI.
A 307
kod przekierowanie również wydaje się jasne: to oznacza, że przekierowanie jest tymczasowy i przyszłe wnioski powinny nadal korzystać z oryginalnego URI.
Ale nie mogę powiedzieć, jaka jest różnica między 302
i 303
ani dlaczego którekolwiek z nich są naprawdę różne 301
. Wygląda na to, że 302
pierwotnie miało to być tymczasowe przekierowanie (np. 307
), Ale w praktyce większość przeglądarek traktowała to jak 303
. Ale jaka jest różnica między a 303
i a 301
? Czy 301
ma to oznaczać, że przekierowanie jest bardziej trwałe?
źródło
Różnica między 303 a 307 jest następująca:
303 : Zobacz inne. Żądanie zostało odebrane poprawnie, ale wyniki należy pobrać za pomocą polecenia GET na adresie URL przekierowania.
307 : Tymczasowe przekierowanie. Całe żądanie powinno zostać przekierowane do nowego adresu URL. Wszelkie dane postów należy ponownie opublikować.
Zauważ, że 302 miało mieć zachowanie 307, ale większość przeglądarek zaimplementowało to jako zachowanie 303 (obie wtedy nie istniały). Dlatego te dwa nowe kody zostały wprowadzone w celu zastąpienia 302.
Różnica między 301 a 303:
301 : Dokument został przeniesiony. Przyszłe żądania powinny używać nowego adresu URL. Ten adres URL jest nieaktualny.
Uwaga: uważaj na ten kod. Przeglądarki i serwery proxy mają tendencję do stosowania bardzo agresywnego buforowania, więc jeśli odpowiesz za pomocą 301, ponowne odwiedzenie tego adresu URL może zająć dużo czasu.
303 : Żądanie zostało odebrane poprawnie. Wszelkie żądania PUT są przetwarzane. Otrzymany dokument można pobrać z adresu URL przekierowania. Przyszłe żądanie powinno nadal trafiać do pierwotnego adresu URL.
źródło