Statuscode 406 Nicht Akzeptabel: Ursachen & Lösungen

INEZA Felin-Michel

INEZA Felin-Michel

30 September 2025

Statuscode 406 Nicht Akzeptabel: Ursachen & Lösungen

Im reichhaltigen Vokabular der HTTP-Statuscodes stechen einige Codes mehr hervor als andere, während andere stillschweigend wichtige Rollen bei der Gewährleistung einer reibungslosen Client-Server-Kommunikation spielen. Der Statuscode 406 Not Acceptable ist ein solcher weniger bekannter Held. Er mag nicht so häufig erscheinen wie die beliebten 404 oder 500, aber das Verständnis seines Zwecks kann Ihr Verständnis der Inhaltsaushandlung dramatisch verbessern und die Flexibilität Ihrer Webanwendungen und APIs erhöhen.

Der Statuscode 406 Not Acceptable kann sich wie eine kryptische Nachricht Ihres Servers anfühlen. Doch sobald Sie seine Bedeutung verstehen, wird er zu einem mächtigen Signal, das Ihnen hilft, sauberere, vorhersehbarere und benutzerfreundlichere APIs zu entwerfen.

Dieser Statuscode stellt eine Kommunikationsstörung im komplexen Tanz des Content-Negotiation-Prozesses dar, bei dem Clients und Server sich auf das beste Format für den Datenaustausch einigen.

In diesem Blogbeitrag werden wir uns eingehend damit beschäftigen, was HTTP 406 Not Acceptable bedeutet, warum es auftritt, wie die Inhaltsaushandlung es beeinflusst und wie Sie als Entwickler oder API-Konsument effektiv damit umgehen können. Das Debuggen seltsamer Fehler wie 406 Not Acceptable kann ohne die richtigen Tools zeitaufwändig sein. Deshalb empfehle ich Apidog. Es ist eine kostenlose All-in-One-API-Plattform, mit der Sie APIs einfach entwerfen, simulieren, testen, debuggen und dokumentieren können, sodass Sie genau wissen, warum Sie einen 406er erhalten und wie Sie ihn schnell beheben können.

💡
Wenn Sie APIs nahtlos erkunden und testen möchten, einschließlich Antworten mit 406-Status, laden Sie Apidog kostenlos herunter. Apidog ist ein unverzichtbares API-Test- und Dokumentationstool, das die Untersuchung von HTTP-Statuscodes wie 406 einfach und effektiv macht.
Button

Nun, lassen Sie uns die Welt der Inhaltsaushandlung und des HTTP-Statuscodes 406 Not Acceptable erkunden.

Das Problem: Jeder möchte Daten auf seine eigene Art

In den frühen Tagen des Webs boten Server typischerweise ein Format für ihre Ressourcen an, meist HTML. Doch mit der Entwicklung des Webs entstanden verschiedene Clients mit unterschiedlichen Bedürfnissen:

Der Statuscode 406 existiert, weil ein Client manchmal ein Format anfordert, das der Server für diese bestimmte Ressource einfach nicht bereitstellen kann.

Was bedeutet HTTP 406 Not Acceptable eigentlich?

Der Statuscode `406 Not Acceptable` (Nicht akzeptabel) zeigt an, dass der Server keine Antwort erzeugen kann, die der Liste der akzeptablen Werte in den proaktiven Content-Negotiation-Headern der Anfrage entspricht, und dass der Server nicht bereit ist, eine Standarddarstellung zu liefern.

Einfacher ausgedrückt: „Sie haben mir genau gesagt, welche Formate Sie akzeptieren, und ich kann die Ressource in keinem dieser Formate bereitstellen.“

Eine korrekte `406`-Antwort sollte Informationen darüber enthalten, welche Formate der Server für die angeforderte Ressource bereitstellen kann. Dies geschieht typischerweise über Header oder im Antworttext.

So könnte eine `406`-Antwort aussehen:

HTTP/1.1 406 Not AcceptableContent-Type: text/htmlVary: Accept
<html><head><title>406 Not Acceptable</title></head><body><h1>Not Acceptable</h1><p>This resource is available in the following formats:</p><ul><li>application/json</li><li>application/xml</li></ul></body></html>

