Zum Hauptinhalt springen

Anleitungen / HTTP-Statuscodes erklärt

300 Multiple Choices: der Code, den Sie fast nie sehen

300 Multiple Choices bedeutet, die angeforderte Ressource hat mehr als eine Repräsentation, und der Server bittet den Client, eine auszuwählen, statt selbst zu entscheiden. Er ist vom HTTP-Standard definiert, aber fast nie im Einsatz, schlagen Sie ihn also nach, haben Sie wahrscheinlich einen 301 oder einen 302 erlebt statt eines echten 300.

Wofür der Code entworfen wurde

HTTP unterstützt Content-Negotiation: Dieselbe URL kann mehrere Repräsentationen haben, die sich nach Format, Sprache oder Kodierung unterscheiden. Normalerweise entscheidet der Server, anhand der Accept-, Accept-Language- und Accept-Encoding-Header des Clients, und gibt die gewählte mit einem 200 zurück. Das ist serverseitig gesteuerte Aushandlung, und so funktioniert das Web.

300 Multiple Choices deckt den anderen Ansatz ab, agentengesteuerte Aushandlung. Statt zu wählen, antwortet der Server mit einer Liste der verfügbaren Repräsentationen und lässt den Client oder den Nutzer wählen. Die Antwort kann einen Location-Header enthalten, der die vom Server bevorzugte Option nennt, dem ein Client folgen darf, aber nicht muss.

Warum Sie fast nie einen sehen

Der Standard hat nie ein maschinenlesbares Format für die Liste der Auswahlmöglichkeiten festgelegt. Ohne vereinbartes Format gibt es nichts, das ein Browser parsen könnte, kein gängiger Browser implementiert also eine Auswahl-Oberfläche für einen 300. Browser zeigen den Antwortkörper stattdessen meist als gewöhnliche Seite an, oder folgen dem Location-Header, falls vorhanden, was den 300 wie eine schwache Weiterleitung wirken lässt. Anwendungs-Frameworks und CDNs geben ihn in ihren Vorgabekonfigurationen nicht aus, und serverseitig gesteuerte Aushandlung löst dasselbe Problem unsichtbar und besser, niemand hat also einen Grund zu wechseln.

Ein 300 taucht dennoch an ein paar Stellen auf:

  • Apaches mod_negotiation mit aktiviertem MultiViews, wenn mehrere Dateien zu einer Anfrage wie /logo passen und das Modul sie nicht ordnen kann. Es erzeugt eine HTML-Liste der Kandidaten.
  • Handgeschriebene APIs, die absichtlich eine JSON-Liste alternativer Ressourcen-URLs zurückgeben und 300 als semantischen Hinweis nutzen, statt zu erwarten, dass ein Client ihn nativ verarbeitet.
  • Testsuiten und Protokoll-Konformitätswerkzeuge, die jeden definierten Statuscode durchspielen.

Warum Menschen nach dem Statuscode 300 suchen

Die meisten Suchen nach "300 status code" haben mit einem echten 300 gar nichts zu tun. Die Zahl ist der Beginn der Weiterleitungsfamilie, Menschen, die eine Weiterleitung in einem Browser-Tool, einem Protokoll oder einem SEO-Crawler gesehen haben und sich "eine dreihundert-irgendwas" gemerkt haben, schlagen also zuerst 300 nach. Was sie meist haben, ist:

  • Ein 301, eine dauerhafte Weiterleitung, von einem SEO-Crawler als Teil einer Kette gemeldet.
  • Ein 302, eine vorübergehende Weiterleitung, die Vorgabe vieler Frameworks.
  • Ein 304, was eigentlich eine Cache-Validierungsantwort ist und gar keine Weiterleitung.
  • Eine Crawler-Zusammenfassung, die alles unter einer "3xx"-Überschrift gruppiert, was dann als "300" gelesen wird.

Versuchen Sie herauszufinden, welche Weiterleitung eine URL zurückgibt, ist die Anleitung 301 vs 302 die, die Sie wollen.

So prüfen Sie, ob Sie wirklich einen 300 haben

  1. Fragen Sie nach den Headern, ohne einer Weiterleitung zu folgen, und lesen Sie die genaue Zahl:
    curl -sI https://example.com/some-path | grep -Ei "^(HTTP|location|link|alternates)"
    Ein echter 300 zeigt HTTP/1.1 300 Multiple Choices. Alles andere ist ein anderer Code und eine andere Anleitung.
  2. Ist es wirklich ein 300 und nicht beabsichtigt, schauen Sie zuerst auf Apache. MultiViews für dieses Verzeichnis zu deaktivieren, oder der Datei in der URL eine explizite Endung zu geben, entfernt die Mehrdeutigkeit, die die Aushandlung auslöst.
  3. Wollen Sie, dass der Server wählt, behalten Sie serverseitig gesteuerte Aushandlung: Geben Sie 200 mit der gewählten Repräsentation zurück und einen Vary-Header, der die Anfrage-Header nennt, auf denen Sie ausgehandelt haben, damit Caches die Varianten getrennt speichern.
  4. Wollen Sie Clients woanders hinschicken, nutzen Sie eine echte Weiterleitung. Dauerhafte Umzüge bekommen 301 oder 308, vorübergehende 302 oder 307. Nutzen Sie 300 nicht als Weiterleitung, denn Clients müssen ihr nicht folgen.
  5. Beheben Sie die Mehrdeutigkeit an der Quelle. Ein 300 bedeutet fast immer, dass zwei Dateien oder zwei Routen um dieselbe URL konkurrieren, und die dauerhafte Lösung ist, die URL eindeutig zu machen.

Einen unerwarteten 300 nach einem Deploy erwischen

Ein unerwarteter 300 kommt meist mit einem Server-Upgrade oder einer Konfigurationsänderung, und niemand bemerkt es: Die Seite kann in einem Browser noch ungefähr richtig aussehen, während Crawler und API-Clients eine Antwort bekommen, mit der sie nichts anfangen können. Eine externe Prüfung, die den genauen Statuscode für jede URL festhält, deckt die Änderung beim ersten Lauf nach dem Deploy auf. HostTracker überwacht Websites seit 2004 und führt Prüfungen von über 300 Prüfpunkten in 158 Städten aus. Prüfen Sie mit dem HTTP-Prüfungstool, was eine URL gerade jetzt zurückgibt, oder lesen Sie die vollständige Anleitung zur 3xx-Weiterleitungsfamilie.

Jetzt prüfen

Führen Sie die kostenlose Prüfung für Ihre eigene Website aus - ganz ohne Konto.

HTTP check

Dauerhaft überwachen

Werden Sie benachrichtigt, sobald etwas ausfällt: HostTracker prüft von über 300 Standorten aus und benachrichtigt Sie per E-Mail, SMS, Slack, Telegram und mehr.

HostTracker Funktionen

Mehr in diesem Bereich: HTTP-Statuscodes erklärt