HTTP (Hypertext Transfer Protocol) ist das Protokoll, mit dem Browser, Apps und Server sprechen. Es ist ein einfaches Frage-Antwort-Muster: Der Client sendet eine Anfrage, der Server antwortet. Jede Webseite, jede API und fast jede App nutzt es.
Anfrage und Antwort
GET /wissen/ HTTP/1.1
Host: www.example.de
User-Agent: curl/8.5
Accept: text/html
Der Server antwortet mit Statuszeile, Headern und Rumpf:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 14523
Cache-Control: max-age=3600
<!doctype html>...
Methoden
GET– Daten lesen, darf keine Änderung auslösenPOST– etwas anlegen oder eine Aktion auslösenPUT– eine Ressource vollständig ersetzenPATCH– eine Ressource teilweise ändernDELETE– löschenHEAD/OPTIONS– nur Header abrufen bzw. Fähigkeiten erfragen
GET und HEAD gelten als safe und idempotent: Wiederholen ändert nichts. Genau darauf baut die Zwischenspeicherung im Netz auf.
Statuscodes
- 2xx – Erfolg: 200 OK, 201 Created, 204 No Content
- 3xx – Umleitung: 301 dauerhaft, 302 temporär, 304 Not Modified
- 4xx – Clientfehler: 400 Bad Request, 401 nicht authentifiziert, 403 verboten, 404 nicht gefunden, 429 Rate Limit
- 5xx – Serverfehler: 500 interner Fehler, 502 Bad Gateway, 503 nicht verfügbar, 504 Timeout
Die Unterscheidung 401 gegen 403 ist praktisch wichtig: 401 heißt „wer bist du?", 403 heißt „ich weiß, wer du bist – darfst aber nicht".
HTTPS: HTTP über TLS
HTTPS ist kein eigenes Protokoll, sondern HTTP innerhalb einer TLS-Verbindung, standardmäßig auf Port 443. Es leistet drei Dinge:
- Vertraulichkeit – Inhalte sind verschlüsselt
- Integrität – Manipulation fällt auf
- Authentizität – das Zertifikat belegt, mit wem man wirklich spricht
Beim Handshake einigen sich Client und Server auf Protokollversion und Verfahren; der Server weist sich mit einem Zertifikat aus, das eine Zertifizierungsstelle signiert hat. Kostenlose Zertifikate liefert Let's Encrypt automatisiert.
curl -v https://example.de/ # Handshake und Header mitlesen
curl -I https://example.de/ # nur die Antwort-Header
Versionen
- HTTP/1.1 – eine Anfrage pro Verbindung gleichzeitig (mit Pipelining-Einschränkungen)
- HTTP/2 – mehrere Streams über eine TCP-Verbindung, Header-Kompression
- HTTP/3 – über QUIC statt TCP; schnellere Verbindungsaufnahme, robuster bei Paketverlust
Worauf man in der Praxis achtet
Immer Content-Length oder Chunked-Encoding korrekt setzen, aussagekräftige Statuscodes verwenden, Cache-Control bewusst wählen und sensible Daten nie in URLs (?token=...) unterbringen – sie landen in Logs und im Verlauf. Wie APIs darauf aufbauen, beschreibt REST.