506 Variant Also Negotiates
Verwendung
Der Statuscode 506 Variant Also Negotiates tritt bei der transparenten Inhaltsaushandlung (Transparent Content Negotiation) auf, bei der das Protokoll die beste Variante der Zielressource für den Client auswählt, sofern mehrere Varianten verfügbar sind.
Varianten sind unterschiedliche Fassungen der betreffenden Ressource. Eine Ressource, die in mehreren Sprachen vorliegt, hat beispielsweise für jede Sprache eine Variante. Die transparente Inhaltsaushandlung wählt bei einer GET- oder HEAD-Anfrage automatisch die beste Variante aus.
Der Fehler 506 bedeutet, dass die ausgewählte Variante selbst zur Aushandlung konfiguriert ist, was zu einer Schleife führt, die der Server abbricht.
Hinweis
Dieses Protokoll wurde 1998 als experimentell beschrieben und nie offiziell als Standard verabschiedet.
SEO-Auswirkung
Suchmaschinen behandeln 506 genauso wie andere 5xx-Serverfehler. Anhaltende Fehler senken die Crawl-Rate und führen schließlich dazu, dass betroffene URLs aus dem Index entfernt werden.
Beispiel
Ein Client sendet eine GET-Anfrage mit einem Accept-Header. Der Server versucht die Inhaltsaushandlung, stellt jedoch fest, dass die gewählte Variante ihrerseits auf eine Aushandlung verweist, was zu einem Konfigurationsfehler mit Zirkelbezug führt.
Anfrage
GET /docs HTTP/1.1
Host: example.com
Accept: text/html, application/xhtml+xml
Antwort
HTTP/1.1 506 Variant Also Negotiates
Content-Type: text/html; charset=UTF-8
Content-Length: 191
<html>
<head>
<title>Variant Also Negotiates</title>
</head>
<body>
<p>Content negotiation for the requested
resource resulted in a circular reference.</p>
</body>
</html>
Behebung
Die Konfiguration der Inhaltsaushandlung auf dem Server enthält einen Zirkelbezug: Eine ausgewählte Variante ist selbst für eine weitere Aushandlung konfiguriert. Durchbrechen Sie die Schleife, indem Sie sicherstellen, dass jede Variante auf eine konkrete Repräsentation verweist.
Apache-spezifische Korrekturen:
Allgemeine Korrekturen:
Dieser Statuscode ist experimentell und wird in der Praxis nur selten beobachtet. Die meisten modernen Anwendungen erledigen die Inhaltsaushandlung auf Anwendungsebene und umgehen den serverseitigen Mechanismus der transparenten Aushandlung vollständig.
Code-Referenzen
.NET
HttpStatusCode.VariantAlsoNegotiates
Rust
http::StatusCode::VARIANT_ALSO_NEGOTIATES
Rails
:variant_also_negotiates
Go
http.StatusVariantAlsoNegotiates
Symfony
Response::HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL
Python3.5+
http.HTTPStatus.VARIANT_ALSO_NEGOTIATES
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_VARIANT_ALSO_NEGOTIATES
Angular
@angular/common/http/HttpStatusCode.VariantAlsoNegotiates