HTTP/HTTPS
Hypertext Transfer Protocol – die Grundlage des World Wide Web
HTTP/HTTPS
HTTP (Hypertext Transfer Protocol) ist das Protokoll, das das World Wide Web antreibt. Es definiert, wie Webbrowser und Webserver miteinander kommunizieren. HTTPS ist die sichere Version mit Verschlüsselung.
1. Was ist HTTP?
Grundprinzip
HTTP ist ein Request-Response-Protokoll: Der Client (z.B. Browser) sendet eine Anfrage an den Server, der Server antwortet.
Standard: IETF (Internet Engineering Task Force)
RFCs: 1945 (HTTP/1.0), 2616 (HTTP/1.1), 7230-7235, 7540 (HTTP/2), 9114 (HTTP/3)
Port: 80 (HTTP), 443 (HTTPS)
Eigenschaften
- Zustandslos: Jede Anfrage ist unabhängig
- Textbasiert: Menschenlesbar
- Erweiterbar: Header, Methoden, Statuscodes
- Client-Server: Klare Trennung
Komponenten
- Methoden: GET, POST, PUT, DELETE...
- Header: Metadaten (Content-Type, User-Agent)
- Statuscodes: 200 OK, 404 Not Found...
- Body: Übertragene Daten (HTML, JSON)
2. Geschichte von HTTP
Tim Berners-Lee entwickelt am CERN das erste HTTP. Nur GET-Methode, keine Header, nur HTML.
Erste standardisierte Version. Einführung von Header, Statuscodes und verschiedenen Medientypen.
Wichtigste Verbesserungen: Persistente Verbindungen (Keep-Alive), Pipelining, Host-Header (für mehrere Domains auf einer IP).
Auf SPDY basierend. Multiplexing, Header-Komprimierung, Server Push, binäres Protokoll.
Basierend auf QUIC (UDP statt TCP). Schnellerer Verbindungsaufbau, bessere Fehlerkorrektur, keine Head-of-Line-Blocking-Probleme.
3. HTTP-Versionen im Vergleich
- Textbasiert
- Keep-Alive-Verbindungen
- Pipelining (selten genutzt)
- Host-Header für virtuelle Hosts
- Chunked Transfer Encoding
- Binäres Protokoll
- Multiplexing (mehrere Streams parallel)
- Header-Komprimierung (HPACK)
- Server Push
- Priorisierung von Streams
- Basiert auf QUIC (UDP)
- 0-RTT-Verbindungsaufbau
- Integrierte Verschlüsselung
- Kein Head-of-Line-Blocking
- Bessere Mobilität (Connection Migration)
4. HTTP-Methoden (Verben)
Die wichtigsten HTTP-Methoden für die Kommunikation mit Ressourcen:
Fordert eine Ressource an. Sicher und idempotent. Kein Request-Body. Wird zum Abrufen von Webseiten, Bildern, JSON-Daten verwendet.
GETSendet Daten an den Server (z.B. Formulare). Nicht idempotent. Erzeugt neue Ressourcen oder führt Aktionen aus.
POSTErsetzt eine Ressource vollständig. Idempotent. Wird zum Aktualisieren von Ressourcen verwendet.
PUTLöscht eine Ressource. Idempotent.
DELETEFührt partielle Änderungen an einer Ressource durch. Nicht unbedingt idempotent.
Wie GET, aber ohne Body. Nur Header werden übertragen.
Fragt die unterstützten Methoden einer Ressource ab.
Stellt einen Tunnel her (z.B. für HTTPS über Proxy).
5. HTTP-Statuscodes
Dreistellige Codes, die das Ergebnis einer Anfrage anzeigen:
| Code | Kategorie | Beschreibung | Beispiele |
|---|---|---|---|
| 1xx | Informativ | Die Anfrage wird noch verarbeitet | 100 Continue, 101 Switching Protocols |
| 200 | Erfolg | OK – die Anfrage war erfolgreich | Standardantwort für GET |
| 201 | Erfolg | Created – Ressource wurde erstellt | Nach erfolgreichem POST/PUT |
| 204 | Erfolg | No Content – erfolgreich, aber keine Antwortdaten | Nach DELETE |
| 301 | Umleitung | Moved Permanently – Ressource hat neue URL | Dauerhafte Weiterleitung |
| 302 | Umleitung | Found (früher Moved Temporarily) | Temporäre Weiterleitung |
| 304 | Umleitung | Not Modified – Cache-Inhalt noch gültig | Für Conditional GET |
| 400 | Client-Fehler | Bad Request – fehlerhafte Anfrage | Syntaxfehler, ungültige Parameter |
| 401 | Client-Fehler | Unauthorized – Authentifizierung erforderlich | Login erforderlich |
| 403 | Client-Fehler | Forbidden – kein Zugriff | Authentifiziert, aber keine Berechtigung |
| 404 | Client-Fehler | Not Found – Ressource nicht gefunden | Bekanntester Statuscode |
| 429 | Client-Fehler | Too Many Requests – Rate-Limit erreicht | Zu viele Anfragen in kurzer Zeit |
| 500 | Server-Fehler | Internal Server Error – allgemeiner Serverfehler | Programmfehler auf dem Server |
| 502 | Server-Fehler | Bad Gateway – falsche Antwort von upstream | Proxy/Reverse-Proxy-Problem |
| 503 | Server-Fehler | Service Unavailable – Server überlastet | Wartungsarbeiten, zu viele Anfragen |
| 504 | Server-Fehler | Gateway Timeout – Zeitüberschreitung | Upstream antwortet nicht |
6. Wichtige HTTP-Header
Header übertragen zusätzliche Metainformationen zwischen Client und Server:
| Header | Typ | Beschreibung | Beispiel |
|---|---|---|---|
| Host | Request | Domain-Name des Servers (erforderlich für virtuelle Hosts) | Host: example.com |
| User-Agent | Request | Identifikation des Clients (Browser, Bot) | User-Agent: Mozilla/5.0... |
| Accept | Request | Akzeptierte Medientypen | Accept: text/html, application/json |
| Accept-Language | Request | Bevorzugte Sprachen | Accept-Language: de-DE, en |
| Authorization | Request | Authentifizierungsdaten (Basic, Bearer) | Authorization: Basic dXNlcjpwYXNz |
| Cookie | Request | Gespeicherte Cookies vom Client | Cookie: sessionId=abc123 |
| Set-Cookie | Response | Setzt einen Cookie beim Client | Set-Cookie: sessionId=abc123; HttpOnly |
| Content-Type | Beide | Medientyp des Inhalts (MIME-Type) | Content-Type: application/json |
| Content-Length | Beide | Länge des Inhalts in Bytes | Content-Length: 348 |
| Cache-Control | Beide | Caching-Anweisungen | Cache-Control: max-age=3600 |
| Last-Modified | Response | Datum der letzten Änderung | Last-Modified: Mon, 15 Jan 2024 12:00:00 GMT |
| ETag | Response | Eindeutiger Identifikator für Version | ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4" |
| If-Modified-Since | Request | Bedingte Anfrage (Caching) | If-Modified-Since: Mon, 15 Jan 2024 12:00:00 GMT |
| If-None-Match | Request | Bedingte Anfrage (ETag) | If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4" |
| Location | Response | Weiterleitungsziel (3xx) | Location: /neue-seite.html |
7. HTTP-Request und Response (Beispiel)
HTTP-Request (GET)
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml
Accept-Language: de-DE,de;q=0.9
Connection: keep-alive
Upgrade-Insecure-Requests: 1
HTTP-Response (200 OK)
Date: Mon, 15 Jan 2024 14:30:00 GMT
Server: Apache/2.4.41
Last-Modified: Mon, 15 Jan 2024 12:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1245
Connection: keep-alive
<!DOCTYPE html>
<html>
<head>
<title>Beispiel</title>
</head>
<body>
<h1>Hallo Welt!</h1>
</body>
</html>
8. HTTPS – Verschlüsseltes HTTP
Was ist HTTPS?
HTTPS (Hypertext Transfer Protocol Secure) ist HTTP mit Verschlüsselung durch TLS (Transport Layer Security) oder SSL.
Port: 443
Vorteile:
- Vertraulichkeit – Daten sind verschlüsselt
- Integrität – Daten können nicht manipuliert werden
- Authentizität – der Server ist echt (Zertifikat)
TLS-Handshake
- Client hello (unterstützte Ciphers)
- Server hello (gewählter Cipher, Zertifikat)
- Client verifiziert Zertifikat
- Schlüsselaustausch (RSA, ECDHE)
- Verschlüsselte Kommunikation beginnt
HSTS
HTTP Strict Transport Security zwingt Browser, nur über HTTPS zu kommunizieren.
Header: Strict-Transport-Security: max-age=31536000; includeSubDomains
Schützt vor SSL-Stripping-Angriffen.
Praxisaufgabe: HTTP verstehen
Beantworten Sie folgende Fragen:
- Welche HTTP-Methode würden Sie für das Absenden eines Formulars verwenden?
- Welcher Statuscode wird bei einem erfolgreichen POST zurückgegeben?
- Was ist der Unterschied zwischen PUT und POST?
- Welcher Header teilt dem Browser mit, dass die Antwort JSON enthält?
- Warum ist HTTP/3 schneller als HTTP/2?