Quelles sont les différences entre la programmation côté serveur et la programmation côté client?

104

J'ai vu des questions (principalement sur Stack Overflow), qui manquent de ces connaissances de base. Le but de cette question est de fournir de bonnes informations à ceux qui le cherchent et à ceux qui y font référence.

Dans le contexte de la programmation Web, quelles sont les différences entre la programmation côté serveur et la programmation côté client? Quelles langues appartiennent à quelles langues et quand les utilisez-vous?

Madara Uchiha
la source
5
La programmation côté serveur consiste à écrire du code qui s'exécute sur le serveur, à l'aide de langages pris en charge par le serveur (tels que Java, PHP, C #; il est possible d'écrire du code qui s'exécute du côté serveur en JavaScript). La programmation côté client consiste à écrire du code qui s'exécutera sur le client. Elle est exécutée dans des langages pouvant être exécutés par le navigateur, tels que JavaScript.
FrustratedWithFormsDesigner
1
Celui-ci est très bon: programmers.stackexchange.com/questions/138561/…
JeffO
7
Je pense que vous devriez inclure dans la question que vous ne faites référence qu'à la programmation Web, car dans le formulaire actuel, les réponses ne sont pas complètes. Par exemple, la communication serveur-client n'a pas besoin d'être effectuée en HTTP; côté client peut ne pas utiliser un navigateur, etc.
K.Steff
@KSteff, vous pouvez modifier ma question pour l'ajouter.
Madara Uchiha
2
Quand le Web était encore jeune, il était de bon usage de mettre l'essentiel de votre logique en jeu (java / c ++) et de garder la logique du navigateur délibérément mince - en particulier du fait que les navigateurs de l'époque n'étaient pas prêts pour le prime time. Désormais, cet accent a été inversé, de sorte que les outils basés sur un navigateur (Angular.js) constituent l’essentiel de la logique de levage des applications Web (loin de la logique de plus en plus simplifiée côté serveur). Cela a été facilité par les navigateurs industriels modernes utilisant des moteurs javascript extrêmement rapides (au sein d'un ordre de grandeur du code natif).
Scott Stensland

Réponses:

123

Contexte

Le développement Web est tout au sujet de la communication. Dans ce cas, communication entre deux (2) parties, via le protocole HTTP:

  • Le serveur - Cette partie est chargée de servir les pages.
  • Le client - Cette partie demande des pages au serveur et les affiche à l'utilisateur. Dans la plupart des cas, le client est un navigateur Web .
    • L' utilisateur - L'utilisateur utilise le client pour naviguer sur le Web, remplir des formulaires, regarder des vidéos en ligne, etc.

La programmation de chaque côté fait référence au code qui s'exécute sur la machine spécifique, celle du serveur ou celle du client.

