Was sind die Unterschiede zwischen serverseitiger und clientseitiger Programmierung?

104

Ich habe Fragen (hauptsächlich zu Stack Overflow) gesehen, denen dieses Grundwissen fehlt. Ziel dieser Frage ist es, denjenigen, die danach suchen, und denjenigen, die darauf verweisen, gute Informationen zu liefern.

Was sind im Zusammenhang mit der Webprogrammierung die Unterschiede zwischen der serverseitigen und der clientseitigen Programmierung? Welche Sprachen gehören zu welchen und wann verwenden Sie welche?

Madara Uchiha
quelle
5
Serverseitige Programmierung ist das Schreiben von Code, der auf dem Server ausgeführt wird, unter Verwendung von vom Server unterstützten Sprachen (wie Java, PHP, C #; es ist möglich, Code zu schreiben, der serverseitig in JavaScript ausgeführt wird). Bei der clientseitigen Programmierung wird Code geschrieben, der auf dem Client ausgeführt wird. Die Programmierung erfolgt in Sprachen, die vom Browser ausgeführt werden können, z. B. JavaScript.
FrustratedWithFormsDesigner
1
Dieser ist ziemlich gut: programmers.stackexchange.com/questions/138561/…
JeffO
7
Ich denke, Sie sollten in die Frage aufnehmen, dass Sie sich nur auf Web-Programmierung beziehen, da im aktuellen Formular die Antworten nicht vollständig sind. Beispielsweise muss die Server-Client-Kommunikation nicht über HTTP erfolgen. Client-Seite verwendet möglicherweise keinen Browser usw.
K.Steff
@KSteff Sie können gerne meine Frage bearbeiten, um das hinzuzufügen.
Madara Uchiha
2
Als das Web noch jung war, hat es sich bewährt, den größten Teil Ihrer Logik auf die Serverseite zu verlagern (Java / C ++) und die Browserlogik absichtlich dünn zu halten - zumal die Browser damals nicht für die Hauptsendezeit bereit waren. Nun hat sich diese Betonung umgekehrt, so dass sich in browserbasierten Tools (Angular.js) der Großteil der Heavy-Lifting-Logik der Webanwendung befindet (weg von der zunehmend reduzierten serverseitigen Logik). Dies wurde durch moderne Browser mit industrieller Stärke erleichtert, die extrem schnelle Javascript-Engines ausführen (innerhalb einer Größenordnung von nativem Code).
Scott Stensland

Antworten:

123

Hintergrund

Bei der Webentwicklung dreht sich alles um Kommunikation. In diesem Fall die Kommunikation zwischen zwei (2) Parteien über das HTTP-Protokoll:

  • Der Server - Diese Partei ist für das Liefern von Seiten verantwortlich.
  • Der Client - Diese Partei fordert Seiten vom Server an und zeigt sie dem Benutzer an. In den meisten Fällen ist der Client ein Webbrowser .
    • Der Benutzer - Der Benutzer verwendet den Client , um im Internet zu surfen, Formulare auszufüllen, Videos online anzusehen usw.

Die Programmierung jeder Seite bezieht sich auf Code, der auf dem jeweiligen Computer, auf dem Server oder auf dem Client ausgeführt wird.

Grundlegendes Beispiel

  1. Der Benutzer öffnet seinen Webbrowser (den Client ).
  2. Der Nutzer navigiert zu http://google.com .
  3. Der Kunde (im Namen des Nutzers ) sendet eine Anfrage an http://google.com (den Server ) für seine Homepage.
  4. Der Server bestätigt dann die Anfrage und antwortet dem Client mit einigen Metadaten (so genannten Headern ), gefolgt von der Quelle der Seite.
  5. Der Client empfängt dann die Quelle der Seite und macht sie zu einer von Menschen sichtbaren Website.
  6. Der Benutzer gibt Stack Overflowin die Suchleiste ein und drücktEnter
  7. Der Client übermittelt diese Daten an den Server .
  8. Der Server verarbeitet diese Daten und antwortet mit einer Seite, die den Suchergebnissen entspricht.
  9. Der Client rendert diese Seite erneut, damit der Benutzer sie anzeigen kann.

Programmierung

Serverseitige Programmierung

Serverseitige Programmierung ist der allgemeine Name für die Arten von Programmen, die auf dem Server ausgeführt werden .

Verwendet

  • Benutzereingaben verarbeiten.
  • Kompiliert Seiten.
  • Webanwendungen strukturieren.
  • Interagiere mit permanentem Speicher (SQL, Dateien).

Beispielsprachen

  • PHP
  • Python
  • ASP.Net in C #, C ++ oder Visual Basic.
  • Fast jede Sprache (C ++, C #, Java). Diese wurden nicht speziell für die Aufgabe entwickelt, sondern werden heute häufig für Webdienste auf Anwendungsebene verwendet.

Client-seitige Programmierung

Ähnlich wie die serverseitige Programmierung ist die clientseitige Programmierung der Name für alle Programme, die auf dem Client ausgeführt werden .

Verwendet

  • Erstellen Sie interaktive Webseiten.
  • Lassen Sie Dinge auf der Webseite dynamisch geschehen.
  • Interagieren Sie mit dem temporären Speicher und dem lokalen Speicher (Cookies, localStorage).
  • Senden Sie Anforderungen an den Server und rufen Sie Daten von diesem ab.
  • Bieten Sie einen Remote-Service für clientseitige Anwendungen wie die Registrierung von Software, die Bereitstellung von Inhalten oder Remote-Multiplayer-Spiele.

Beispielsprachen

  • JavaScript (hauptsächlich)
  • HTML *
  • CSS *
  • Jede Sprache, die auf einem Clientgerät ausgeführt wird und mit einem Remotedienst interagiert, ist eine clientseitige Sprache.

* HTML und CSS sind an sich keine "Programmiersprachen". Dies ist eine Markup-Syntax, mit der der Client die Seite für den Benutzer rendert .

Madara Uchiha
quelle
8
+1 für eine gute Antwort mit Anwendungsbeispielen! Nur um es kurz zu machen: HTML und CSS sind eigentlich keine Programmiersprachen, daher sollten sie wahrscheinlich nicht mit "PHP, ASP und nahezu jeder Sprache (C ++, C #, Java)" verglichen werden. ActionScript ist möglicherweise ein weiteres gutes Beispiel für eine clientseitige Sprache.
FrustratedWithFormsDesigner
5
Sie können nicht erkennen, warum der Server ein Server und der Client ein Client ist. Der Server ist dem Client bekannt, aber nicht umgekehrt. Es wird erwartet, dass der Server jederzeit ausgeführt wird. Es gibt keine Clienterwartungen.
Chris McCall
3
Ich möchte die Tatsache hinzufügen, dass eine Serverumgebung kontrollierter ist. Sie haben keine Ahnung, was der Kunde ist. Es gibt auch Sicherheitsbedenken (für beide Parteien), wenn Dinge auf der Client-Seite ausgeführt werden.
Stonemetal
1
Also füge es hinzu, fühle dich frei.
Madara Uchiha
1
Ich bin mit @ ChrisMcCalls Definition nicht einverstanden. Es kann Ausnahmen zu dieser Regel geben, z. B. wenn ein Server einen Client zum Verarbeiten von Daten oder zum Bereitstellen eines Dienstes für den Server zum Ausführen einer Aufgabe benötigt. Kunden teilen sich auch einen zunehmenden Teil der Last für Skalierbarkeit und Leistung, beispielsweise in SPAs. Diese Technologien verwischen diese Definition. Eine bessere Definition könnte sein, dass der Endbenutzer und der Client synonym sind. Es wird erwartet, dass der Endbenutzer auf dem Clientgerät vorhanden ist, während alle anderen Knoten als serverseitig betrachtet werden.
RyanJMcGowan
27

Mit den Worten des Laien:

Hier werde ich nur über Webprogrammierung sprechen.

Die clientseitige Programmierung hat hauptsächlich mit der Benutzeroberfläche zu tun, mit der der Benutzer interagiert. Bei der Webentwicklung wird der Code vom Browser auf dem Computer des Benutzers ausgeführt, und zwar hauptsächlich in Javascript, Flash usw. Dieser Code muss in einer Vielzahl von Browsern ausgeführt werden.

Ihre Hauptaufgaben sind:

  • Eingabe validieren (Die Validierung muss auf dem Server erfolgen. Eine redundante Validierung auf dem Client kann verwendet werden, um Serveraufrufe zu vermeiden, wenn die Geschwindigkeit sehr kritisch ist.)
  • Animation
  • Bearbeiten von UI-Elementen
  • Stile anwenden
  • Einige Berechnungen werden durchgeführt, wenn die Seite nicht so oft aktualisiert werden soll

Die für die Front-End-Programmierung zuständige Person muss wissen :

  • Javascript
  • CSS
  • HTML
  • Grundlegende grafische Gestaltung
  • Ajax
  • vielleicht Flash
  • Einige Javascript-Bibliotheken von Drittanbietern wie JQuery
  • UI-Design
  • Informationsdesign usw.

Die serverseitige Programmierung hat mit der Generierung dynamischer Inhalte zu tun. Es läuft auf Servern. Viele dieser Server sind "kopflos". Die meisten Webseiten sind nicht statisch. Sie durchsuchen eine Datenbank, um dem Benutzer aktualisierte personalisierte Informationen anzuzeigen. Diese Seite interagiert mit dem Backend, wie zum Beispiel der Datenbank.

Diese Programmierung kann in vielen Sprachen erfolgen:

  • PHP
  • Java und jsp
  • asp
  • Perl
  • Python
  • Ruby on Rails usw.

Dieser Code hat zu tun mit:

  • Datenbank abfragen
  • Codieren Sie die Daten in HTML
  • Fügen Sie Informationen in die Datenbank ein und aktualisieren Sie sie
  • Geschäftsregeln und Berechnungen

Die für die serverseitige Programmierung verantwortliche Person muss wissen:

  • einige der oben genannten Sprachen
  • HTML
  • SQL,
  • Linux / Unix Shell Scripting
  • OOP
  • Geschäftsregeln usw.
Tulains Córdova
quelle
"Der Verantwortliche für die Frontend-Programmierung muss wissen" Muss? Ich würde sagen, dass Sie nur mit HTML, CSS, Javascript und Ajax perfekt überleben können. Zu sagen, dass serverseitige Programmierung mit der Generierung dynamischer Inhalte zu tun hat und nicht dasselbe für Clientseite zu sagen, wird wahrscheinlich die falsche Intuition geben ...
nbro
"Die meisten Webseiten sind nicht statisch. Sie durchsuchen eine Datenbank, um dem Benutzer aktualisierte personalisierte Informationen anzuzeigen. Diese Seiten interagieren mit dem Back-End, beispielsweise der Datenbank." Ich würde es folgendermaßen umformulieren: "Seiten werden dynamisch generiert, indem die dynamischen Teile mit variablem Inhalt gefüllt werden, der normalerweise aus einer Datenbank abgerufen wird. Das Back-End ist bereits alles, was mit serverseitiger Programmierung zu
tun hat
Auch hier würde ich im Allgemeinen sagen "... eine Person sollte es wissen ..." und nicht "müssen" ...
nbro
@nbro Warum schreibst du nicht einfach deine eigene Antwort?
@ColeTrumbo Was ist der Zusammenhang zwischen meinem Kommentar und Ihrem? Können die Leute die Antworten anderer kritisieren, um sie zu verbessern?
nbro
14

Andere Antworten haben sich auf , was ist clientseitige und serverseitige Programmierung: Welche Sprachen meist verwendet werden, welche Aufgaben durchgeführt werden müssen, usw.

Das ist absolut richtig, aber ich vermisse es, mich ein wenig auf die Unterschiede zwischen beiden Arten der Programmierung im Kontext der Webprogrammierung zu konzentrieren. Lassen Sie mich versuchen, das anzusprechen.

Sicherheit und Berechtigungen

Bei der clientseitigen Programmierung haben Sie aus Sicherheitsgründen keinen Zugriff auf das gesamte System. Der Benutzer vertraut nicht unbedingt jedem Code, der aus dem Internet heruntergeladen und auf seinem Computer ausgeführt wird. Dies ist das Hauptziel der clientseitigen Umgebung (Browser und JavaScript-Engine): Bereitstellung einer isolierten Umgebung wo Client-Code ausgeführt werden kann, aber nicht auf etwas außerhalb des zulässigen Bereichs zugreifen kann.

Bei der serverseitigen Programmierung empfiehlt es sich, den Zugriff jeder Anwendung auf das zugrunde liegende System zu beschränken, dies wird Ihnen jedoch weitaus weniger auferlegt, da Sie oder Ihr Unternehmen letztendlich die Kontrolle über dieses System haben. Dieses "isolierte Käfig" -Design ist nicht in die serverseitigen Programmiertools und -sprachen integriert, sondern wird über das Installationssetup (unter Verwendung dedizierter Benutzer mit eingeschränkten Berechtigungen, Auswahl von Ports, die Root-Berechtigungen erfordern oder nicht erfordern usw.) erreicht.

Bereitstellung und Plattform

Bei der serverseitigen Programmierung muss die Bereitstellung von außerhalb des Codes mithilfe eines Tools (auch wenn es sich um make installein Tool oder ein git clonesolches handelt) erfolgen. Diese Bereitstellung erfolgt normalerweise manuell - oder wird zumindest in einem halbüberwachten Verfahren erwartet Weg. Das System (dh das Betriebssystem), auf dem Sie das Produkt bereitstellen, ist in der Regel für mehrere Computer einheitlich. Es kann jedoch stark an Ihre Anforderungen angepasst werden.

Bei der clientseitigen Programmierung erfolgt die Bereitstellung über Ihren serverseitigen Code, der die Clients automatisch und ohne Überwachung bedient. Das zugrunde liegende System (dh hauptsächlich der Browser) kann auf einer viel größeren Anzahl von Computern sehr unterschiedlich sein. Damit die Bereitstellung überhaupt möglich ist, müssen Standards eingehalten werden, und es gibt einen viel stärkeren Trend zu einer einzigen Sprache und Umgebung.

Aus diesem Grund kann das Kopieren von serverseitigem Code von einem Computer auf einen anderen Wochen dauern, während das Ausführen von clientseitigem Code auf verschiedenen Computern normalerweise trivial ist.

Zustands- und Nebeneffekte

(Ausschlussklausel: Dies ist bei weitem der subjektivste Punkt von allen. Wahrscheinlich hat meine Argumentation viele falsche Aspekte. Es ist aus meiner Sicht nur eine interessante Hypothese.)

Bei der serverseitigen Programmierung ist der Status ein viel größeres Problem, dh, wie Daten auf Anforderung des Benutzers abgerufen und aktualisiert werden können, wobei Konflikte aufgrund von Parallelität auftreten können. Selbst wenn der größte Teil dieser Komplexität auf einen Datenbankserver verlagert wird, liegt es in der Verantwortung des serverseitigen Codes, dass die Datenbank ihre Garantien für die Datenintegrität beibehält, indem sie ihre Schnittstelle korrekt verwendet (z. B. keinen Cache für Aktualisierungen verwenden, die von keinem gesehen werden DB), während es auch ein Ziel des serverseitigen Codes ist, die Datenbank nicht mit Arbeit zu überlasten und den Benutzer auf eine Antwort warten zu lassen.

Bei der clientseitigen Programmierung ist die Präsentation der Ergebnisse für den Benutzer ein viel größeres Problem, und dies impliziert sekundäre Effekte (meistens das Drucken auf dem Bildschirm). Dies soll nicht heißen, dass es sich nicht um einen Zustand handelt (z. B. Cookies), sondern dass das Hauptziel des Codes darin besteht, tatsächlich eine Schnittstelle mit dem Benutzer herzustellen, und dies kann nicht ohne Sekundäreffekte geschehen.

Aus diesem Grund muss bei der clientseitigen Programmierung normalerweise (zu einem bestimmten Zeitpunkt) mit einer Demo auf den Bildschirm geschaut werden, um sicherzustellen, dass alle Farben und das Layout richtig sind. Die serverseitige Programmierung kann fast ausschließlich in einer textorientierten Umgebung erfolgen, in der sie automatisiert ist Tests überprüfen, ob die Logik noch das tut, was sie tun soll.

logc
quelle
3

Dies soll keinesfalls eine akzeptierte Antwort sein. Ich biete es vielmehr als ergänzenden Punkt (als Antwort auf die when do you use each of themFrage) an, der in den anderen bisherigen Antworten noch zu erwähnen ist, nämlich:

Schutz des geistigen Eigentums

Auf der Client-Seite befindlicher Quellcode (z. B. in Javascript) ist leicht lesbar und / oder kann rückentwickelt werden, wenn er verschleiert wurde.

Auf dem Server befindlicher Quellcode kann jedoch proprietäre Algorithmen sicher schützen und nur das Ergebnis zurückgeben. eine Art Blackbox.

Kosta Kontos
quelle
Ja, aber das ist nicht wirklich der wichtigste Punkt, der Server ist für den Server da und der Client ist für den Empfang da. Ein Teil der Logik wird am besten auf dem Client ausgeführt (wie bei einem Einkaufswagen lassen Sie den Supermarkt nicht immer den Überblick über Ihren Einkaufswagen, oder?), Und ein anderer Teil wird am Server ausgeführt (Abrufen von Informationen aus der Datenbank).
Madara Uchiha
@ MadaraUchiha, daher die Präambel: "Dies soll keineswegs eine akzeptierte Antwort sein, sondern ich biete es als ergänzenden Punkt an"
Kosta Kontos
Sollte das dann nicht Teil eines anderen Posts sein? Ich bin neu hier, aber ist es nicht besser, eine vollständige Antwort zu haben als verstreute?
Julix