Einführung in PHP und Webentwicklung

Aus FernFH MediaWiki
Version vom 7. März 2025, 23:30 Uhr von Völkl Anna (Diskussion | Beiträge) (Initiale Version)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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

SED501-Webserver-Requests.png

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.

SED501-Developer-Toolbar.png

  1. HTTP response status codes