Einführung in PHP und Webentwicklung
Webentwicklung: Grundlagen und Architektur
Das Client-Server-Modell
Das Client-Server-Modell ist eine grundlegende Architektur der modernen Webentwicklung. Es beschreibt die Interaktion zwischen zwei Parteien: einem Client, der eine Anfrage stellt, und einem Server, der auf diese Anfrage antwortet. Ein Server stellt Dienste, Ressourcen oder Informationen bereit. Im Kontext der Webentwicklung ist ein Webserver ein Programm, das Webseiten, APIs oder andere Inhalte an Clients ausliefert. Beispiele für Webserver-Software sind Apache, Nginx und IIS (Internet Information Services). Ein Client ist ein Gerät oder eine Anwendung, die diese Ressourcen vom Server anfordert. Dies kann ein Webbrowser wie Chrome, Firefox oder Microsoft Edge sein, aber auch eine mobile App oder ein anderes Programm, das über das Internet kommuniziert. Ein Beispiel aus dem Alltag: Wenn Sie eine Webseite in Ihrem Browser aufrufen, fungiert der Browser als Client. Der Webserver, der die Inhalte dieser Webseite hostet, ist der Server. Der Browser schickt eine Anfrage (Request) an den Server, und der Server antwortet mit der angeforderten Seite (Response).
Der Request-Response-Zyklus
Der Request-Response-Zyklus beschreibt die Kommunikation zwischen Client und Server in einem Websystem. Dieser Zyklus läuft in folgenden Schritten ab: Client sendet eine Anfrage (Request): Der Benutzer gibt eine URL in den Browser ein oder klickt auf einen Link. Der Browser (Client) erstellt eine HTTP-Anfrage an den entsprechenden Server. Server verarbeitet die Anfrage: Der Server empfängt die Anfrage, verarbeitet sie und sucht nach den angeforderten Ressourcen (z. B. HTML-Dateien, Bilder, Datenbankinhalte). Server sendet eine Antwort (Response): Nachdem die Anfrage verarbeitet wurde, sendet der Server eine HTTP-Antwort zurück an den Client. Diese Antwort enthält den Statuscode (z. B. 200 OK oder 404 Not Found) und die angeforderten Inhalte. Client zeigt die Antwort an: Der Browser des Clients interpretiert die empfangenen Inhalte und zeigt die Webseite an. Beispiel: Der Client (Browser) fordert die Webseite https://www.fernfh.ac.at an. Der Server empfängt die Anfrage, der Webserver verarbeitet die Anfrage, sucht die passende Datei und schickt diese zurück. Der Browser zeigt die Webseite an.
Bestandteile einer Webanwendung
Webserver
Ein Webserver ist eine Software, die HTTP-Anfragen verarbeitet und Webseiten oder andere Ressourcen bereitstellt. Die beiden am häufigsten verwendeten Webserver sind Apache und Nginx: Apache: Ein weit verbreiteter Open-Source-Webserver, der für seine Flexibilität und umfangreiche Konfigurationsmöglichkeiten bekannt ist. Er unterstützt Module zur Erweiterung von Funktionen wie URL-Rewrites oder Authentifizierung. Nginx: Ein moderner, leistungsstarker Webserver, der für seine hohe Geschwindigkeit und geringe Ressourcenbelastung geschätzt wird. Nginx eignet sich besonders gut für den Einsatz als Reverse Proxy und zur Lastverteilung. Beide Serverprogramme können sowohl statische Inhalte (HTML, CSS, Bilder) als auch dynamische Inhalte (PHP-Seiten, APIs) bereitstellen.
Datenbanken
Webserver arbeiten oft mit Datenbanken zusammen, um dynamische Inhalte bereitzustellen. Während der Webserver die Anfrage verarbeitet, ruft er oft zusätzliche Daten aus einer Datenbank ab. Diese Datenbanken speichern Informationen wie Benutzerdaten, Produktkataloge oder Artikel und ermöglichen es, Webseiteninhalte dynamisch zu generieren. Zu den gängigen Datenbankmanagementsystemen zählen: MySQL/MariaDB: Häufig in Kombination mit PHP verwendet, besonders im E-Commerce. PostgreSQL: Ein leistungsstarkes Open-Source-System mit erweiterten Funktionen. SQLite: Eine leichtgewichtige Datenbank für kleinere Projekte. Ein typisches Szenario in einer Webanwendung ist: Der Client fordert eine Produktseite an. Der Webserver verarbeitet die Anfrage. Der Webserver ruft die Produktinformationen aus der Datenbank ab. Der Server generiert die HTML-Seite mit den Daten und sendet sie an den Client zurück. Das Zusammenspiel zwischen Webservern und Datenbanken ermöglicht es, große, dynamische E-Commerce-Plattformen wie Magento effizient zu betreiben. 1.1.2.3 Web-Anwendung Der Kern der Anwendung, oft mit Frameworks wie Laravel, Symfony oder Magento entwickelt.
Erweiterte Funktionen
- OpCache
- Der PHP OPcache ist ein Caching-Mechanismus, der bereits kompilierte PHP-Skripte im Speicher hält, um die Ausführungszeit zu verkürzen und die Serverlast zu reduzieren. Dadurch wird vermieden, dass PHP-Dateien bei jedem Request erneut geparst und kompiliert werden, was die Performance von Webanwendungen erheblich steigert.
- CDN
- Verteilt statische Inhalte (Bilder, CSS, JS) auf mehrere Server weltweit, um die Ladezeiten zu verbessern.
- Varnish
- Reverse Proxy und Caching-Lösung, die dynamische Inhalte zwischenspeichern kann, um die Performance zu verbessern.
- Redis
- In-Memory-Datenbank, die als Cache, Session-Store oder zur Message-Queue verwendet wird.
- Memcached
- Einfacher In-Memory-Cache, um häufig genutzte Daten schneller bereitzustellen.
- Load Balancer
- Verteilt eingehende Anfragen auf mehrere Server, um Last zu verteilen und Ausfallsicherheit zu gewährleisten. Beispiele: HAProxy, AWS Elastic Load Balancing.
- Queue-System
- Verarbeitet Aufgaben asynchron, um die Hauptanwendung zu entlasten. Beispiele: RabbitMQ, Kafka.
- API Gateway
- Bietet eine zentrale Schnittstelle für externe APIs und sorgt für Sicherheit, Monitoring und Load Balancing. Beispiele: Kong, Apigee.
- Service Worker
- Wird im Browser verwendet, um Offline-Funktionalität und Caching zu ermöglichen. Besonders wichtig für Progressive Web Apps (PWAs).
- Monitoring & Logging
- Überwacht die Performance der Anwendung und speichert Logs. Beispiele: Grafana, Kibana, Prometheus.
- Firewall/WAF (Web Application Firewall)
- Schützt die Webanwendung vor Angriffen wie SQL-Injection, XSS und anderen Webbedrohungen. Beispiele: AWS WAF, Cloudflare WAF.
- Container & Orchestrierung
- Container-Technologien (z. B. Docker) und Orchestrierungstools (z. B. Kubernetes) ermöglichen eine flexible und skalierbare Bereitstellung.
- CI/CD-Pipeline
- Automatisiert den Build- und Deployment-Prozess. Beispiele: GitLab CI, Jenkins, GitHub Actions.
- Identity Provider (IdP)
- Verwaltet Benutzeridentitäten und ermöglicht Single Sign-On (SSO). Beispiele: Keycloak, Okta, Auth0.
- Message Broker
- Vermittelt Nachrichten zwischen verschiedenen Diensten. Beispiele: RabbitMQ, Apache Kafka.
- Edge Functions
- Kleine Funktionen, die nahe am Client ausgeführt werden, um die Latenz zu verringern. Beispiele: Cloudflare Workers, AWS Lambda@Edge.
HTTP und HTTPS
Das Hypertext Transfer Protocol (HTTP) ist das Fundament der Kommunikation im World Wide Web. Es beschreibt, wie Clients (z. B. Webbrowser) mit Servern interagieren, um Webseiten und andere Ressourcen abzurufen. HTTPS ist die sichere Version von HTTP und nutzt Verschlüsselungstechnologien wie SSL/TLS, um die Kommunikation vor Manipulation und Abhören zu schützen.
Das Hypertext Transfer Protocol
HTTP ist ein textbasiertes Protokoll, das den Austausch von Informationen zwischen einem Client und einem Server regelt. Es arbeitet nach dem Request-Response-Prinzip: Der Client stellt eine Anfrage (Request), und der Server liefert eine Antwort (Response) zurück. Merkmale von HTTP: Verbindungslos: Jede Anfrage wird unabhängig behandelt. Es gibt keine dauerhafte Verbindung zwischen Client und Server. Statusbasiert: Der Server antwortet immer mit einem Statuscode, der den Erfolg oder Misserfolg der Anfrage angibt. Anwendungsprotokoll: HTTP wird auf der Anwendungsschicht genutzt und baut auf Protokollen wie TCP/IP auf. Ein typisches Beispiel für eine HTTP-Anfrage ist das Abrufen einer Webseite. Wenn ein Benutzer eine URL in den Browser eingibt, sendet der Browser eine HTTP-Anfrage an den Server, der die gewünschte Seite bereitstellt.
HTTP-Methoden
HTTP bietet verschiedene Methoden, die angeben, welche Art von Aktion der Client auf dem Server ausführen möchte. Die vier wichtigsten Methoden sind:
GET
Wird verwendet, um Daten vom Server abzurufen. Hat keine Nebenwirkungen auf den Server (idempotent). Beispiel: Abrufen einer Webseite oder eines Bildes.
GET /index.html HTTP/1.1<br>Host: example.com
POST
Wird verwendet, um Daten an den Server zu senden (z. B. Formulareinsendungen). Kann neue Ressourcen erstellen oder bestehende aktualisieren. Beispiel: Ein Benutzer sendet ein Kontaktformular ab.
POST /contact HTTP/1.1<br>Host: example.com<br>Content-Type: application/x-www-form-urlencoded<br><br>name=John&message=Hello
PUT
Wird verwendet, um eine Ressource auf dem Server zu erstellen oder zu ersetzen. Beispiel: Hochladen oder Aktualisieren einer Datei.
PUT /file.txt HTTP/1.1 Host: example.com Content-Type: text/plain<br><br>This is a file content.
DELETE
Wird verwendet, um eine Ressource vom Server zu löschen. Beispiel: Löschen einer Datei oder eines Eintrags.
DELETE /file.txt HTTP/1.1 Host: example.com
Andere wichtige Methoden sind HEAD, OPTIONS und PATCH, die je nach Anwendungsszenario genutzt werden.
HTTP Statuscodes
HTTP-Statuscodes sind dreistellige Zahlen, die angeben, wie der Server die Anfrage des Clients verarbeitet hat [1] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) . Sie sind in fünf Kategorien unterteilt:
1xx Informationelle Antworten
2xx Erfolgreiche Anfragen
3xx Umleitungen
4xx Clientfehler
5xx Serverfehler
Wichtige Statuscodes:
200 OK: Die Anfrage war erfolgreich. Die angeforderten Daten werden zurückgegeben.
301 Moved Permanently: Die angeforderte Ressource wurde dauerhaft an eine neue URL verschoben.
302 Found: Temporäre Weiterleitung.
404 Not Found: Die angeforderte Ressource wurde nicht gefunden.
500 Internal Server Error: Ein allgemeiner Fehler auf dem Server.
Bedeutung von HTTPS und SSL/TLS
HTTPS (Hypertext Transfer Protocol Secure)
HTTPS ist die sichere Version von HTTP. Es verwendet Verschlüsselung, um die Kommunikation zwischen Client und Server vor Abhören und Manipulation zu schützen. Die Verschlüsselung erfolgt mithilfe von SSL (Secure Sockets Layer) bzw. TLS (Transport Layer Security). Vorteile von HTTPS: Vertraulichkeit: Die übertragenen Daten sind verschlüsselt und können nicht von Dritten eingesehen werden. Integrität: Es wird sichergestellt, dass die Daten während der Übertragung nicht manipuliert wurden. Authentizität: Der Client kann sicherstellen, dass er mit dem richtigen Server kommuniziert.
Webserver
Tools
Web Developer Toolbar
Die Chrome Developer Toolbar sind ein mächtes Werkzeug für Entwickler*innen innerhalb des Chrome-Browsers.
Webserver erkennen
Sofern der Webservername im Respone Header mitgeschickt wird, ist dieser im "Netzwerk" Tab nach Auswahl einer Quelle (Hauptdokument, Bild, CSS oder JavaScript-Datei, die direkt vom Server geladen wird) erkennbar.
Oftmals wird der Webserver auch entfernt und nicht im Response Header mitgeschickt, um die Angriffsoberfläche für Schwachstellen zu minimieren.
- ↑ HTTP response status codes