PHP und das HTTP-Protokoll

Geschätzte Lektüre: 8 Minuten 275 Ansichten

Das HTTP-Protokoll (Hypertext Transfer Protocol) ist die Grundlage der Datenkommunikation im Web. Es definiert, wie Nachrichten formatiert und übertragen werden und wie Webserver und Browser auf Anfragen und Antworten reagieren sollen.

Grundlegende Merkmale von HTTP:

Client-Server-Modell: Der Client (meist ein Browser) sendet eine Anfrage, der Server antwortet
Zustandslos (stateless): Jede Anfrage ist unabhängig von vorherigen Anfragen
Textbasiert: Menschenlesbare Nachrichten
Port 80 (HTTP) oder Port 443 (HTTPS)

HTTP-Anfragemethoden: GET und POST

GET-Methode

Die GET-Methode wird verwendet, um Daten von einem Server anzufordern. Die Daten werden in der URL als Query-String übergeben.

Eigenschaften:
• Daten sind in der URL sichtbar (z.B. ?name=wert)
• Begrenzte Datenmenge (URL-Länge ist beschränkt)
• Wird im Browserverlauf gespeichert
• Kann als Lesezeichen gespeichert werden
• Sollte keine sensiblen Daten übertragen

Beispiel in PHP:

// URL: http://example.com?name=Max&age=30

// Daten aus GET-Anfrage lesen
$name = $_GET['name']; // Wert: "Max"
$age = $_GET['age'];   // Wert: "30"

// Sicherheitscheck immer durchführen!
$name = htmlspecialchars($_GET['name']);

POST-Methode

Die POST-Methode wird verwendet, um Daten an den Server zu senden, die verarbeitet oder gespeichert werden sollen (z.B. Formulardaten).

Eigenschaften:
• Daten sind nicht in der URL sichtbar
• Größere Datenmengen möglich
• Wird nicht im Browserverlauf gespeichert
• Kann nicht als Lesezeichen gespeichert werden
• Geeignet für sensible Daten

Beispiel in PHP:

// Formular verarbeiten
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    // Sicherheitschecks
    $username = htmlspecialchars($username);
    $password = htmlspecialchars($password);
    
    // Daten verarbeiten...
}

Vergleich GET vs. POST

EigenschaftGETPOST
DatenübertragungURL (Query-String)HTTP-Nachrichtenbody
DatenmengeBegrenzt (URL-Länge)Größere Mengen möglich
SichtbarkeitIn Browser-URL sichtbarNicht in URL sichtbar
BrowserverlaufWird gespeichertWird nicht gespeichert
LesezeichenKann gespeichert werdenKann nicht gespeichert werden
VerwendungZum Abrufen von DatenZum Senden von Daten

HTTP-Statuscodes

Statuscodes sind dreistellige Zahlen, die der Server in der Antwort sendet, um das Ergebnis der Anfrage mitzuteilen.

Wichtige Statuscode-Klassen:

  1. 1xx (Informationell): Anfrage erhalten, Prozess läuft
    • 100 Continue
  2. 2xx (Erfolg): Anfrage erfolgreich verarbeitet
    • 200 OK: Standard-Erfolgsantwort
    • 201 Created: Ressource wurde erstellt
    • 204 No Content: Erfolg, aber kein Inhalt in Antwort
  3. 3xx (Umleitung): Weitere Aktion erforderlich
    • 301 Moved Permanently: Ressource dauerhaft verschoben
    • 302 Found (Moved Temporarily): Temporäre Umleitung
    • 304 Not Modified: Ressource nicht verändert (Caching)
  4. 4xx (Client-Fehler): Fehler auf Client-Seite
    • 400 Bad Request: Ungültige Anfrage
    • 401 Unauthorized: Authentifizierung erforderlich
    • 403 Forbidden: Zugriff verboten
    • 404 Not Found: Ressource nicht gefunden
  5. 5xx (Server-Fehler): Fehler auf Server-Seite
    • 500 Internal Server Error: Allgemeiner Serverfehler
    • 501 Not Implemented: Funktion nicht implementiert
    • 503 Service Unavailable: Dienst nicht verfügbar