Für APIs ist es hilfreicher, eine strukturierte Antwort zurückzugeben:

HTTP/1.1 406 Not AcceptableContent-Type: application/jsonVary: Accept
{
  "error": "not_acceptable",
  "message": "The requested resource is not available in the requested format.",
  "available_formats": [
    "application/json",
    "application/xml"
  ]
}

Es geht nicht darum, ob die Anfrage gültig ist. Es geht darum, ob der Antworttyp akzeptabel ist.

Die Magie der Inhaltsaushandlung: Wie Accept-Header funktionieren

Um `406` zu verstehen, müssen wir wissen, wie Clients Servern mitteilen, welche Formate sie bevorzugen. Dies geschieht über den Accept-Header.

Der Accept-Header in Aktion

Wenn ein Client eine Anfrage stellt, kann er angeben, welche Inhaltstypen er verarbeiten kann und welche er bevorzugt:

Ein einfaches Beispiel:

GET /api/users/123 HTTP/1.1Accept: application/json

Dies bedeutet: „Ich möchte Benutzerdaten, und ich verstehe nur JSON.“

Ein komplexeres Beispiel:

GET /api/users/123 HTTP/1.1Accept: application/json, text/html;q=0.9, application/xml;q=0.8

Dies bedeutet: „Ich bevorzuge JSON, kann aber auch HTML (mit 90 % Präferenz) und XML (mit 80 % Präferenz) verarbeiten.“

Der `q`-Parameter (Qualitätswert) reicht von 0 bis 1, wobei 1 die höchste Präferenz darstellt.

Wenn die Aushandlung fehlschlägt

Ein `406`-Fehler tritt auf, wenn der Server den `Accept`-Header prüft und feststellt:

  1. Es verfügt über die vom Client gewünschte Ressource
  2. Es kann sie in keinem der vom Client angegebenen Formate bereitstellen
  3. Es ist nicht bereit, ein Standardformat zu senden (z. B. JSON an einen Client zu senden, der nur XML akzeptiert)

Wie passt 406 Not Acceptable in die Inhaltsaushandlung?

Wenn ein Client eine HTTP-Anfrage mit Accept-Headern sendet, die akzeptable Medientypen angeben (z. B. nur JSON-Antworten anfordert), versucht der Server, den Inhalt entsprechend zu liefern.

Wenn der Server keinen akzeptablen Inhalt bereitstellen kann, der den Kriterien entspricht, antwortet er mit:

textHTTP/1.1 406 Not Acceptable Content-Type: text/html

An diesem Punkt bedeutet dies, dass der Server die Anfrage ablehnt, weil keine der verfügbaren Inhaltsdarstellungen den Präferenzen des Clients entsprechen.

Warum Server 406 statt 200 OK zurückgeben

Sie könnten denken: Warum nicht einfach etwas zurückgeben, auch wenn es nicht das bevorzugte Format ist?

Hier ist, warum Server 406 zurückgeben:

Häufige Ursachen einer 406-Antwort

Hier sind einige typische Gründe, warum Sie 406 Not Acceptable sehen werden:

Praxisbeispiele, die 406-Fehler auslösen

1. API-Versionskonflikte

Stellen Sie sich eine API vor, die in ihrer v2 nur JSON liefert, aber ein Client erwartet immer noch XML aus v1-Zeiten:

GET /v2/products/456 HTTP/1.1Accept: application/xmlHTTP/1.1 406 Not AcceptableContent-Type: application/json
{
  "error": "This API version only supports JSON",
  "available_formats": ["application/json"]
}

2. Übermäßig restriktive Client-Konfiguration

Eine mobile App könnte fest auf die Akzeptanz von JSON programmiert sein, trifft aber auf einen Server, der bestimmte Ressourcen nur als XML bereitstellt:

GET /reports/quarterly-sales HTTP/1.1Accept: application/jsonHTTP/1.1 406 Not Acceptable

(Der Bericht ist möglicherweise nur als CSV oder PDF verfügbar)

3. Fehlender Standard-Fallback

