HTTPQUERY
Deutsch

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