506 Variant Also Negotiates

Der HTTP-Statuscode 506 Variant Also Negotiates Server-Fehlerantwort wird während der Inhaltsaushandlung zurückgegeben, wenn es eine rekursive Schleife im Prozess der Ressourcenauswahl gibt.

Agentengesteuerte Inhaltsaushandlung ermöglicht es einem Client und einem Server gemeinsam zu entscheiden, welche Variante einer gegebenen Ressource am besten geeignet ist, wenn der Server mehrere Varianten hat. Ein Server sendet einen 506 Statuscode aufgrund einer Serverfehlkonfiguration, die zu zirkulären Referenzen bei der Erstellung von Antworten führt.

Der Mangel an Standardisierung dafür, wie Clients automatisch aus Antworten wählen, und die zusätzlichen Round-Trips, die die Client-Server-Interaktion verlangsamen, bedeuten, dass dieser Mechanismus selten verwendet wird. Servergesteuerte Inhaltsaushandlung ist weitaus verbreiteter, wobei ein Server direkt die am besten geeignete Ressource für den Client basierend auf den Anfrage-Headern (Accept-Language, Accept, etc.) auswählt.

Status

http
506 Variant Also Negotiates

Beispiele

Ressource mit Varianten

Im folgenden Beispiel fordert ein Client eine Seite in der fr-Lokalisierung mittels des Accept-Language Headers an. Dies kann mit curl durchgeführt werden:

bash
curl  -H "Negotiate: trans" -H "Accept-Language: fr;" http://example.com/index

Dies erzeugt die folgende Anfrage:

http
GET /index HTTP/1.1
Host: example.com
User-Agent: curl/8.7.1
Accept: */*
Negotiate: trans
Accept-Language: fr

Aufgrund einer Serverfehlkonfiguration verweist die Variantenantwort für fr auf eine Typkarte, die selbst eine transparente Aushandlung verursacht. Der Server kann diesen Zustand anhand des Vorhandenseins eines TCN Headers in einer Auswahlantwort erkennen, bevor sie gesendet wird:

http
HTTP/1.1 506 Variant Also Negotiates
Date: Mon, 22 Jul 2024 10:00:00 GMT
Server: Apache/2.4.41 (Unix)
Content-Type: text/html; charset=UTF-8
Content-Length: 233
TCN: list
Vary: negotiate,accept-language
Alternates: {"index.html.en" 1 {type text/html} {language en} {length 48}}, {"another-map.html.fr.map" 1 {type text/html} {language fr} {length 45}}}}

<html>
<head>
  <title>506 Variant Also Negotiates</title>
</head>
<body>
  <h1>Variant Also Negotiates</h1>
  <p>A variant for the requested resource is itself a negotiable resource. This indicates a configuration error.</p>
</body>
</html>

Spezifikationen

Specification
RFC 2295
# section-8.1

Siehe auch