HTTP-Server mit PHP: Unterschied zwischen den Versionen
(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…“) |
|||
Zeile 54: | Zeile 54: | ||
$server = new Server(); | $server = new Server(); | ||
if ($_SERVER['REQUEST_URI'] == '/demo.php') { | if ($_SERVER['REQUEST_URI'] == '/demo.php') { | ||
header('Location: http:/demo.php | header('Location: http:/demo.php?home'); | ||
} elseif ($_SERVER['REQUEST_URI'] === '/demo.php | } elseif ($_SERVER['REQUEST_URI'] === '/demo.php?home') { | ||
$server->home(); | $server->home(); | ||
} elseif ($_SERVER['REQUEST_URI'] === '/demo.php | } elseif ($_SERVER['REQUEST_URI'] === '/demo.php?impressum') { | ||
$server->impressum(); | $server->impressum(); | ||
} else { | } else { | ||
Zeile 71: | Zeile 71: | ||
echo $page; | echo $page; | ||
} | } | ||
} | }</pre> | ||
</pre> | |||
Wir brauchen noch eine HTML-Datei home.html: | Wir brauchen noch eine HTML-Datei home.html: | ||
<pre> | <pre> | ||
Zeile 97: | Zeile 96: | ||
</li> | </li> | ||
<li class="nav-item"> | <li class="nav-item"> | ||
<a class="nav-link" href="demo.php | <a class="nav-link" href="demo.php?impressum">Impressum</a> | ||
</li> | </li> | ||
</ul> | </ul> | ||
Zeile 112: | Zeile 111: | ||
</div> | </div> | ||
<div class="container mt-5"> | <div class="container mt-5"> | ||
<p>Hier geht es zum <a href="demo.php | <p>Hier geht es zum <a href="demo.php?login">Login</a></p> | ||
</div> | </div> | ||
</body> | </body> | ||
</html> | </html> | ||
</pre> | </pre> | ||
Wir brauchen noch eine HTML-Datei | Wir brauchen noch eine HTML-Datei impressum.html: | ||
<pre> | <pre> | ||
<!DOCTYPE html> | <!DOCTYPE html> | ||
Zeile 129: | Zeile 128: | ||
</head> | </head> | ||
<body> | <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> | </nav> | ||
<div class="container-fluid p-5 bg-primary text-white text-center"> | <div class="container-fluid p-5 bg-primary text-white text-center"> | ||
<h1>Impressum</h1> | <h1>Impressum</h1> | ||
</div> | </div> | ||
<div class="container mt-5"> | <div class="container mt-5 text-center"> | ||
<p>Verantwortlich ist der Autor.</p> | <p>Verantwortlich ist der Autor.</p> | ||
</div> | </div> | ||
</body> | |||
</html> | </html> | ||
</pre> | </pre> |
Version vom 16. Oktober 2023, 20:26 Uhr
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 auchfile:
//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 impressum.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 text-center"> <p>Verantwortlich ist der Autor.</p> </div> </body> </html>