HTTP Status 406 - Not Acceptable

Der HTTP-Status-Code 406 Not Acceptable signalisiert, dass der Server keine Response generieren kann, die den Accept-Headern des Clients entspricht. Content Negotiation ist fehlgeschlagen. Resource existiert, aber nicht in angefragtem Format (Media Type, Language, Encoding).

Typ

Response-Status-Code

Syntax

Der Status Code wird zurückgegeben bei Content Negotiation Failure.

http
HTTP/1.1 406 Not Acceptable
Content-Type: application/json

Direktiven

Der 406 Not Acceptable Status Code wird für Content Negotiation Failures verwendet.

Content Negotiation Failure
Server kann keine Response in einem Format generieren, das Client akzeptiert (Accept, Accept-Language, Accept-Encoding Header). Resource existiert, aber nicht in kompatibler Representation.
Media Type Mismatch
Häufigster Fall: Client fordert application/xml, aber Server kann nur application/json liefern. Oder Client fordert image/png, aber Resource ist nur als JPEG verfügbar.
Available Formats
Response sollte Body mit Liste verfügbarer Representations enthalten, damit Client alternativen Request senden kann.

Beispiele

Nachfolgend finden Sie praktische Anwendungsbeispiele für Status 406.

Beispiel 1 Unsupported Media Type Request

http
GET /api/users/42 HTTP/1.1
Host: api.example.com
Accept: application/xml

HTTP/1.1 406 Not Acceptable
Content-Type: application/json

{
  "error": "not_acceptable",
  "message": "Server cannot produce application/xml representation",
  "available_formats": ["application/json", "text/html"]
}

Beispiel 2 Language Not Available

http
GET /docs/manual HTTP/1.1
Host: api.example.com
Accept-Language: zh-CN

HTTP/1.1 406 Not Acceptable
Content-Type: application/json

{
  "error": "language_not_available",
  "message": "Content not available in Chinese (zh-CN)",
  "available_languages": ["en", "de", "fr", "es"]
}

Beispiel 3 Encoding Not Supported

http
GET /api/data HTTP/1.1
Host: api.example.com
Accept-Encoding: compress

HTTP/1.1 406 Not Acceptable
Content-Type: application/json

{
  "error": "encoding_not_supported",
  "message": "compress encoding not available",
  "supported_encodings": ["gzip", "deflate", "br", "identity"]
}

Content Negotiation Failure Flow

406 Not Acceptable bei Content Negotiation Failure

Vorteile für die Systemarchitektur

  • Explicit Format Support: Server kommuniziert klar, welche Representations verfügbar sind. Verhindert Client-Rätselraten über unterstützte Formate.
  • API Versioning Support: Kann für Media-Type-basiertes Versioning verwendet werden (Accept: application/vnd.api.v2+json). Legacy-Clients erhalten 406 mit verfügbaren Versionen.
  • Bandwidth Optimization: Verhindert sinnlose Response-Generierung in Format, das Client nicht verarbeiten kann. Spart Server-Ressourcen und Netzwerk-Traffic.

Spezifikation

RFC 9110, Section 15.5.7 – HTTP Semantics https://www.rfc-editor.org/rfc/rfc9110.html#name-406-not-acceptable

Weitere Spezifikationen

Accept Header, Content-Type Header