Stavové kódy přesměrování 3xx
Stavový kód 3xx je přesměrování: prostředek, který jste žádali, je jinde, a hlavička odpovědi Location říká kde. Konkrétní kód řekne klientovi, a každému vyhledávači, jestli je přesun trvalý, nebo dočasný, a jestli se musí zachovat původní metoda požadavku.
Jak přesměrování funguje
Přesměrování jsou dva požadavky, ne jeden. Klient požádá o URL A, server odpoví stavem 3xx a hlavičkou Location pojmenovávající URL B, a klient pak vytvoří nový požadavek na B. Prohlížeče to dělají automaticky, takže návštěvník uvidí jen výslednou stránku a výslednou URL v adresním řádku. Mezitímní odpověď stejně stojí celou zpáteční cestu, a proto jsou dlouhé řetězce přesměrování pomalé.
Kódy 3xx od sebe odlišují dvě vlastnosti. První je trvalost: trvalé přesměrování říká klientům a robotům, že stará URL je vyřazená a nová by ji měla nahradit v záložkách, odkazech i indexech, zatímco dočasné přesměrování říká, že stará URL je pořád ta skutečná a vrátí se. Druhá je zachování metody. Starší kódy dovolují klientovi při následování přesměrování změnit POST na GET, zatímco novější to zakazují, takže POST zůstane POST. To je rozdíl mezi tím, že odeslání formuláře na novou URL dorazí neporušené, a tím, že dorazí jako prázdný GET.
Každý kód 3xx a co znamená
- 300 Multiple Choices. Prostředek existuje ve víc reprezentacích a server nechává výběr na klientovi. Pro tento seznam neexistuje žádný standardní strojově čitelný formát, takže to skoro nikdo neimplementuje. V praxi se s 300 v přírodě nesetkáte. Proč přežívá hlavně jako vyhledávaný pojem, vysvětluje návod 300 Multiple Choices.
- 301 Moved Permanently. Prostředek má nový trvalý domov. Vyhledávače přenesou hodnotící signály na cíl a klienti smí přesměrování cachovat, někdy agresivně. Tohle je kód pro změnu domény, přesun z HTTP na HTTPS nebo trvalou restrukturalizaci URL.
- 302 Found. Dočasné přesměrování. Původní URL si udrží svou identitu, takže vyhledávače normálně dál indexují původní, ne cíl. Historicky mnoho klientů při následování 302 přepnulo metodu na GET, a proto standard varuje před spoléháním na zachování metody u tohoto kódu.
- 303 See Other. "Váš požadavek byl zpracován; teď jděte a stáhněte si tento jiný prostředek pomocí GET." Klient je výslovně požádán, aby pro navazující požadavek použil GET bez ohledu na původní metodu. Je to správná odpověď na POST formuláře, který má přistát na stránce s výsledkem.
- 304 Not Modified. Vůbec ne přesměrování. Odpovídá na podmíněný požadavek a znamená "vaše cachovaná kopie je pořád aktuální, použijte ji znovu". Nemá tělo ani
Location. Viz 304 Not Modified. - 305 Use Proxy a 306 jsou zastaralé. 305 byl kvůli bezpečnosti zavrhnut a 306 se nepoužívá. Oba ignorujte.
- 307 Temporary Redirect. Stejný význam jako 302, ale metoda i tělo se musí zachovat. POST, který následuje 307, dorazí na novou URL jako POST.
- 308 Permanent Redirect. Stejný význam jako 301, ale metoda i tělo se musí zachovat.
Co se s přesměrováními kazí
- Dočasný kód na trvalém přesunu. Nejčastější a nejnákladnější chyba. Vyhledávače nechají starou URL v indexu a nová nezdědí postavení té staré.
- Trvalý kód na dočasném přesunu. Hůř se to vrací zpět, protože zacachované 301 může vracející se návštěvníky posílat na špatné místo ještě dlouho poté, co pravidlo odstraníte.
- Řetězce přesměrování. http na https, pak non-www na www, pak stará cesta na novou cestu, to jsou tři zpáteční cesty, než dorazí jakýkoli obsah. Každý skok přidává latenci a každý skok je místo, kde se řetězec může přetrhnout.
- Smyčky přesměrování. A posílá na B a B posílá zpátky na A, obvykle proto, že se pravidlo na úrovni aplikace a pravidlo na úrovni serveru nebo CDN neshodnou na kanonické podobě. Prohlížeče se po pevném počtu skoků vzdají a zobrazí chybu.
- Všechno vede na domovskou stránku. Když se všechny zrušené stránky přesměrují na kořen místo na svůj nejbližší ekvivalent, přesměrování se často vyhodnotí jako měkká 404 a návštěvník zůstane hledat.
- Ztracená těla POST. Endpoint API nebo formuláře přesunutý za 301 nebo 302 může u některých klientů ztratit svou metodu i data. Pro cokoli, co není obyčejný GET, použijte 307 nebo 308.
Jak zauditovat a opravit svá přesměrování
- Zjistěte, co URL vrací, aniž byste přesměrování následovali:
To najednou vypíše stavový řádek i cíl.curl -sI https://example.com/old-page | grep -Ei "^(HTTP|location)" - Teď projděte celý řetězec a spočítejte skoky:
curl -sIL -o /dev/null -w "%{num_redirects} hops, final %{http_code}, %{url_effective}\n" https://example.com/old-page - Zkraťte řetězce na jeden skok. Namiřte původní URL přímo na konečný cíl místo toho, aby procházela mezilehlými pravidly.
- Přizpůsobte kód záměru. Trvalý přesun: 301, nebo 308, pokud endpoint přijímá i jiné požadavky než GET. Dočasný přesun, stránka údržby nebo A/B rozdělení: 302, nebo 307, kde musí metoda přežít. Postup post-a-pak-přesměrovat: 303.
- Opravte smyčky tím, že jednou rozhodnete o kanonické podobě (protokol, hostitel, koncové lomítko) a vynutíte ji přesně na jedné vrstvě. Smyčky skoro vždy znamenají, že se o autoritu snaží dvě vrstvy zároveň.
- Otestujte znovu se studenou cache. Prohlížeč, který si 301 už zacachoval, ho dál poslouchá, takže si to ověřte pomocí curl nebo anonymního okna, než usoudíte, že oprava nezabrala.
Jak zachytit rozbité přesměrování dřív, než spadne návštěvnost
Přesměrování se rozbíjí bez jakéhokoli viditelného příznaku. Pravidlo, které se začne smyčkovat, nebo certifikát, který na cíli přesměrování selže, pořád nechává starou URL odpovídat, takže nic nevypadá špatně, dokud nespadne návštěvnost a pozice ve vyhledávání. Externí kontrola, která projde celý řetězec a ověří konečný stav, zachytí rozbité přesměrování v okamžiku, kdy se objeví, a kontrola z mnoha sítí odliší globální změnu pravidla od regionálního problému CDN. HostTracker spouští kontroly z více než 300 kontrolních bodů ve 158 městech a upozorňuje e-mailem, SMS, hlasovým hovorem, přes Slack, Telegram a další kanály. Otestujte URL a její řetězec přesměrování pomocí nástroje HTTP kontroly a než zvolíte kód, přečtěte si 301 vs 302.