Client-Server-Kommunikation

Datenfluß zur Webseitendarstellung

Die Programmierkarriere beginnt meist mit Fehlersuche. Und das nicht zu knapp. Witzigerweise entstehen die teuren Fehler, also die, nach denen der geübte Tastenschubser tagelang ergebnislos forscht, wohl nicht aus Unachtsamkeit, sondern aus Unwissenheit. Fatalerweise entpuppt sich oft der Mangel an Grundkenntnissen als Fallstrick. Zentrale Bedeutung hat in dem Zusammenhang ein gesundes Verständnis der Vorgänge in der Client-Server-Kommunikation, insbesondere wenn man mit Webseitenprogrammierung beschäftigt ist.

Der Server ist dabei der zentrale Rechner, der sich dem Client anbiedert wie Tante Lottis Katze dem Fressnapf. Der Client steht bei Dir und mir zu Hause und läßt sich mit Hingabe von uns von einem Server zum nächsten jagen. Aber wie genau funktioniert die Interaktion zwischen Client und Server, wenn Du im Browser www.irgendwas.de eingibst?

Das Prinzip ist immer dasselbe: Der Browser - mache mögen den Internet Explorer, andere Firefox - des Clients pustet die URL-Eingabe, auch Request genannt, an den Server (1), der macht irgendetwas damit und trötet das Ergebnis zurück (6). So jedenfalls funktioniert jedenfalls HTTP (und HTTPS), was sich in dem HTTP://www.irgendwas.de ausdrückt, daß der Browser selbstständig unserer URL hinzufügt. Der Server schickt nichts von sich aus an den Client, wäre ja auch noch schöner. Auf dem Server passiert unterwegs jede Menge und deswegen schauen wir uns das mal genauer an:


  1. Der Browser des Clients schickt einen URL-Request an den Server. Der Klick auf einen Link oder der Aufruf in der Browser-Adresszeile mündet in einem Get-URL-Request, das Abschicken eines Formulares in einem Post-URL-Request. Auf dem Server empfängt den URL-Request ein sogenannter Webserver (z.B.IIS, Apache oder Tomcat). Der Webserver entscheidet, wie der Request beantwortet werden soll. Statische HTML-Seiten-Anfragen, also z.B. von der statischen HTML-Datei www.irgendwas.de/irgendeinedatei.htm, beantwortet der Webserver selbst.
  2. Aber Webserver lassen sich auch so konfigurieren, daß URL-Requests für Dateien mit bestimmten Endungen (z.B. .php oder .asp) als Webapplikation abgearbeitet werden sollen. Eine php-Datei wird dann beispielsweise von einem PHP-Prozessor durchgenudelt, wenn man das interpretieren und ausführen mal so nennen darf.
  3. Dabei kann sie auf das Dateisystem des Servers und/oder ein Datenbanksystem auf denselben oder einen anderen Server zugreifen. Entscheidend ist, das die Komponenten Webserver, Webapplikation, Datenbank und Dateispeicher miteinander zusammen arbeiten und auf einem oder mehreren Servern laufen können. Typische Konfigurationen für Internetserver, wie Sie auch von Massenhostern angeboten werden:
    BetriebssystemWebserverWebapplikation basiert aufDatenbankUrheber
    Unix/LinuxApache+ PHP+ MYSQLjeweils Opensource
    Unix/LinuxApache+ Java (Tomcat)+ Oracle-Datenbank  Opensource+Oracle
    WindowsIIS+ ASP+ SQL-Serverjeweils Microsoft
  4. Das Dateisystem liefert als Antwort eine Datei, die Datenbank Datensätze - jeweils wenn die Rechte des Webserverbenutzers ausreichen (Lese- und/oder Schreibrechte).
  5. Der von der Webapplikation auf die Standard-Ausgabe geschriebene Datenstrom (in PHP per echo oder print) wird an den Webserver weitergereicht.
  6. Der Webserver sendet die Daten der Webapplikation oder des Dateisystems an den Client, wobei sich daran der Browser bedient und die ankommenden Daten darstellt. Die mitgesendete Portnummer und Sessioninformation identifizieren den richtigen Browser, und zwar den, der unter Punkt (1) den URL-Request gestellt hat. Wenn der ankommende Datenstrom HTML, Javascript oder CSS enthält, werden deren "Befehle" interpretiert und manipulieren so die Art und Weise, wie der Inalt dargestellt wird.

Wir haben nun gesehen, wie die Daten fließen, damit eine Webseite angezeigt wird. Und was ist mit den ganzen Abkürzungen? - HTML, CSS, PHP, u.s.w. Genau das schauen wir uns nun näher an, wenn wir herausfinden, wie Daten kodiert und mit welchen Mitteln geändert werden?

Kodierung

Anstatt uns jetzt in Details der Softwareentwicklung wie in Variablen und Schleifen zu verheddern, wollen uns lieber angucken, wo und welche Kodierungen im Web eingesetzt werden. Interessanterweise ist die Mutter fast aller Kodierungen, wie unterschiedlich diese auch immer aussehen, die schnöde Textdatei - einfach zu lesen und zu ändern mit dem Notepad. Und hier die Übersicht:

KodierungBeispielZielsystemEingabeAusgabe/Verwendung

HTML

