# Client

Ein Client (über englisch client aus lateinisch cliens wörtlich für „Klient“ oder „Kunde“) – auch clientseitige Anwendung, Clientanwendung oder Clientprogramm – bezeichnet ein Computerprogramm, das auf dem Endgerät eines Netzwerks ausgeführt wird und mit einem Server (Zentralrechner) kommuniziert. Man nennt auch ein Endgerät selbst, das Dienste von einem Server abruft, Client.
Das Gegenstück zum Client ist das jeweilige Serverprogramm bzw. der Server selbst, auch Host genannt.

## Clientseitige Anwendungen

Eine wichtige Gruppe von clientseitigen Anwendungen sind die Webbrowser, wie z. B. Mozilla Firefox, Internet Explorer oder Apple Safari, welche das HTTP-Protokoll zur Datenkommunikation mit einem Webserver verwenden, um von diesem Daten abzufragen und sie anschließend dem Nutzer darzustellen.
Ein weiteres Beispiel sind E-Mail-Clients: Sie nehmen Kontakt zu einem E-Mail-Server auf, um E-Mails von ihm abzuholen und über ihn zu versenden. Der Client muss dazu nicht ständig in Betrieb oder mit einem Netzwerk verbunden sein, denn der Mailserver nimmt die eingehenden E-Mails entgegen.
Viele Clients werden nicht von Benutzern bedient, sondern arbeiten im Hintergrund als Systemdienst, wie zum Beispiel DNS-Clients. Sie nehmen automatisch Verbindung mit DNS-Servern auf, wenn zu einem Servernamen, wie de.wikipedia.org, die IP-Adresse benötigt wird.
Das Ajax-Konzept findet bei clientseitigen Anwendungen, die in Internetseiten eingebettet sind, eine wachsende Bedeutung. Andere Clientanwendungen, welche über eigene proprietäre Client-Serverprotokolle verfügen, sind zum Beispiel der Citrix- oder der SAP-Client.
Zwischen einem Client und einem Server gibt es zur Datenübertragung und zur Interaktion ein definiertes Protokoll, welches in der Regel einem Request/Response-Schema folgt. Durch eine clientseitige Programmierung kann das Request/Response-Schema unterbrochen werden, indem man bestimmte Funktionen wie zum Beispiel kurzzeitige Reaktionen auf Benutzerinteraktionen direkt clientseitig durchführt, ohne einen Client-/Server-Rundlauf auszulösen. Oft handelt es sich dabei um ein rekursives Konzept. In einer Clientanwendung (z. B. Webbrowser) läuft eine zweite Anwendung (zum Beispiel ein JavaScript in der aktuellen HTML-Seite).
Meistens treten clientseitige Anwendungen in einer Mischform mit einer serverseitigen Anwendung auf.
Eine in diesem Bereich häufig verwendete Programmiersprache ist JavaScript. Der Quellcode wird in die HTML-Seite eingebaut und durch den Browser interpretiert. Eine Alternative dazu bietet beispielsweise die proprietäre Sprache VBScript des Softwareherstellers Microsoft.

## Clientseitige vs. serverseitige Zustandspeicherung

Wichtig ist im Zusammenhang auch, wie der Kontext einer Benutzersitzung gespeichert werden kann. Zum Beispiel ist HTTP zustandslos (stateless), kann sich also serverseitig grundsätzlich keine Daten zwischen zwei Datenanforderungen merken. Eine clientseitige Anwendung kann das Cookie-Konzept verwenden, um Informationen auf der Clientseite zu speichern, welche von einem clientseitigen Folgescript zu einem späteren Zeitpunkt wieder ausgelesen werden. Cookies bieten allerdings keine Form der Datensicherheit und können z. B. auch von anwendungsfremder Spyware ausgelesen werden. Diese funktionale Lücke wird teilweise durch das Konzept eines serverseitigen Sessionmanagement geschlossen.
Die an sich zustandslose Client-/Server-Kommunikation wird dadurch zu einem System, in dem die Sitzungsdaten auf dem Server über mehrere Datenanforderungen aufrechterhalten werden können. Dadurch werden (z. B. durch ein Passwort geschützte) Sitzungen möglich.

### Vorteile

* Zur Lösung einiger Probleme (Gültigkeit von Formulareingaben) kann auf die Mitwirkung des Webservers verzichtet werden.
* Es wird ein Dialog mit dem Benutzer ermöglicht.
* Die Ästhetik der Webseite kann verbessert werden (z. B. wechselnde Inhalte und Darstellung in Abhängigkeit von der Mausposition).

### Nachteile

* Der Quellcode ist für den Nutzer sichtbar und zugänglich. Das kann unter Umständen unerwünscht sein.

## Arten von Clients

Man unterscheidet konventionelle Fat Clients (auch rich- oder smart clients) und Thin Clients (auch lean- oder slim clients).

## Hardware

Als Clients bezeichnet man auch all jene Computer in einem Netzwerk, die im Gegensatz zu den Servern keine Dienste bereitstellen.