HTTP-Statuscodes sind das zentrale Signal, mit dem Webserver, Proxys, CDNs und API-Gateways auf Anfragen reagieren. Sie entscheiden darüber, ob ein Browser eine Seite rendert, ein Load Balancer einen Backend-Knoten als gesund bewertet oder ein Client bei einer REST-API retryt, cached oder Fehlerbehandlung ausführt. In der Praxis tauchen Statuscodes in sehr unterschiedlichen Oberflächen auf: als Browser-Fehlseite, in Access-Logs, in APM-Traces, in curl-Ausgaben, in CDN-Analytics oder als Teil automatisierter Tests. Die reine Zahl reicht jedoch selten zur Diagnose, weil derselbe Code aus verschiedenen Ursachen entstehen kann: von fehlerhaften Redirect-Regeln über Authentifizierungs- und CORS-Probleme bis zu Timeouts zwischen Reverse Proxy und Origin. Leserinnen und Leser stehen deshalb oft vor einer konkreten Frage: Was bedeutet der beobachtete Code in genau diesem Kontext, welche typischen technischen Auslöser kommen realistisch infrage, und welche Maßnahmen sind geeignet, um das Problem zielgerichtet zu prüfen, einzugrenzen und zu beheben?

HTTP-Statuscodes im Betrieb einordnen: Semantik, Cache- und Retry-Verhalten, Logs und typische Fehlinterpretationen
HTTP-Statuscodes sind im Betrieb weniger „Fehlermeldungen“ als verdichtete Signale über den Zustand einer Anfrage entlang einer Kette aus Client, Proxy/CDN, Load-Balancer und Origin. Die gleiche Zahl kann je nach Methode, Antwortheadern und Kontext (Browser-Navigation, API-Call, Background-Job) unterschiedliche Folgen haben. Eine belastbare Einordnung trennt deshalb Semantik (was bedeutet der Code), Transportrealität (wer hat ihn erzeugt) und Steuerwirkung (Cache, Retry, User-Agent-Verhalten).
Semantik im Zusammenspiel mit Methode, Headern und Body
Statuscodes beschreiben die Verarbeitung einer konkreten Request-Response-Interaktion. Bei identischem Code können sich die Erwartungen an Body und Folgeaktionen unterscheiden: HEAD liefert nie einen Message-Body, 204 enthält keinen, 304 darf keinen enthalten und setzt auf Validatoren wie ETag oder Last-Modified. Bei Redirects entscheidet nicht nur der Code, sondern auch die Kombination aus Location, Method-Rewrite-Regeln (z. B. bei 303) und Caching-Headern.
In REST-APIs ist die Präzision der Semantik entscheidend, weil Clients automatisieren. Ein 400 signalisiert syntaktische oder semantische Probleme der Anfrage, während 422 typischerweise Validierungsfehler auf Feldebene transportiert. 401 bedeutet fehlende oder ungültige Authentisierung und verlangt in der Regel WWW-Authenticate; 403 steht für verweigerte Autorisierung trotz identifizierbarer Identität. Für idempotente Methoden wie GET, PUT oder DELETE sind Retry-Strategien technisch eher vertretbar als für nicht-idempotente POST, sofern kein Idempotency-Key eingesetzt wird.
Cache-Wirkung und Revalidierung: wann Codes „sticky“ werden
Ob eine Antwort im Cache landet, hängt nicht primär am Statuscode, sondern an Cache-Headern und Cache-Implementierung. Trotzdem existieren betriebliche Muster: 200 wird häufig gecacht, 301 kann in Browsern und Zwischen-Caches sehr langlebig werden, 302/307 eher temporär. 304 ist keine „Fehlerantwort“, sondern das Ergebnis einer bedingten Anfrage mit If-None-Match oder If-Modified-Since; sie reduziert Bandbreite, setzt aber korrekte Validatoren voraus. Fehlkonfigurationen führen zu irritierenden Effekten: ein zu aggressives Cache-Control: public, max-age=... auf dynamischen Fehlerseiten kann 404– oder 500-Antworten im CDN „einfrieren“.
| Signal | Typische Folge im Betrieb | Relevante Header/Details |
|---|---|---|
304 Not Modified |
Origin entlastet, aber Debugging erschwert, wenn Validatoren falsch sind | ETag, Last-Modified, If-None-Match, If-Modified-Since |
301 Moved Permanently |
Sehr persistent; fehlerhafte Ziele wirken lange nach | Location, optional Cache-Header; HSTS kann Korrekturen zusätzlich erschweren |
302/307 Redirect |
Temporäre Umleitung; Methodenerhalt bei 307 relevant |
Location; Caching abhängig von Cache-Control |
404 Not Found |
Kann absichtlich sein (Soft-Delete/Maskierung) oder ein Routing-/Deploy-Problem | Negative Caching möglich; in CDNs oft separate TTL für Fehler |
503 Service Unavailable |
Geeignet für Wartung/Überlast; kontrollierbares Retry-Verhalten | Retry-After steuert Clients/Robots; gesundheitscheck-kompatibel |
Retry-Verhalten: wann Wiederholungen helfen und wann sie Schaden anrichten
Retries sind primär eine Funktion von Client-Logik, SDKs, Proxies und Load-Balancern; der Statuscode liefert nur Hinweise. 429 und 503 sind für kontrollierte Wiederholungen geeignet, idealerweise mit Retry-After sowie Exponential Backoff und Jitter. 502/504 können transiente Upstream-Probleme anzeigen; bei dauerhaft falscher Upstream-Konfiguration verstärken Retries jedoch die Last. 500 ist semantisch „serverseitig“, aber operativ heterogen: vom Nullpointer bis zu Timeouts in Downstream-Abhängigkeiten. Ohne Korrelation über Request-IDs werden Retries schnell zum Rauschen.
- Retry-freundliche Signale:
429und503bevorzugen, wenn Drosselung oder geplante Degradation kommuniziert werden soll;Retry-Aftersetzen und Grenzen für parallel laufende Versuche definieren. - Idempotenz absichern: Bei nicht-idempotentem
POSTWiederholungen nur mit Idempotency-Key, z. B.Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000, oder serverseitiger Deduplizierung zulassen. - Timeout-Kaskaden entschärfen: Bei
504und499(Nginx, clientseitiger Abbruch) Timeouts entlang der Kette konsistent staffeln; typische Prüfpunkte sindproxy_read_timeout,gunicorn --timeoutoder Load-Balancer-Idle-Timeouts. - Retry-Schäden vermeiden: Bei systematischen
401/403/404keine automatischen Retries; stattdessen Konfiguration, Routing, Credentials oder Deployment-Artefakte prüfen.
Logs, Metriken und Korrelation: wer hat den Code wirklich erzeugt?
Im Betrieb zählt die Quelle des Statuscodes. Ein Browser sieht nur den Endcode, während im Backend mehrere Hops beteiligt sein können. Reverse Proxies und CDNs erzeugen eigene Codes (z. B. bei Origin-Timeouts) oder maskieren Upstream-Fehler. Zudem existieren nicht standardisierte, aber verbreitete Codes in Logs, etwa 499 (Client schließt Verbindung) oder 520-Klassen bei bestimmten CDNs. Für eine saubere Analyse werden daher mindestens Request-Method, Pfad, Host, Response-Code, Upstream-Status, Latenzen und eine durchgängige Correlation-ID benötigt.
Praktisch bewährt sich die parallele Betrachtung von Access-Log, Upstream-Log und Applikations-Log. Bei Nginx liefern Felder wie $status, $upstream_status, $request_time und $upstream_response_time schnell Hinweise, ob die Antwort am Edge, im Proxy oder in der Anwendung entstand. In Microservice-Setups sollte eine Trace-ID (z. B. traceparent) vom Edge bis zum letzten Downstream propagiert werden, sonst bleiben 502/504 ohne Ursachenbezug. Für APIs sind zusätzlich Rate-Limit-Header und Auth-Fehlerdetails (ohne sensitive Daten) wichtig, um 401/403/429 differenzieren zu können.
Typische Fehlinterpretationen, die Incident-Triage verzögern
304als „kaputte Seite“:304ist in der Regel ein gutes Zeichen; Probleme liegen häufiger bei inkonsistenten Validatoren (ETag-Wechsel durch Kompression/Varianten) oder fehlerhaftemVary.403als „Login kaputt“:403bedeutet nicht Authentisierung, sondern fehlende Berechtigung oder Policy-Block; bei WAF/CSRF/Geo-Blocking entstehen403oft außerhalb der Anwendung.404mit erfolgreichem HTML als „harmlos“: „Soft-404“ (inhaltlich Fehlerseite, technisch200) verfälscht Monitoring und SEO-Integrität; umgekehrt kann ein echtes404durch Negativ-Caching länger sichtbar bleiben als die Ursache.502gleich „Server down“:502bedeutet „Bad Gateway“ und zeigt oft Protokoll-/TLS-/Header-Probleme zwischen Proxy und Upstream, fehlerhafte Health-Checks oder abgestürzte Worker, nicht zwingend einen kompletten Ausfall.500als Enddiagnose:500ist ein Sammelstatus; ohne konkrete Fehlerklasse im Application-Log, passende Alarmierung nach Endpoint und Korrelation überX-Request-IDbleibt die Maßnahme unscharf.
Referenztabellen 1xx–5xx: Kurzbeschreibung, technische Bedeutung, typische Ursachen (Client/Server/Proxy/CDN) und empfohlene Maßnahmen
Die folgenden Referenztabellen ordnen gängige HTTP-Statuscodes nach Klassen ein und ergänzen die Kurzbeschreibung um technische Bedeutung, typische Auslöser entlang der Kette Client–Origin–Proxy/CDN sowie konkrete Maßnahmen. In Proxy- und CDN-Setups entstehen Fehler häufig nicht am Origin, sondern durch Timeouts, Policy-Entscheidungen oder Edge-Caching. Bei REST-APIs beeinflussen Content-Negotiation, Authentifizierung und Semantik der Methode (GET, POST, PUT, DELETE) die korrekte Codewahl.
1xx (Informational) und 2xx (Successful): Protokollfluss und Erfolg
| Statuscode | Kurzbeschreibung | Technische Bedeutung | Typische Ursachen (Client/Server/Proxy/CDN) | Empfohlene Maßnahmen |
|---|---|---|---|---|
100 Continue |
Weiter senden | Server akzeptiert Header und erwartet Request-Body (häufig mit Expect: 100-continue). |
Client nutzt große Uploads; Proxy terminiert Verbindung und leitet Expect uneinheitlich weiter. |
Kompatibilität von Proxies testen; bei Problemen Expect-Verhalten im Client anpassen; Uploads per TLS stabilisieren. |
101 Switching Protocols |
Protokollwechsel | Upgrade auf anderes Protokoll (z. B. WebSocket via Upgrade). |
Reverse Proxy blockiert Upgrade-Header; CDN unterstützt WebSockets nur in bestimmten Tarifen/Regions. |
Proxy/CDN für WebSockets konfigurieren; Header-Passthrough prüfen; Idle-Timeouts am Edge erhöhen. |
103 Early Hints |
Frühe Hinweise | Vorab-Header (typisch Link) zur schnelleren Ressourcenvorladung. |
Zwischenproxy entfernt 103; CDN cached oder coalesced Antworten unerwartet. | Browser/Proxy-Kompatibilität prüfen; nur idempotente, sichere Early-Hints-Links senden; Monitoring auf Doppel-Preloads. |
200 OK |
Erfolg | Standard-Erfolg mit Response-Body (oder leer, je nach Methode). | Fehler im Response wird fälschlich als 200 ausgeliefert (z. B. App rendert Fehlerseite). | Fehler sauber mit 4xx/5xx modellieren; API-Fehlerstruktur mit korrektem Status und Content-Type liefern. |
201 Created |
Erstellt | Ressource angelegt; idealerweise mit Location auf neue URI. |
Backend erzeugt Ressource, vergisst Location; Proxy rewrites Pfade. |
Location absolut/korrekt setzen; Rewrite-Regeln am Proxy/CDN validieren. |
202 Accepted |
Angenommen | Asynchrone Verarbeitung gestartet, aber noch nicht abgeschlossen. | Queue/Worker-Latenz; CDN/Proxy sieht lange Verarbeitung und kappt Verbindung, obwohl asynchron möglich wäre. | Status-Endpoint für Job-Tracking definieren; Timeouts reduzieren durch 202 + Polling/Webhook; Idempotency Keys nutzen. |
204 No Content |
Kein Inhalt | Erfolg ohne Body; Browser aktualisiert Ansicht nicht automatisch. | Client erwartet Body und scheitert beim Parsing; API sendet trotzdem Body (inkonsistent). | Bei 204 keinen Body senden; Client auf leere Antworten vorbereiten. |
206 Partial Content |
Teilinhalt | Antwort auf Range-Request (Range/Content-Range), wichtig für Video/Downloads. |
Origin/CDN unterstützt Ranges nicht konsistent; Proxy entfernt Range-Header. |
Range-Support end-to-end testen; Header-Passthrough konfigurieren; Caching-Policy für Teilinhalte prüfen. |
3xx (Redirection): Weiterleitungen, Caching und Edge-Rewrites
| Statuscode | Kurzbeschreibung | Technische Bedeutung | Typische Ursachen (Client/Server/Proxy/CDN) | Empfohlene Maßnahmen |
|---|---|---|---|---|
301 Moved Permanently |
Dauerhaft umgezogen | Neue dauerhafte URL; Clients und Caches dürfen speichern. | Domain- oder Pfadwechsel; CDN-Page-Rule erzwingt 301; falsche Canonical-Strategie. | 301 nur bei dauerhaftem Wechsel; Redirect-Ketten vermeiden; Location korrekt (https, Host, Pfad). |
302 Found |
Temporär | Temporäre Umleitung; historisch oft als GET-Redirect interpretiert. | Login-Flows; Wartungsmodus am Proxy; A/B-Testing am Edge. | Für methodenerhaltende Umleitungen 307 bevorzugen; Cache-Control setzen, um falsches Caching zu vermeiden. |
303 See Other |
Siehe andere | Nach POST auf eine GET-URL verweisen (Post/Redirect/Get). |
Formular-Workflows; API bestätigt Erstellung, liefert aber Abruf-URL. | Für PRG korrekt einsetzen; Ziel-URL stabil halten; Response-Header konsistent. |
304 Not Modified |
Nicht geändert | Conditional Request erfüllt (z. B. If-None-Match, If-Modified-Since), kein Body. |
ETag/Last-Modified inkonsistent durch Multiple Origins; CDN normalisiert ETags oder komprimiert on-the-fly. | Stabile Validatoren (ETag/Last-Modified) sicherstellen; Weak/Strong ETags bewusst wählen; Cache-Key-Varianten (Encoding) prüfen. |
307 Temporary Redirect |
Temporär, Methode bleibt | Umleitung ohne Methodenwechsel; wichtig für APIs. | Temporäre Routing-Änderungen; Blue/Green am Load Balancer. | Für APIs bevorzugen; Clients testen, ob Redirects bei Non-GET erlaubt sind; Redirects auf Auth-Endpunkte begrenzen. |
308 Permanent Redirect |
Dauerhaft, Methode bleibt | Permanente Umleitung mit Methoden- und Body-Erhalt. | Canonical- oder HTTPS-Migration; Edge erzwingt 308. | Nur einsetzen, wenn die Ziel-URL dauerhaft ist; Upgrade-Strategien dokumentieren; HSTS passend konfigurieren. |
4xx (Client Error): Anfrage ungültig, nicht autorisiert oder durch Policies geblockt
| Statuscode | Kurzbeschreibung | Technische Bedeutung | Typische Ursachen (Client/Server/Proxy/CDN) | Empfohlene Maßnahmen |
|---|---|---|---|---|
400 Bad Request |
Ungültige Anfrage | Syntax/Parsing der Request fehlgeschlagen (Header, URL, Body). | Ungültiges JSON; fehlerhafte Content-Length; WAF blockiert aufgrund Signatur; Proxy bricht bei Oversized Headern ab. |
Request validieren und Fehlermeldung präzisieren; Grenzwerte für Header/Body dokumentieren; WAF-Regeln mit Logs abgleichen. |
401 Unauthorized |
Nicht authentifiziert | Authentifizierung erforderlich oder fehlgeschlagen; sollte WWW-Authenticate enthalten. |
Abgelaufenes Token; fehlender Authorization-Header; CDN entfernt Header; Clock-Skew bei JWT. |
Header-Passthrough sicherstellen; Token-Lifetime/Refresh implementieren; Zeitquelle synchronisieren; WWW-Authenticate sauber setzen. |
403 Forbidden |
Verboten | Anfrage verstanden, aber verweigert (Autorisierung/Policy). | ACL/RBAC verweigert; IP/Geo-Block am CDN; Hotlink-Schutz; fehlende CORS-Freigabe wird oft als „CORS-Fehler“ sichtbar, kann serverseitig 403 sein. | Policy-Grund in Logs ausweisen; CDN/WAF-Entscheidungspfade prüfen; bei CORS korrekte Access-Control-Allow-*-Header liefern. |
404 Not Found |
Nicht gefunden | Ressource existiert nicht (oder wird so präsentiert). | Falscher Pfad/Rewrite; CDN cached 404; Origin-Routen fehlen; API-Versionierung nicht getroffen. | Routing/Rewrite-Regeln prüfen; Negative Caching am CDN steuern; bei APIs klare Version/Endpoint-Dokumentation. |
405 Method Not Allowed |
Methode nicht erlaubt | Ressource existiert, aber Methode nicht zulässig; Allow sollte enthalten sein. |
Proxy erlaubt nur GET/POST; CORS-Preflight OPTIONS nicht geroutet; API-Gateway blockt PUT/DELETE. |
Allow-Header pflegen; OPTIONS für CORS explizit unterstützen; Gateway/Proxy-Methodenliste anpassen. |
409 Conflict |
Konflikt | Konflikt mit aktuellem Zustand (z. B. Versionskonflikt). | Optimistic Locking; doppelte Erstellung; Idempotency fehlt bei Retries durch Proxy. | ETags mit If-Match verwenden; Idempotency Keys einführen; Konfliktursache maschinenlesbar im Body liefern. |
410 Gone |
Entfernt | Ressource bewusst dauerhaft entfernt. | Content-Retirement; API-Endpoint abgekündigt. | 410 nur bei echter Entfernung; Alternativen über Link oder Dokumentation bereitstellen; CDN-Cache invalidieren. |
413 Content Too Large |
Zu groß | Payload überschreitet Limit (Origin oder Proxy). | Upload-Limits am Reverse Proxy/CDN; Multipart-Uploads; API-Gateway Body-Size-Grenze. | Grenzwerte harmonisieren; große Uploads via Chunking/Resumable Uploads; aussagekräftige Fehlermeldung inkl. Maximalgröße. |
415 Unsupported Media Type |
Nicht unterstütztes Format | Content-Type nicht akzeptiert oder Body nicht parsebar für diesen Typ. |
Fehlender/inkorrekter Content-Type; JSON mit falscher Kodierung; API erwartet application/json. |
Content-Negotiation strikt validieren; klare Fehlermeldung; Clients auf korrekte Header verpflichten. |
429 Too Many Requests |
Rate Limit | Zu viele Requests in Zeitfenster; oft mit Retry-After. |
Client-Spikes; Bot-Traffic; API-Gateway/CDN-Rate-Limit; Retry-Stürme durch Timeouts. | Retry-After setzen; Backoff-Strategien implementieren; Limits pro Token/IP definieren; Edge-Rate-Limits mit Origin-Limits abstimmen. |
5xx (Server Error): Origin-Fehler, Upstream-Probleme und Edge-Timeouts
| Statuscode | Kurzbeschreibung | Technische Bedeutung | Typische Ursachen (Server/Proxy/CDN) | Empfohlene Maßnahmen |
|---|---|---|---|---|
500 Internal Server Error |
Allgemeiner Serverfehler | Unerwarteter Fehler in Applikation oder Serverlogik. | Unhandled Exception; fehlerhafte Deployments; Template/Serialization-Fehler; WAF/Proxy maskiert Upstream-Fehler als 500. | Fehler korrelieren (Request-ID); Rollback/Feature-Flag; strukturierte Logs und Traces aktivieren; differenziertere 4xx/5xx verwenden. |
502 Bad Gateway |
Ungültige Upstream-Antwort | Gateway/Proxy erhielt ungültige Antwort vom Upstream. | Origin down; TLS-Handshake zum Upstream scheitert; falsche DNS/Origin-IP am CDN; Upstream sendet fehlerhafte Header. | Origin-Health prüfen; TLS-Zertifikatskette/SNI validieren; DNS/Origin-Pool korrigieren; Header-Größenlimits abstimmen. |
503 Service Unavailable |
Nicht verfügbar | Temporäre Nichtverfügbarkeit, oft mit Retry-After. |
Wartung; Überlast; Connection-Pool erschöpft; CDN schaltet auf „Origin Unreachable“ und liefert 503. | Auto-Scaling/Queuing; Wartungsfenster sauber kennzeichnen; Retry-After setzen; Circuit-Breaker und Load-Shedding implementieren. |
504 Gateway Timeout |
Gateway-Timeout | Gateway/Proxy wartet zu lange auf Upstream. | Langsame DB; blockierende I/O; zu strenge Timeouts am CDN/Load Balancer; große Responses ohne Streaming. | Timeout-Kette end-to-end abstimmen; langsame Endpoints profilieren; Streaming/Chunked Responses prüfen; Hintergrundverarbeitung mit 202 erwägen. |
507 Insufficient Storage |
Nicht genügend Speicher | Server kann Anfrage wegen Speichermangel nicht abschließen. | Disk voll; Object-Storage-Quota; Log-Partition wächst; Upload-Zwischenspeicher am Proxy erschöpft. | Monitoring/Quotas; Log-Rotation; Spool/Temp-Limits prüfen; Speicherbereinigung automatisieren. |
Schnelle Diagnostik: Einordnung nach Quelle (Browser, Origin, Proxy/CDN)
Bei identischen Statuscodes unterscheiden sich Ursachen je nach Erzeuger. Ein 403 aus dem Origin folgt meist aus Autorisierung oder Dateirechten; ein 403 vom CDN resultiert häufig aus WAF-, Geo- oder Bot-Policies. Timeouts zeigen sich am Edge oft als 504, obwohl der Origin später noch verarbeitet. Hinweise liefern Response-Header wie Via, Server oder CDN-spezifische Trace-IDs sowie abweichende Error-Seiten.
- Quelle identifizieren: Response-Header auf Proxy-/CDN-Spuren prüfen, z. B.
Via,X-Request-ID, CDN-Trace-IDs; bei Bedarf Vergleich ohne Edge über direkten Origin-Host (nur kontrolliert, z. B. intern) oder per expliziter Auflösung mitcurl --resolve example.com:443:ORIGIN_IP https://example.com/. - Request reproduzieren: Minimalen Request mit
curl -iodercurl -vausführen; bei APIs zusätzlich Header/Body explizit setzen, z. B.curl -i -H "Accept: application/json" -H "Content-Type: application/json" --data '{}' https://api.example.com/resource. - Caching ausschließen: Bei 3xx/4xx/5xx Cache-Verhalten prüfen, z. B.
Cache-Control,Age,ETag; zum Testen Cache umgehen oder variieren, z. B.curl -i -H "Cache-Control: no-cache" https://example.com/. - Timeout-Kette prüfen: Abstimmung zwischen Client-, CDN-, Load-Balancer- und App-Timeouts; bei
504korrelierende Upstream-Logs mit Zeitstempeln und Request-ID abgleichen. - REST-Semantik schärfen: Fehlerzustände konsistent codieren (z. B.
401vs.403,404vs.410,409bei Versionskonflikten); bei429und503optionalRetry-Aftersetzen, um Retries steuerbar zu machen.
Sonderfälle aus der Praxis: Redirect-Ketten, Auth und CORS, Range/Conditional Requests, REST-APIs hinter Reverse Proxy/CDN und Fehlerbilder mit Querverweisen
Redirect-Ketten, Loop-Erkennung und Methodenwechsel
Redirects wirken oft trivial, werden in der Praxis aber durch Ketten, gemischte Protokolle und Caching-Regeln fehleranfällig. Typische Symptome sind wechselnde Statuscodes (z. B. 301→302→200), unerwartete Ziel-URLs oder Endlosschleifen, die Browser als „zu viele Weiterleitungen“ abbrechen. Technisch entscheidend sind Ziel-URL, Weiterleitungstyp, Cache-Header und die Frage, ob sich die HTTP-Methode während des Redirects ändert. Bei 301/302 wird ein POST je nach Client historisch teils zu GET umgeschrieben; 307/308 erhalten Methode und Body und sind für API-Requests daher häufig die sicherere Wahl.
| Fehlerbild / Beobachtung | Typische Ursache | Empfohlene Maßnahmen |
|---|---|---|
| Mehrfach-Redirect bis zum Ziel (Kette) | HTTP→HTTPS, www↔non-www, Trailing-Slash-Rewrites, App-Router und CDN-Regeln greifen nacheinander | Kette auf eine Weiterleitung reduzieren; Canonical-Host und -Schema zentral festlegen; Regeln am „Edge“-Einstieg konsolidieren |
| Redirect-Loop | Widersprüchliche Regeln (z. B. App erzwingt HTTPS, Proxy meldet falsches Schema); Cookie- oder Locale-Redirects ohne Abbruchbedingung | Weiterleitungsbedingungen prüfen; Weiterleitung nur anhand stabiler Signale; Proxy-Header wie Forwarded bzw. X-Forwarded-Proto korrekt auswerten |
| POST wird zu GET nach Redirect | 301/302-Verhalten je Client; Formular-/API-Endpunkte leiten um | Für methodenerhaltende Redirects 307/308 einsetzen; POST-Endpunkte nicht umleiten, sondern direkt korrekt veröffentlichen |
| Unerwartete Caches alter Redirects | Permanente Redirects werden gecacht; fehlerhafte Cache-Control-Policy oder CDN-Caching |
Redirect-Cache bewusst steuern (Cache-Control, Expires); bei Rollbacks Cache invalidieren; 302/307 nutzen, wenn Ziel noch nicht final |
Auth-Sonderfälle: 401 vs. 403, Sessions, Tokens und Browser-Prompts
Im Auth-Kontext entscheidet die korrekte Trennung zwischen „nicht authentifiziert“ und „nicht autorisiert“ über Debugbarkeit und Client-Verhalten. 401 Unauthorized signalisiert fehlende oder ungültige Authentifizierung und sollte bei HTTP-Authentifizierung fast immer einen WWW-Authenticate-Header enthalten. 403 Forbidden zeigt an, dass Authentifizierung vorhanden sein kann, die Berechtigung jedoch fehlt oder der Zugriff aus Policy-Gründen blockiert wird (z. B. IP-Block, WAF-Regel, fehlende Rollen).
Häufige Praxisprobleme entstehen, wenn Reverse Proxies Auth übernehmen und Upstreams dennoch eigene Auth-Checks durchführen, oder wenn Session-Cookies am Edge verloren gehen (Domain-, Path-, Secure-, SameSite-Attribute). Bei APIs mit Bearer Tokens führt eine ausgelaufene Signatur typischerweise zu 401, während ein gültiges Token ohne ausreichende Scopes sauber als 403 zurückgegeben wird. Für Rate-Limits ist 429 Too Many Requests mit Retry-After semantisch passender als ein generisches 403.
- 401 mit Challenge: Bei HTTP-Auth
WWW-Authenticate: Basic realm="..."oderWWW-Authenticate: Bearer error="invalid_token"senden; ohne Challenge können Browser/Clients uneinheitlich reagieren. - 403 gezielt begründen: Für APIs maschinenlesbare Fehlerobjekte liefern und Korrelation mit
X-Request-IDodertraceparentermöglichen; bei WAF/CDN-Sperren im Log die Rule-ID ablegen. - Cookie-Fallen hinter Proxy: Set-Cookie-Attribute prüfen, insbesondere
Securebei HTTPS-Termination am Proxy undSameSite=None; Securefür Cross-Site-Flows; Domain/Path konsistent halten. - 429 statt „verstecktes“ Throttling: Rate-Limits mit
429undRetry-Afterkommunizieren; zusätzlich Header wieRateLimit-LimitundRateLimit-Remainingnur nutzen, wenn Clients diese erwarten.
CORS und Preflight: wenn 200 im Log steht, aber der Browser blockiert
CORS-Probleme erscheinen häufig als „Netzwerkfehler“, obwohl der Server formal erfolgreich antwortet. Auslöser ist meist ein fehlender oder falscher Access-Control-Allow-Origin-Header oder ein nicht erfüllter Preflight. Preflight-Requests verwenden OPTIONS und erwarten passende Antworten auf Access-Control-Request-Method und Access-Control-Request-Headers. Ein Backend kann dabei 200 liefern, während der Browser die Antwort verwirft, wenn Access-Control-Allow-Credentials und Origin-Regeln nicht konsistent sind.
Typische Fehlkonfigurationen betreffen Wildcards mit Credentials (nicht zulässig), fehlende Weitergabe der Origin durch Caches oder das „Verschlucken“ von OPTIONS durch Reverse Proxies. Auch Redirects im Preflight sind problematisch, weil Browser Preflight-Redirects restriktiv behandeln; deshalb sollten CORS-Endpunkte stabil ohne Umleitung erreichbar sein.
Range- und Conditional Requests: 206, 304, 412 und „mysteriöse“ 416
Teilantworten und Cache-Validierung erzeugen Statuscodes, die in Monitoring und Support häufig missverstanden werden. 206 Partial Content entsteht durch Range-Header (z. B. Videostreaming, Download-Resumes) und muss zu Content-Range und konsistenter Content-Length-Berechnung passen. 304 Not Modified ist kein Fehler, sondern die erwartete Antwort auf If-None-Match bzw. If-Modified-Since; dabei darf der Server keinen Response-Body senden.
412 Precondition Failed tritt auf, wenn Vorbedingungen wie If-Match scheitern und schützt vor Lost Updates (wichtig bei PUT/PATCH). 416 Range Not Satisfiable entsteht, wenn ein Client Bereiche anfordert, die zur Ressource nicht passen, häufig nach Dateiänderungen oder wenn ein CDN einen veralteten Content-Length-Stand cached. In diesen Fällen sollte die Ressource ETags korrekt versionieren und Proxies müssen Variationen über relevante Header respektieren.
- 206 korrekt bedienen:
Accept-Ranges: bytesnur setzen, wenn Byte-Ranges zuverlässig unterstützt werden; zu jeder Range-AntwortContent-Rangeund passendeETag/Last-Modifiedliefern. - 304 sauber ausspielen: Für starke Validatoren
ETagbevorzugen; bei304keine Entity-Header inkonsistent ändern, sonst drohen Cache-Divergenzen zwischen Browser, Proxy und CDN. - 412 gezielt nutzen: Bei konkurrierenden Schreibzugriffen
If-Matchmit ETag verlangen; ohne Precondition lieber428 Precondition Requirederwägen, wenn Clients damit umgehen können. - 416 analysieren: Client-Resumes prüfen; bei CDNs Cache-Key und Invalidation kontrollieren; bei dynamischen Dateien Range-Requests ggf. deaktivieren oder stabil versionierte URLs verwenden.
REST-APIs hinter Reverse Proxy/CDN: „richtig“ am Origin, „falsch“ am Edge
Zwischen Client und Origin liegen oft Load Balancer, Ingress Controller, API-Gateways und CDNs, die Statuscodes transformieren oder verdecken. Ein klassisches Muster ist 502 Bad Gateway am Proxy, während der Upstream intern z. B. 500 oder gar korrekt 200 antwortet, aber die Verbindung abbricht. 504 Gateway Timeout entsteht, wenn der Proxy-Timeout kleiner als der Upstream-Processing-Timeout ist; der Origin arbeitet dann weiter, während der Client bereits eine 504 sieht.
Für REST-APIs ist außerdem relevant, ob das Gateway Responses cached, Header entfernt oder Kompression/Chunking verändert. Fehlende Weitergabe von Authorization oder das Caching von 401/403 am Edge erzeugt schwer zu reproduzierende Zustände. Korrekte Protokollierung erfordert deshalb eine durchgängige Request-ID und die Erfassung beider Perspektiven (Edge und Origin) inklusive Upstream-Status, Verbindungsfehler und Latenzen.
| Status am Client | Häufige Ursache im Proxy/CDN-Kontext | Prüfpunkte (konkret) |
|---|---|---|
| 502 | Upstream nicht erreichbar, TLS-Handshake zum Origin scheitert, ungültige Antwort (Header/Chunking) | Origin-Healthcheck; TLS-Parameter; maximale Headergröße; Upstream-Response im Edge-Log; Verbindungspool und Retries |
| 503 | Kein gesunder Upstream, Wartungsmodus, Connection-Limits, Überlastschutz am Gateway | Backends im Pool; Circuit-Breaker; Rate-Limits; Wartungsseiten-Regeln; Retry-After falls sinnvoll |
| 504 | Proxy-Timeout, langsame DB/Downstream, Long-Polling ohne passende Timeouts | Timeout-Kette harmonisieren (Client/Edge/Origin); asynchrone Jobs; Streaming; serverseitige Limits und Query-Optimierung |
| 499 (nginx-logisch) | Client bricht ab, häufig durch Timeouts oder Navigation; kein offizieller RFC-Status | Client-Timeouts; große Responses; Mobilfunkabbrüche; Server- und Edge-Latenz korrelieren; nicht als Origin-Fehler missdeuten |
Fehlerbilder mit Querverweisen: schnelle Zuordnung über Muster
Viele Vorfälle zeigen nicht „den einen“ Statuscode, sondern Kombinationen über mehrere Schichten. Ein Browser meldet etwa CORS-Blockade, während das Backend 200 liefert; ein Monitoring sieht 5xx am Edge, obwohl der Origin gesund ist; oder ein Client interpretiert 302 als Erfolg und ignoriert, dass ein API-Call stillschweigend auf eine Login-Seite umgeleitet wurde. Für eine belastbare Diagnose sollten Statuscode, Location, relevante Header und die Route (Edge/Origin) gemeinsam betrachtet werden.
- „Zu viele Weiterleitungen“: Korrelation mit
301/302/307/308, Prüfung von Schema/Host-Normalisierung, Cookies und Proxy-Signalen wieX-Forwarded-Proto. - „CORS error“ bei scheinbar erfolgreichem Request: Preflight
OPTIONSin Logs suchen; Response-HeaderAccess-Control-Allow-Origin,Access-Control-Allow-Methods,Access-Control-Allow-Headers,Vary: Originprüfen; Redirects im Preflight vermeiden. - Download bricht ab / Video stottert: Auftreten von
206und416prüfen; Änderungen an Asset-Versionierung (ETag/URL) und CDN-Cache; bei dynamischen Inhalten Range-Unterstützung verifizieren. - API-Clients sehen HTML statt JSON: Unerwünschte Redirects auf Login (häufig
302) oder WAF-Blockseiten (oft403) identifizieren; Content-Negotiation überAccept: application/jsonkonsistent behandeln und Fehlerantworten im gleichen Format liefern. - Edge 5xx, Origin 2xx: Upstream-Timeouts, Body-Größenlimits, Header-Sanitizing und Kompressions-/Chunking-Unterschiede zwischen Edge und Origin prüfen; Request-ID über
X-Request-IDend-to-end durchreichen.
Werbung
(**) UVP: Unverbindliche Preisempfehlung
Preise inkl. MwSt., zzgl. Versandkosten
