HTTP-Server mit PHP

Aus Vokabulabor
Version vom 16. Oktober 2023, 20:02 Uhr von Hamatoma (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „* Kategorie:Tutorial * Kategorie:Programmierung * Kategorie:PHP = Links = * PHP = Zielsetzung = Verständnis für den Ablauf der Kommunikation beim HTTP-Protokoll. Das HTTP-Protokoll erlaubt es vielen Clients, mit einem Server Verbindung aufzunehmen und Daten auszutauschen. Ein typischer HTTP-Client ist ein Browser: Er fordert Webseiten vom Webserver an und zeigt diese an. Wir zeigen hier, wie ein minimaler HTTP-Server mittels PHP pro…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Links

Zielsetzung

Verständnis für den Ablauf der Kommunikation beim HTTP-Protokoll.

Das HTTP-Protokoll erlaubt es vielen Clients, mit einem Server Verbindung aufzunehmen und Daten auszutauschen.

Ein typischer HTTP-Client ist ein Browser: Er fordert Webseiten vom Webserver an und zeigt diese an.

Wir zeigen hier, wie ein minimaler HTTP-Server mittels PHP programmiert wird.

Das HTTP-Protokoll

Das Hypertext Transfer Protocol (HTTP) ist ein weit verbreitetes Protokoll, das in der Regel zur Übertragung von Daten im World Wide Web (WWW) verwendet wird. Es bildet die Grundlage für den Datenaustausch zwischen Webclients (z.B. Browsern wie Firefox) und Webservern. Das Prinzip des HTTP-Protokolls lässt sich in folgenden Schritten zusammenfassen:

Anforderung (Request)

Ein Client, in der Regel ein Webbrowser, sendet eine HTTP-Anforderung an einen Webserver. Diese Anforderung kann verschiedene Methoden wie GET, POST, PUT oder DELETE verwenden, um den Server über die gewünschte Aktion zu informieren.

Die Anforderung enthält immer eine URL (Universal Resource Locator): das ist die "Webadresse", in der verschieden Informationen zusammengefasst sind:

Beispiel einer URL: https://vokabulabor.hamatoma.de/index.php?title=HTTP-Server_mit_PHP&action=edit

  • https: Das SchemaProtokoll: https steht für verschlüsseltes HTML, http für unverschlüsseltes. Möglich ist auch file:
  • //vokabulabor.hamatoma.de ist die Domäne. Es gibt eine System namens Domain Name System (DNS), bei der abgefragt werden kann, wo auf der Welt diese Domäne ist und "das Internet" weiß dann, wie die Anfrage dorthin geleitet werden kann.
  • /index.php Dieser Pfad sagt dem Webserver, welche Info er bereitstellen soll.
  • ?title=HTTP-Server_mit_PHP&action=edit Das sind die Abfrage (Query) einer Anfrage. Dort werden Zusatzinformationen mitgegeben.


Verbindungsaufbau

Wenn der Client eine Anforderung sendet, baut er eine Verbindung zum Server auf. Dies kann über das TCP/IP-Protokoll erfolgen, wobei normalerweise Port 80 für unverschlüsseltes HTTP und Port 443 für verschlüsseltes HTTPS verwendet wird.

Verarbeitung der Anforderung

Der Webserver empfängt die Anforderung und verarbeitet sie entsprechend. Dies kann das Bereitstellen von Ressourcen wie HTML-Seiten, Bildern, Videos oder anderen Daten beinhalten.

Antwort (Response)

Als Antwort schickt der Webserver Daten: das ist meistens eine HTML-Seite oder eine Datei (z.B. eine CSS-Datei).

Die Antwort enthält immer eine Statuscode:

  • 200: OK Die Anfrage wurde korrekt beantwortet
  • 301: Die Antwort steht unter einer anderen URL zur Verfügung. Der Browser stellt dann automatisch die Anfrage unter dieser URL.
  • 404: Seite unbekannt: Der Server kennt die URL nicht.
  • 403: Verboten: Ohne Anmeldung ist die Seite nicht erreichbar

PHP-Programm einer Webanwendung

Wir legen einer Datei demo.php an:

<?php
$server = new Server();
if ($_SERVER['REQUEST_URI'] == '/demo.php') {
    header('Location: http:/demo.php/home');
} elseif ($_SERVER['REQUEST_URI'] === '/demo.php/home') {
    $server->home();
} elseif ($_SERVER['REQUEST_URI'] === '/demo.php/impressum') {
    $server->impressum();
} else {
    header("HTTP/1.0 404 Not Found");
}
class Server {
    public function home(){
        $page = file_get_contents('home.html');
        echo $page;
    }
    public function impressum(){
        $page = file_get_contents('impressum.html');
        echo $page;
    }
}

Wir brauchen noch eine HTML-Datei home.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap 5 Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
 <nav class="navbar navbar-expand-sm navbar-dark bg-dark">
  <div class="container-fluid">
    <a class="navbar-brand" href=" #">Logo</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mynavbar">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="mynavbar">
      <ul class="navbar-nav me-auto">
        <li class="nav-item">
          <a class="nav-link" href="#">Start</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="demo.php/impressum">Impressum</a>
        </li>
      </ul>
      <form class="d-flex">
        
        <button class="btn btn-secondary" type="button">Settings</button>
        <button class="btn btn-primary" type="button">Logout</button>
      </form>
    </div>
  </div>
</nav> 
<div class="container-fluid p-5 bg-primary text-white text-center">
  <h1>Meine erste  Bootstrapseite</h1> 
</div>
<div class="container mt-5">
    <p>Hier geht es zum <a href="demo.php/login">Login</a></p>
</div>
</body>
</html>

Wir brauchen noch eine HTML-Datei home.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap 5 Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
 <nav class="navbar navbar-expand-sm navbar-dark bg-dark">
  <div class="container-fluid">
    <a class="navbar-brand" href=" #">Logo</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#mynavbar">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="mynavbar">
      <ul class="navbar-nav me-auto">
        <li class="nav-item">
          <a class="nav-link" href="#">Start</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="demo.php/impressum">Impressum</a>
        </li>
      </ul>
      <form class="d-flex">
        
        <button class="btn btn-secondary" type="button">Settings</button>
        <button class="btn btn-primary" type="button">Logout</button>
      </form>
    </div>
  </div>
</nav> 
<div class="container-fluid p-5 bg-primary text-white text-center">
  <h1>Impressum</h1> 
</div>
<div class="container mt-5">
    <p>Verantwortlich ist der Autor.</p>
</div>
</html>