Statuscodes in PHP setzen

// 404 Not Found
header("HTTP/1.0 404 Not Found");
echo "Die angeforderte Seite existiert nicht.";

// 301 Redirect
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://neue-url.de");
exit();

// 500 Server Error
header("HTTP/1.0 500 Internal Server Error");
echo "Ein Serverfehler ist aufgetreten.";

PHP und HTTP in der Praxis

Formularbehandlung mit GET und POST

Beispielformular (HTML):

<form action="process.php" method="post">
    <input type="text" name="username" placeholder="Benutzername">
    <input type="password" name="password" placeholder="Passwort">
    <button type="submit">Anmelden</button>
</form>

Verarbeitung in PHP (process.php):

<?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Daten empfangen und säubern
    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
    $password = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_STRING);
    
    // Validierung
    if (empty($username) || empty($password)) {
        http_response_code(400); // Bad Request
        echo "Bitte füllen Sie alle Felder aus.";
        exit;
    }
    
    // Verarbeitung (z.B. Datenbankabfrage)
    // ...
    
    // Erfolgreiche Verarbeitung
    http_response_code(200);
    echo "Willkommen, $username!";
    } else {
        // Falsche Anfragemethode
        http_response_code(405); // Method Not Allowed
        header("Allow: POST");
        echo "Nur POST-Anfragen sind erlaubt.";
    }
?>

URL-Parameter mit GET verarbeiten

Beispiel: Produktseite

// URL: http://example.com/products.php?id=123&category=books

// Sicherer Zugriff auf GET-Parameter
$product_id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$category = filter_input(INPUT_GET, 'category', FILTER_SANITIZE_STRING);

if (!$product_id) {
    http_response_code(400);
    echo "Ungültige Produkt-ID";
    exit;
}

// Daten aus Datenbank abfragen basierend auf $product_id und $category
// ...

Sicherheitsbest Practices

Input-Validierung: Immer Benutzereingaben validieren und säubern

$clean_input = filter_var($_GET['input'], FILTER_SANITIZE_STRING);

Output-Escaping: Daten vor der Ausgabe escapen

echo htmlspecialchars($user_content, ENT_QUOTES, 'UTF-8');

CSRF-Schutz: Gegen Cross-Site Request Forgery schützen

session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        http_response_code(403);
        die("Ungültiges CSRF-Token");
    }
}
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

HTTPS: Immer HTTPS für sensible Daten verwenden

if ($_SERVER['HTTPS'] !== 'on') {
    header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit();
}

Fortgeschrittene Themen (Ausblick)

01. Andere HTTP-Methoden:
• PUT: Ressource aktualisieren
• DELETE: Ressource löschen
• PATCH: Teilweise Aktualisierung

03. RESTful APIs: HTTP-Methoden für API-Design nutzen
04. HTTP-Header: Zusätzliche Metadaten in Anfragen und Antworten

header("Content-Type: application/json");
echo json_encode($data);

05. Cookies und Sessions: Zustand in zustandslosem Protokoll verwalten

setcookie("name", "value", time()+3600, "/", "example.com", true, true);
session_start();
$_SESSION['user'] = $authenticated_user;

Zusammenfassung

HTTP ist das fundamentale Protokoll des Webs
GET und POST sind die wichtigsten HTTP-Methoden für Datenübertragung
Statuscodes geben Auskunft über den Erfolg oder Fehler einer Anfrage
PHP bietet einfachen Zugriff auf HTTP-Anfragen und -Antworten
Sicherheit ist bei der Verarbeitung von HTTP-Daten entscheidend

Dieses Dokument teilen

PHP und das HTTP-Protokoll

Oder Link kopieren

INHALT

Abonnieren

×
Cancel