Einige Server sind so konfiguriert, dass sie bei der Inhaltsaushandlung streng sind und sich weigern zu erraten, welches Format zurückgegeben werden soll, wenn die Aushandlung fehlschlägt.

Wie gehen Server normalerweise mit 406 um?

Interessanterweise ignorieren einige Server eine strikte Inhaltsaushandlung und greifen auf eine Standardantwort zurück, anstatt mit 406 zu antworten.

Strikte RESTful APIs oder Dienste, die eine präzise Kommunikation betonen, könnten jedoch 406 zurückgeben, wenn die Client-Anforderungen nicht erfüllt werden können.

406 Not Acceptable vs. verwandte Statuscodes

Um die Rolle von 406 zu verdeutlichen, betrachten wir verwandte HTTP-Statuscodes:

Statuscode Bedeutung Wann zu verwenden
400 Bad Request Fehlerhafte Syntax oder ungültige Anfrage Anfrage kann nicht verstanden werden
406 Not Acceptable Gültige Anfrage, aber Server kann Accept-Header nicht erfüllen Fehler bei der Inhaltsaushandlung
415 Unsupported Media Type Server kann den vom Client übermittelten Inhaltstyp nicht verarbeiten Ungültiger Medientyp des Anfragetexts
Unterschied 406 vs 415 406 bezieht sich auf den Antworttyp, 415 auf den Anfragetexttyp

Wie sollten Clients mit 406-Antworten umgehen?

Clients, die 406 erhalten, sollten:

Was können Entwickler tun, um 406 zu vermeiden oder zu handhaben?

Benutzerdefinierte 406-Fehlerseiten und -Nachrichten

Für Websites und APIs verbessert das Bereitstellen aussagekräftiger und hilfreicher 406-Fehlerantworten die Entwickler- und Benutzererfahrung:

Inhaltsaushandlung mit Apidog testen

Das Testen, wie Ihre API verschiedene Accept-Header verarbeitet, ist entscheidend für den Aufbau robuster Anwendungen. Apidog macht diesen Prozess unkompliziert und effizient.

Mit Apidog können Sie:

  1. Header einfach ändern: Fügen Sie schnell Accept-Header hinzu und ändern Sie sie, um zu testen, wie Ihr Server auf verschiedene Inhaltstyp-Anfragen reagiert.
  2. Mehrere Formate testen: Erstellen Sie eine Sammlung von Tests für denselben Endpunkt mit verschiedenen Accept-Headern (JSON, XML, HTML), um eine umfassende Abdeckung zu gewährleisten.
  3. 406-Antworten validieren: Senden Sie absichtlich restriktive Accept-Header, um zu überprüfen, ob Ihr Server korrekte 406-Antworten mit hilfreichen Fehlerinformationen zurückgibt.
  4. Content-Negotiation-Tests automatisieren: Erstellen Sie Test-Suites, die automatisch überprüfen, ob Ihre API verschiedene Inhaltstyp-Anfragen korrekt verarbeitet und entsprechende Statuscodes zurückgibt.
  5. Komplexe Szenarien debuggen: Verwenden Sie die detaillierte Protokollierung von Apidog, um genau zu verstehen, warum ein 406-Fehler aufgetreten ist und welche Formate der Server tatsächlich unterstützt.
Button

Dieser systematische Ansatz stellt sicher, dass Ihre API Clients mit unterschiedlichen Formatanforderungen elegant handhaben kann. Kurz gesagt: Anstatt im Dunkeln zu tappen, wissen Sie genau, was akzeptabel ist. Laden Sie Apidog kostenlos herunter und steigern Sie Ihre Produktivität bei der Fehlerbehebung von Inhaltsaushandlungs- und 406-Szenarien.

Best Practices für den Umgang mit 406-Fehlern