Exemple de base

  1. L' utilisateur ouvre son navigateur Web (le client ).
  2. L' utilisateur accède à http://google.com .
  3. Le client (au nom de l' utilisateur ) envoie une demande à http://google.com (le serveur ) pour sa page d'accueil.
  4. Le serveur accuse ensuite réception de la demande et répond au client avec des méta-données (appelées en- têtes ), suivies de la source de la page.
  5. Le client reçoit alors la source de la page, et rend dans un site visible humain.
  6. L’ utilisateur tape Stack Overflowdans la barre de recherche et appuie surEnter
  7. Le client envoie ces données au serveur .
  8. Le serveur traite ces données et répond avec une page correspondant aux résultats de la recherche.
  9. Une fois encore, le client affiche cette page à l' attention de l' utilisateur .

Programmation

Programmation côté serveur

La programmation côté serveur est le nom général des types de programmes exécutés sur le serveur .

Les usages

  • Traiter les entrées utilisateur.
  • Compile les pages.
  • Structurer les applications web.
  • Interagir avec le stockage permanent (SQL, fichiers).

Exemple de langues

  • PHP
  • Python
  • ASP.Net en C #, C ++ ou Visual Basic.
  • Presque tous les langages (C ++, C #, Java). Celles-ci n'ont pas été conçues spécifiquement pour la tâche, mais sont maintenant souvent utilisées pour les services Web au niveau de l'application.

Programmation côté client

Tout comme le côté serveur, la programmation côté client est le nom de tous les programmes exécutés sur le client .

Les usages

  • Faire des pages Web interactives.
  • Faire en sorte que les choses se passent de manière dynamique sur la page Web.
  • Interagissez avec le stockage temporaire et le stockage local (cookies, stockage local).
  • Envoyez des demandes au serveur et récupérez-en des données.
  • Fournissez un service à distance pour les applications côté client, telles que l'enregistrement de logiciels, la livraison de contenu ou les jeux multi-joueurs distants.

Exemple de langues

  • JavaScript (principalement)
  • HTML *
  • CSS *
  • Toute langue s'exécutant sur un périphérique client qui interagit avec un service distant est une langue côté client.

* HTML et CSS ne sont pas vraiment des "langages de programmation" en soi. Il s’agit d’une syntaxe de balisage par laquelle le client rend la page pour l’ utilisateur .

Madara Uchiha
la source
8
+1 pour une bonne réponse avec des exemples d'utilisation! Juste pour nitpick: HTML et CSS ne sont pas vraiment des langages de programmation, ils ne devraient donc probablement pas être comparés à "PHP, ASP et presque tous les langages (C ++, C #, Java)". ActionScript peut être un autre bon exemple de langage client.
FrustratedWithFormsDesigner
5
Vous ne parvenez pas à identifier pourquoi le serveur est un serveur et le client est un client. Le serveur est connu du client, mais pas l'inverse. Le serveur est censé être en cours d'exécution à tout moment, il n'y a aucune attente du client.
Chris McCall
3
J'ajouterais le fait qu'un environnement de serveur est mieux contrôlé. Vous n'avez aucune idée de ce qu'est le client. Il existe également des problèmes de sécurité (pour les deux parties) lors de l'exécution de tâches côté client.
Stonemetal
1
Alors ajoutez-le, n'hésitez pas.
Madara Uchiha
1
Je suis en désaccord avec la définition de @ ChrisMcCall sur un point. Il peut exister des exceptions à cette règle, par exemple lorsqu'un serveur peut s'appuyer sur un client pour traiter des données ou fournir un service au serveur afin que le serveur exécute une tâche. Les clients se partagent également une charge croissante pour l'évolutivité et les performances, telles que dans les SPA. Ces technologies brouillent cette définition. Une meilleure définition pourrait être que l'utilisateur final et le client sont synonymes. Il est prévu que l'utilisateur final existe sur la machine cliente, alors que tous les autres nœuds seront considérés comme côté serveur.
RyanJMcGowan
27

En termes simples:

Ici, je ne parlerai que de la programmation Web.

La programmation côté client concerne principalement l'interface utilisateur avec laquelle l'utilisateur interagit. En développement Web, c'est le navigateur, sur la machine de l'utilisateur, qui exécute le code, principalement en javascript, en flash, etc. Ce code doit être exécuté dans divers navigateurs.

Ses tâches principales sont:

  • validation de l'entrée (la validation doit être effectuée sur le serveur. Une validation redondante dans le client peut être utilisée pour éviter les appels au serveur lorsque la vitesse est très critique.)
  • animation
  • manipuler des éléments d'interface utilisateur
  • appliquer des styles
  • certains calculs sont effectués lorsque vous ne souhaitez pas que la page s'actualise si souvent

Le responsable de la programmation initiale doit savoir :

  • javascript
  • css
  • HTML
  • conception graphique de base
  • Ajax
  • peut-être Flash
  • certaines bibliothèques javascript tierces telles que JQuery
  • Conception de l'interface utilisateur
  • conception de l'information, etc.

La programmation côté serveur concerne la génération de contenu dynamique. Il fonctionne sur des serveurs. Beaucoup de ces serveurs sont "sans tête". La plupart des pages Web ne sont pas statiques, elles effectuent une recherche dans une base de données afin de montrer à l'utilisateur des informations personnalisées mises à jour. Ce côté interagit avec le back-end, comme par exemple la base de données.

Cette programmation peut être faite dans beaucoup de langages:

  • PHP
  • Java et jsp
  • aspic
  • Perl
  • Python
  • Ruby on Rails, etc.

Ce code a à voir avec:

  • Interroger la base de données
  • Encoder les données en HTML
  • Insérer et mettre à jour des informations dans la base de données
  • Règles de gestion et calculs

Le responsable de la programmation côté serveur doit savoir:

  • certaines des langues mentionnées ci-dessus
  • HTML
  • SQL,
  • scripts shell linux / unix
  • POO
  • règles de gestion, etc.
Tulains Córdova
la source
"La personne en charge de la programmation en amont doit savoir" Must? Je dirais que vous pouvez parfaitement survivre avec seulement HTML, CSS, Javascript et Ajax. Dire que la programmation côté serveur est
liée
"La plupart des pages Web ne sont pas statiques, elles effectuent une recherche dans une base de données afin de montrer à l'utilisateur des informations personnalisées et à jour. Ces côtés interagissent avec le back-end, comme par exemple la base de données." Je le reformulerais ainsi: "Les pages sont générées dynamiquement en remplissant les parties dynamiques avec un contenu variable qui est généralement récupéré dans une base de données. Le back-end contient déjà tout ce qui concerne la programmation côté serveur, IMO.
nbro
Encore une fois, en général, je dirais "... une personne devrait savoir ..." et non pas "doit" ...
nbro
@nbro Pourquoi n'écris-tu pas ta propre réponse?
@ColeTrumbo Quel est le lien entre mon commentaire et le tien? Les gens peuvent-ils critiquer les réponses des autres pour les améliorer?
Nbro
14

D' autres réponses ont mis l' accent sur ce qui est côté client et la programmation côté serveur: quelles langues sont le plus souvent utilisées, quelles tâches doivent être accomplies, etc.

C’est tout à fait vrai, mais je manque un peu d’attention sur les différences entre les deux types de programmation, dans le contexte de la programmation Web. Laissez-moi essayer de répondre à cela.

Sécurité et autorisations

Dans la programmation côté client, vous n’avez pas accès au système complet en raison de problèmes de sécurité. L'utilisateur ne fait pas nécessairement confiance à tous les éléments de code téléchargés sur le Web et exécutés sur sa machine. Il s'agit là du principal objectif de conception de l'environnement côté client (le navigateur et le moteur JavaScript): fournir un environnement isolé. où le code client peut s'exécuter mais ne peut accéder à rien en dehors de la portée autorisée.

En programmation côté serveur, il est judicieux de limiter également l'accès de chaque application au système sous-jacent, mais cela est beaucoup moins contraignant, car à la fin, vous ou votre entreprise maîtrisez ce système. Cette conception de «cage isolée» n'est pas intégrée aux outils de programmation et aux langages côté serveur, mais s'effectue via la configuration de l'installation (utilisateurs dédiés disposant d'autorisations restreintes, choix des ports nécessitant ou non des autorisations root, etc.).

Déploiement et plateforme

Dans la programmation côté serveur, le déploiement doit se faire de l'extérieur du code, à l'aide d'un outil (même s'il est make installou non git clone), et ce déploiement est généralement manuel - ou du moins, il est prévu qu'il se produise de manière semi-supervisée. façon. Le système (c'est-à-dire le système d'exploitation) sur lequel vous déployez est généralement uniforme sur plusieurs machines, mais il peut être fortement personnalisé selon vos besoins.

Dans la programmation côté client, le déploiement s'effectue à partir de votre code côté serveur, qui sert les clients automatiquement et sans supervision. Le système sous-jacent (c'est-à-dire principalement le navigateur) peut être très différent sur un nombre beaucoup plus important de machines. Pour que le déploiement soit réalisable, il faut respecter des normes et la tendance à adopter un langage et un environnement uniques est bien plus forte.

C'est pourquoi la copie du code côté serveur d'un ordinateur à un autre peut prendre des semaines, alors que le code côté client est généralement facile à exécuter sur différentes machines.

Etat et effets secondaires

(Avertissement: c'est de loin le point le plus subjectif de tous. Il y a probablement beaucoup d'aspects faux dans mon argumentation. C'est juste une hypothèse intéressante, à mon avis.)

Dans la programmation côté serveur, l'état est une préoccupation beaucoup plus grande, ce qui signifie comment récupérer et mettre à jour des données à la demande de l'utilisateur avec la possibilité de conflits dus à la simultanéité. Même si la plus grande partie de cette complexité est déchargée sur un serveur de base de données, il appartient au code côté serveur de permettre à la base de données de conserver ses garanties sur l'intégrité des données en utilisant correctement son interface (par exemple, ne pas utiliser un cache pour des mises à jour jamais vues par la base de données), tandis que le code côté serveur a également pour objectif de ne pas surcharger la base de données de travail et de laisser l’utilisateur en attente de réponse.

Dans la programmation côté client, présenter les résultats à l'utilisateur est une préoccupation beaucoup plus grande, ce qui implique des effets secondaires (principalement l'impression à l'écran). Cela ne veut pas dire qu'il n'y a pas d'état impliqué (par exemple, les cookies), mais que l'objectif principal du code est d'interfacer réellement avec l'utilisateur, ce qui ne peut se produire sans effets secondaires.

C’est pourquoi la programmation côté client nécessite généralement (à un moment donné) de regarder l’écran avec une démonstration pour vérifier que toutes les couleurs et la disposition sont correctes, tandis que la programmation côté serveur peut avoir lieu presque exclusivement dans un environnement orienté texte, où des tests vérifient que la logique fait toujours ce qu'elle est supposée faire.

logc
la source
3

Ceci n’est nullement destiné à être une réponse acceptée; je le présente plutôt comme un point complémentaire (en réponse à la when do you use each of themquestion) qui n’a pas encore été mentionné dans les autres réponses à ce jour, à savoir:

Protection de la propriété intellectuelle

Le code source situé côté client (comme en Javascript) est facilement lisible et / ou peut être inversé s'il a été masqué.

Le code source situé côté serveur peut toutefois protéger en toute sécurité des algorithmes propriétaires et ne renvoyer que le résultat; une boîte noire de toutes sortes.

Kosta Kontos
la source
Oui, mais ce n'est pas vraiment le point le plus important, le serveur est là pour le serveur, et le client est là pour recevoir. Une certaine logique est préférable pour le client (un panier, par exemple, vous ne laissez pas le supermarché garder trace de votre panier en tout temps, n'est-ce pas?), Et une autre pour le serveur (obtenir des informations de la base de données)
Madara Uchiha
@MadaraUchiha, d'où le préambule: "Cela ne veut en aucun cas être une réponse acceptée; je la présente plutôt comme un complément."
Kosta Kontos
Cela ne devrait-il pas faire partie d'un autre post alors? Je suis nouveau ici, mais n'est-il pas préférable d'avoir une réponse complète plutôt que dispersée?
Julix