Přejít na hlavní obsah

Návody / HTTP stavové kódy vysvětlené

300 Multiple Choices: kód, který téměř nikdy neuvidíte

300 Multiple Choices znamená, že požadovaný zdroj má víc než jednu reprezentaci a server žádá klienta, aby si jednu vybral, místo aby vybíral za něj. Je definovaný standardem HTTP, ale používá se téměř nikdy, takže pokud si ho vyhledáváte, nejspíš jste narazili na 301 nebo 302, ne na skutečné 300.

Pro co byl kód navržen

HTTP podporuje vyjednávání obsahu: stejná URL může mít několik reprezentací lišících se formátem, jazykem nebo kódováním. Normálně rozhoduje server, pomocí hlaviček klienta Accept, Accept-Language a Accept-Encoding, a vrátí zvolenou variantu s 200. Tomu se říká vyjednávání řízené serverem, a přesně tak funguje web.

300 Multiple Choices pokrývá opačný přístup, vyjednávání řízené agentem. Místo volby server odpoví seznamem dostupných reprezentací a nechá výběr na klientovi nebo uživateli. Odpověď může obsahovat hlavičku Location pojmenovávající preferovanou volbu serveru, kterou klient smí, ale nemusí následovat.

Proč ho téměř nikdy nevidíte

Standard nikdy nespecifikoval strojově čitelný formát pro seznam voleb. Bez dohodnutého formátu nemá prohlížeč co parsovat, takže žádný hlavní prohlížeč neimplementuje UI pro výběr pro 300. Prohlížeče obvykle místo toho zobrazí tělo odpovědi jako obyčejnou stránku, nebo následují hlavičku Location, pokud je přítomná, což způsobí, že se 300 chová jako slabé přesměrování. Aplikační frameworky a CDN ho ve výchozí konfiguraci nevydávají, a vyjednávání řízené serverem řeší stejný problém neviditelně a lépe, takže nikdo nemá důvod přecházet.

300 se přesto objevuje na pár místech:

  • mod_negotiation Apache se zapnutým MultiViews, když se s požadavkem jako /logo shoduje víc souborů a modul je nedokáže seřadit. Vygeneruje HTML seznam kandidátů.
  • Ručně psaná API, která záměrně vrací seznam alternativních URL zdrojů ve formátu JSON, kde 300 slouží jako sémantický náznak, ne v očekávání, že by ho jakýkoli klient přirozeně zpracoval.
  • Testovací sady a nástroje pro ověření shody s protokolem, které procvičují každý definovaný stavový kód.

Proč lidé vyhledávají stavový kód 300

Většina vyhledávání "stavový kód 300" se vůbec netýká 300. Toto číslo je začátek rodiny přesměrování, takže lidé, kteří viděli přesměrování v nástroji prohlížeče, v logu, nebo v SEO crawleru a zapamatovali si "něco tři sta", hledají nejdřív 300. Co obvykle mají, je:

  • 301, trvalé přesměrování, nahlášené SEO crawlerem jako součást řetězu.
  • 302, dočasné přesměrování, výchozí volba mnoha frameworků.
  • 304, což je odpověď validace cache, vůbec ne přesměrování.
  • Souhrn crawleru, který vše seskupí pod nadpis "3xx", což se pak čte jako "300".

Pokud zjišťujete, jaké přesměrování URL vrací, chcete návod 301 vs 302.

Jak zkontrolovat, zda skutečně máte 300

  1. Vyžádejte si hlavičky bez následování jakéhokoli přesměrování a přečtěte si přesné číslo:
    curl -sI https://example.com/some-path | grep -Ei "^(HTTP|location|link|alternates)"
    Skutečné 300 ukáže HTTP/1.1 300 Multiple Choices. Cokoli jiného je jiný kód a jiný návod.
  2. Pokud je to skutečně 300 a nezamýšleli jste ho, nejdřív se podívejte na Apache. Vypnutí MultiViews pro daný adresář, nebo přidání explicitní přípony souboru do URL, odstraní nejednoznačnost, která vyjednávání spouští.
  3. Pokud chcete, aby volil server, ponechte vyjednávání řízené serverem: vraťte 200 se zvolenou reprezentací a hlavičkou Vary pojmenovávající hlavičky požadavku, podle kterých jste vyjednávali, aby caches ukládaly varianty odděleně.
  4. Pokud chcete klienty poslat jinam, použijte skutečné přesměrování. Trvalé přesuny dostanou 301 nebo 308, dočasné 302 nebo 307. Nepoužívejte 300 jako přesměrování, protože klienti ho nemusí následovat.
  5. Opravte nejednoznačnost u zdroje. 300 téměř vždy znamená, že o stejnou URL soupeří dva soubory nebo dvě trasy, a trvalá oprava je udělat URL jednoznačnou.

Zachycení neočekávaného 300 po nasazení

Neočekávané 300 bývá spojené s upgradem serveru nebo změnou konfigurace, a nikdo si toho nevšimne: stránka může v prohlížeči pořád vypadat zhruba v pořádku, zatímco crawlery a klienti API dostanou odpověď, kterou nemohou použít. Externí kontrola, která zaznamenává přesný stavový kód pro každou URL, změnu odhalí při prvním běhu po nasazení. HostTracker monitoruje weby od roku 2004 a spouští kontroly z více než 300 kontrolních bodů ve 158 městech. Co URL vrací právě teď, zkontrolujte nástrojem na HTTP kontrolu, nebo si přečtěte celý návod rodina přesměrování 3xx.

Zkontrolovat hned

Spusťte bezplatnou kontrolu na svém webu - bez registrace.

HTTP check

Sledovat trvale

Dostanete upozornění ve chvíli, kdy něco přestane fungovat: HostTracker kontroluje z více než 300 lokalit a upozorní vás e-mailem, SMS, přes Slack, Telegram a další.

Funkce HostTracker

Více v této sekci: HTTP stavové kódy vysvětlené