Für Server-Entwickler:

  1. Hilfreiche Fehlerinformationen bereitstellen: Wenn Sie einen 406 zurückgeben, fügen Sie immer Informationen darüber hinzu, welche Formate Sie unterstützen. Dies hilft Client-Entwicklern, ihre Anfragen zu korrigieren.
  2. Den Vary-Header verwenden: Fügen Sie einen Vary: Accept-Header in Ihre Antworten ein, um anzuzeigen, dass der Antwortinhalt vom Wert des Accept-Headers abhängt. Dies hilft Caching-Systemen, korrekt zu funktionieren.
  3. Standardverhalten berücksichtigen: Obwohl die HTTP-Spezifikation es Servern erlaubt, eine Standarddarstellung zurückzugeben, entscheiden sich viele moderne APIs dafür, streng zu sein und 406 zurückzugeben, um Clients zu zwingen, ihre Anforderungen explizit zu machen.
  4. Unterstützte Formate dokumentieren: Dokumentieren Sie klar, welche Inhaltstypen Ihre API für jeden Endpunkt unterstützt.

Für Client-Entwickler:

  1. Seien Sie flexibel bei Accept-Headern: Sofern Sie keinen spezifischen Grund haben, fügen Sie mehrere Formate mit entsprechenden Qualitätswerten in Ihren Accept-Header ein.
  2. 406 elegant handhaben: Wenn Sie einen 406 erhalten, überprüfen Sie die Antwort auf verfügbare Formate und passen Sie entweder Ihre Anfrage an oder zeigen Sie dem Benutzer eine hilfreiche Fehlermeldung an.
  3. Fallback-Logik haben: Erwägen Sie eine Fallback-Logik, die verschiedene Formate verarbeiten kann, wenn Ihr primär bevorzugtes Format nicht verfügbar ist.

Der unbesungene Held der Inhaltsaushandlung

Der Vary-Header ist entscheidend für ein korrektes Caching-Verhalten, wenn Inhaltsaushandlung beteiligt ist. Wenn ein Server Vary: Accept in seine Antwort aufnimmt, teilt er Caches mit, dass der Antwortinhalt vom Wert des Accept-Headers abhängt.

Dies verhindert, dass ein Cache fälschlicherweise eine JSON-Antwort an einen Client liefert, der XML angefordert hat, oder umgekehrt.

Auswirkungen von 406-Antworten auf SEO

Im Allgemeinen beeinflusst 406 die SEO nicht wesentlich, da Suchmaschinen die Inhaltsaushandlung in der Regel robust handhaben und gültige Antworten bevorzugen. Falsch konfigurierte APIs oder Websites, die häufig 406 zurückgeben, können jedoch Crawler oder Benutzer frustrieren.

Modernes API-Design und 406

Im modernen RESTful API-Design hat sich die Verwendung von 406 weiterentwickelt:

Dennoch bleibt 406 relevant für:

Fehlerbehebung bei 406-Fehlern

Sicherheitsaspekte rund um 406

Fazit: HTTP 406 Not Acceptable für präzise Kommunikation nutzen

Der HTTP-Statuscode 406 Not Acceptable repräsentiert ein wichtiges Prinzip der Webarchitektur: klare Kommunikation zwischen Clients und Servern über deren Fähigkeiten und Anforderungen. Es ist kein Fehler, den man fürchten muss, sondern ein Mechanismus, um sicherzustellen, dass der Datenaustausch in gegenseitig verständlichen Formaten stattfindet.

Auch wenn Sie 406 vielleicht nicht täglich begegnen, macht Sie das Verständnis davon zu einem besseren Web-Bürger. Es lehrt die Bedeutung, explizit über Datenformatanforderungen zu sein und die Formataushandlung elegant zu handhaben.

Für API-Entwickler führt die korrekte Implementierung von Inhaltsaushandlung und 406-Antworten zu robusteren und flexibleren APIs. Für Client-Entwickler stellt das Verständnis des Umgangs mit 406-Fehlern sicher, dass ihre Anwendungen sich an verschiedene Serverfähigkeiten anpassen können.

In einer Welt, in der Daten zwischen verschiedenen Systemen und Plattformen fließen müssen, ist die Fähigkeit zur Aushandlung von Inhaltsformaten wertvoller denn je. Und wenn Sie diese Aushandlungen testen und perfektionieren müssen, bietet ein Tool wie Apidog die perfekte Umgebung, um sicherzustellen, dass Ihre Anwendungen unabhängig von Formatpräferenzen effektiv kommunizieren.

Button

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen