8

To jest pytanie uzupełniające do Using 301/303/307 redirects for dynamic short urls, gdzie staram się określić najlepszą metodę realizacji krótkiego przekierowania adresu URL, gdy docelowy adres URL będzie się często zmieniał.Unikanie 301 przekierowywania buforowania

Podczas gdy wydaje się, że oba przekierowania 301 i 307 działają w ten sam sposób, problem, który mnie dotyczy, to 301 przekierowanie pamięci podręcznej (jak udokumentowano here) - jest to najlepszy sposób na uniknięcie tego użycia przekierowań 307 (zakładam 307 przekierowań nigdy nie będzie buforować?) Lub jawnie wysyłać nagłówek bez cache ("Cache-Control: no-cache, must-revalidate")?

+0

powiązane: http://stackoverflow.com/questions/12192590/how-to-a-non-cached-301-redirect/19003320#19003320 –

Odpowiedz

16

Nie należy unikać buforowania 301. Jeśli nie chcesz, aby dowolny agent użytkownika buforował przekierowanie, po prostu nie używaj przekierowania 301. Innymi słowy, buforowanie 301 ma pozostać, i semantycznie, jest to przekierowanie stałe na stałe, więc jeśli planujesz zmienić docelowy adres URL, 301 nie jest właściwym kodem stanu, którego chcesz użyć. Z drugiej strony, 307 responses are not cached by default.

+3

Twoja interpretacja narusza specyfikację HTTP. Klienci muszą stosować "Cache-Control", gdy jest obecny na 301. – Gili

+0

@Gili Tak, klienci muszą honorować Cache-Control, ale 301 jest nadal * stały * i nie należy go używać, jeśli przekierowanie nie ma być stały. Ponieważ jest trwały, domyślnie jest domyślnie buforowany, zgodnie z opisem w https://tools.ietf.org/html/rfc2616#section-10.3.2 –

+0

301 nie musi być * stały * (to tylko domyślna reguła buforowania). Według http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-24#section-6.4.2 "Odpowiedź A 301 jest buforowalna, chyba że [...] wyraźnie określono kontrole pamięci podręcznej [...]" gdzie 'jawna kontrola pamięci podręcznej' oznacza "Cache-Control" i powiązane nagłówki. – Gili

8

W sytuacjach, w których chcesz zachować zachowanie przekierowania 301, takie jak aktualizacja zakładek przeglądarki i zmiana adresu URL w bocie Google, ale jednocześnie chcesz śledzić przekierowania lub wykonywać inne funkcje zawsze można dodać nagłówki kontroli pamięci podręcznej "no cache"

HTTP/1.0 301 Moved Permanently 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Expires: Sat, 26 Jul 1997 05:00:00 GMT 
Location: http://example.com 

w PHP wygląda następująco:

header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); 
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 
header('Location:'.$url, true, 301); 

Powiązane: https://stackoverflow.com/a/19003320/175071