HyperText
Markup
Language
<HTML>
<BODY>
Hello!
</BODY>
</HTML>
Client- htm/html-Dateien
- Scripting-Ausgaben, z.B. aus PHP- oder ASP-Scripten
Tags, eingeschlossen durch < und > steuern die Darstellung des Inhaltes im Browser.

CSS

Cascaded
Style
Sheet
body {background-color:#000000;color:#FFFFFF}
Client- css-Datei oder
- eingeschlossen in <Style> und </Style> direkt in HTML-Datei
Konfigurationsdaten für Eigenschaften von HTML-Elementen.

Javascript

document.write("Hello!");
Client- js-Datei oder
- eingeschlossen in <Script type="text/javascript"> und </Script> direkt in HTML-Datei
Dynamische Anpassung des Webseiteninhaltes auf dem Client, üblicherweise aus einem HTML-Datenstrom heraus aufgerufen.

Java

class hello {
  public static void main(String args[]) {
    System.out.println("Hello!");
  }
}
Server,Client- class-Dateien oder
- java-Dateien (kompiliert)
Server: Als Java-Servlet.
Client: Als Java-Applet ausgeführt von der Sun-Java-Engine oder der Microsoft Virtual Machine im Browser oder standalone in der Java-Runtime.

ASP

Active
Server
Pages
<%
  Response.Write "Hello!"
%>
Serverasp-DateienDer Interpreter kann z.B. HTML-Datenströme generieren, die an den Client ausgegeben werden.

PHP

Hypertext
Preprocessor
<?php
  echo "Hello!";
?>
Serverphp/php4/php5-DateienDer Opensource-PHP-Interpreter oder Zend-PHP-Compiler kann z.B. HTML-Datenströme generieren, die an den Client ausgegeben werden.

MYSQL/SQL

Structured
Query
Language
SELECT name FROM userstable WHERE age<20; Server- sql-Dateien
- sql-Anfragen, die eine Webapplikation an den SQL-Server richtet
Wertelisten/ Tabellen zur Weiterverarbeitung

Pearl

Process and
Experiment
Automation
Realtime
Language
#!/usr/bin/perl -w
use strict;
print "Hello!";
Serverpl-DateienZ.B. zur Generierung von HTML-Datenströmen.

XML

Extensible
Markup
Language
<?xml version="1.0" encoding="ISO-8859-1"?>
<Data info="Hello!">
</Data>
Datentransport,
Datenspeicherung
xml-Dateien- direkte Ausgabe auf dem Browser
- Weiterverarbeitung (Transformation) durch Preprozessoren (z.B. XSL)
- Verwendung als Steuerdaten für Prozesse

XSL

Extensible
Stylesheet
Language
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Data">
<xsl:value-of select="@info" />
</xsl:template>
</xsl:stylesheet>
Server,Clientxsl-DateienUmwandlung (Transformation) von XML-Daten, z.B. in HTML-Datenströme

Neben den Kodierungsmöglichkeiten spielen in der Webindustrie auch noch Konzepte und Frameworks eine Rolle:
SystemeBeispielZielsystemEingabeAusgabe/Verwendung

AJAX

Asynchronous
Javascript
And XML
-Server,ClientJavascript zu Darstellung auf dem Client ohne sichtbaren Webseitenneuaufbau+
XML zum Datentransport
XML zum Datentransport +
beliebiges serverseitiges Scripting

.Net

-Server,Client.Net is eine Laufzeitumgebung mit einer Funktions- und Klassenbibliothek. Ausdrücklich werden unterschiedliche Programmiersprachen in einem Softwareprojekt unterstützt. Es existieren zahlreiche .Net-Anwendungen für den standalone-Computereinsatz.

Und dann gibt es natürlich auch noch die Programmiersprachen, die für Softwareprojekte aller Art und eher seltener für Webanwendungen eingesetzt werden:
KodierungBeispielMerkmaleEingabeAusgabe/Verwendung

Assembler

DATA SEGMENT Message db "Hello!"
    db "$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
start:
mov ax,DATA
mov ds,ax
mov dx,offset Message
mov ah,09h
int 21h
CODE ENDS
END start
- Maschinencode
- Hardwareabhängig-
- Assemblierung erforderlich
asm-Dateien,
nach der Assemblierung:
exe, com
Ausgabegeräte des Computers

C

#include <stdio.h>
int main(void)
{
printf("Hello!\n");
return EXIT_SUCCESS;
}
- Hardwarenah
- Prozedural
- Compilersprache
c-DateienAusgabegeräte des Computers

C+

#include <iostreamh>
#include <ostreamh>
int main()
{
std::cout << "Hello!" << std::endl;
}
- Hardwarenah
- Objektorientiert und Prozedural
- Compilersprache
c++-DateienAusgabegeräte des Computers
komfortable Bibliotheken erlauben interaktive, grafische Oberflächen

C#

class MainClass
{
public static void Main()
{
System.Console.WriteLine("Hello!");
}
}
- Objektorientiert
- Hochsprache
cs - Dateieninteraktive Applikationen basierend im Windows-Kontext

VBA

MsgBox("Hello") - Interpretersprache
- Prozedural
- Integriert in Microsoft Office Apps
- vb/vbs/vba-Dateien
- MS Office Script
- Interpreter Konsole
- MS Office Controls


Haben Sie Fragen zu Client-Server-Kommunikation oder zur Webprogrammierung? Klicken Sie hier für Hilfe.

ComputernotdienstWindows Vista SupportFildelningsprogramTelekom Umts KarteImap Outlook