Bei jedem Laden einer Website im Browser, beim Senden von Formulardaten oder beim Abfragen einer API läuft im Hintergrund ein unsichtbarer, aber extrem wichtiger Austausch ab: die Übertragung von HTTP-Headern. Diese Metadaten steuern, wie Client und Server miteinander kommunizieren. Sie definieren Caching-Regeln, Medientypen, Sicherheitsvorgaben, Autorisierungen und vieles mehr. Wer moderne Webanwendungen optimieren, absichern oder Fehler effizient debuggen will, muss die wichtigsten HTTP-Header kennen.

Was sind HTTP-Header überhaupt?

HTTP-Header sind einfache Schlüssel-Wert-Paare (Key-Value Pairs), die dem eigentlichen Inhalt (dem Body) einer HTTP-Anfrage oder -Antwort vorangestellt sind. Sie sind für Endnutzer unsichtbar, liefern aber Browsern, Webservern, CDNs und Proxies essenzielle Anweisungen zur Verarbeitung der Daten. Ein einfacher Zeilenumbruch trennt die Header-Sektion vom eigentlichen Inhalt der Nachricht.

Beispiel für einen HTTP-Request mit Headern
GET /api/v1/users HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
Accept: application/json
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

Content-Type — Das Datenformat richtig deklarieren

Der Content-Type-Header teilt dem Empfänger mit, um welchen Medientyp (MIME-Typ) es sich bei den gesendeten Daten handelt. Dies betrifft sowohl die Anfrage (was der Client an den Server schickt) als auch die Antwort (was der Server an den Browser zurücksendet).

Häufig genutzte Content-Type-Werte
Content-Type: application/json
Content-Type: application/x-www-form-urlencoded
Content-Type: multipart/form-data
Content-Type: text/html; charset=UTF-8
Content-Type: text/plain
Content-Type: image/webp

Ein falsch konfigurierter Content-Type ist eine der häufigsten Fehlerquellen in der API-Entwicklung. Wenn du JSON-Daten an eine Schnittstelle sendest, den Header aber fälschlicherweise auf text/plain setzt, verweigern viele Server das korrekte Parsing und antworten mit einem Fehler des Typs *415 Unsupported Media Type*.

Cache-Control — Ladezeiten optimieren und Ressourcen schonen

Der Cache-Control-Header gehört zu den wichtigsten Performance-Stellschrauben im Web. Er bestimmt, wie lange und unter welchen Bedingungen Browser und CDNs eine Antwort zwischenspeichern dürfen:

  • no-cache — Die Ressource muss vor jeder Verwendung erst beim Server validiert werden.
  • no-store — Es darf keinerlei Speicherung im Cache erfolgen (wichtig für sensible Daten).
  • max-age=31536000 — Gibt die maximale Speicherdauer in Sekunden an (hier 1 Jahr für statische Assets).
  • public — Jede Zwischenstation (Browser, CDN, Proxy-Server) darf diese Antwort cachen.
  • private — Nur der Browser des Nutzers darf die Antwort speichern. Ideal bei personalisierten Benutzerdaten.
  • immutable — Teilt dem Browser mit, dass sich die Datei während der Cache-Laufzeit niemals ändern wird. Erspart erneute Validierungsanfragen.

Authorization — APIs und Routen absichern

Der Authorization-Header transportiert Anmeldedaten (Credentials), um die Identität des anfragenden Clients zu überprüfen. In modernen Web-Apps dominieren zwei Standards:

  • Bearer-Token — Weit verbreitet bei der Verwendung von JSON Web Tokens (JWT) und OAuth 2.0: Authorization: Bearer <token>
  • Basic Auth — Benutzername und Passwort werden via Base64 codiert übertragen: Authorization: Basic <base64(user:pass)>

Achtung: Eine Base64-Codierung ist keine Verschlüsselung! Daten im Basic-Auth-Header können spielend leicht ausgelesen werden. Nutze solche Verfahren daher zwingend und ausschließlich über verschlüsselte HTTPS-Verbindungen.

CORS-Header — Domainübergreifende Zugriffe steuern

Cross-Origin Resource Sharing (CORS) ist ein Sicherheitsmechanismus, der festlegt, welche externen Websites (Origins) auf die Ressourcen deiner API zugreifen dürfen. Ohne die passenden CORS-Header blockieren moderne Browser solche clientseitigen Cross-Origin-Anfragen automatisch:

Typische CORS-Antwort-Header des Servers
Access-Control-Allow-Origin: https://deine-app.de
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true

Ein typischer Fehler in der Praxis ist die Kombination aus der Wildcard Access-Control-Allow-Origin: * und der Erlaubnis für Cookies via Access-Control-Allow-Credentials: true. Dies ist laut Sicherheitsstandard unzulässig und führt dazu, dass Browser den Zugriff komplett blockieren.

Sicherheits-Header — Deine Web-App vor Angriffen schützen

Mit speziellen HTTP-Antwort-Headern kannst du Sicherheitsrisiken direkt im Browser des Benutzers minimieren und bekannte Angriffsvektoren blockieren:

  • Content-Security-Policy (CSP) — Definiert präzise, aus welchen Quellen Skripte, Stylesheets und Bilder geladen werden dürfen. Ein hochwirksamer Schutz gegen Cross-Site Scripting (XSS).
  • X-Frame-Options: DENY — Schützt vor Clickjacking, indem verhindert wird, dass deine Website unbefugt in einem <iframe> eingebettet wird.
  • Strict-Transport-Security (HSTS) — Erzwingt, dass der Browser die Domain nur noch über verschlüsselte HTTPS-Verbindungen aufruft.
  • X-Content-Type-Options: nosniff — Unterbindet das sogenannte MIME-Sniffing, bei dem Browser versuchen, Dateitypen eigenständig und potenziell gefährlich zu interpretieren.
  • Referrer-Policy: strict-origin-when-cross-origin — Kontrolliert, wie viele Informationen über die verweisende Seite bei ausgehenden Links übertragen werden.

ETag und Last-Modified — Intelligente Cache-Validierung

Mithilfe der Header ETag und Last-Modified lassen sich bedingte HTTP-Anfragen realisieren. Der Server teilt dem Browser mit: „Diese Version der Datei hat den Hash-Wert X.“ Bei einer erneuten Anfrage sendet der Browser diesen Hash im Header If-None-Match mit zurück. Hat sich die Datei auf dem Server nicht verändert, antwortet dieser einfach mit einem schlanken 304 Not Modified-Status. Es wird kein Response-Body übertragen, was Ladezeiten radikal verkürzt.

Accept-Encoding — Komprimierung für maximale Performance

Der Request-Header Accept-Encoding signalisiert dem Server, welche Komprimierungsalgorithmen der Browser nativ entschlüsseln kann. Der Server packt die Daten daraufhin vor dem Senden zusammen:

Header zur Datenkomprimierung
# Der Client gibt an, welche Verfahren er unterstützt:
Accept-Encoding: gzip, deflate, br

# Der Server bestätigt das genutzte Kompressionsverfahren (hier Brotli):
Content-Encoding: br

Brotli (br) erzielt bei Textdateien (HTML, CSS, JS) oft eine um 15–25 % bessere Kompressionsrate als das ältere GZIP. Ein aktiviertes Brotli-Verfahren auf dem Server verbessert die Ladezeiten und optimiert direkt deine Core Web Vitals.

API-Credentials blitzschnell codieren & decodieren

Arbeitest du häufig mit Autorisierungs-Headern? Nutze unsere kostenlosen Web-Tools, um Base64- und URL-Strings fehlerfrei zu konvertieren.