web-dev-qa-db-fra.com

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

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 recherchent et à ceux qui s'y réfèrent.

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-elles et quand les utilisez-vous?

108
Madara's Ghost

Contexte

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

  • Le serveur - Cette partie est responsable de servir les pages.
  • Le client - Cette partie demande pages du 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 surfer 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, sur le serveur ou sur le 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 leur page d'accueil.
  4. Le serveur accuse alors réception de la demande et répond au client avec des métadonné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 s'affiche dans un site Web visible par l'homme.
  6. Les types d'utilisateur  Stack Overflow dans la barre de recherche et appuie sur Enter
  7. Le client soumet 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. Le client , encore une fois, rend cette page pour que l'utilisateur puisse voir .

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 l'entrée utilisateur.
  • Compile les pages.
  • Structurer des applications Web.
  • Interagissez avec le stockage permanent (SQL, fichiers).

Exemples de langues

  • PHP
  • Python
  • ASP.Net en C #, C++ ou Visual Basic.
  • Presque n'importe quel langage (C++, C #, Java). Celles-ci n'ont pas été conçues spécifiquement pour la tâche, mais sont désormais souvent utilisées pour les services Web de niveau 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

  • Créez des pages Web interactives.
  • Faites en sorte que les choses se produisent dynamiquement sur la page Web.
  • Interagissez avec le stockage temporaire et le stockage local (cookies, localStorage).
  • Envoyez des requêtes au serveur et récupérez-y des données.
  • Fournissez un service à distance pour les applications côté client, telles que l'enregistrement de logiciels, la distribution de contenu ou les jeux multi-joueurs à distance.

Exemples de langues

  • JavaScript (principalement)
  • HTML *
  • CSS *
  • Toute langue s'exécutant sur un appareil 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 de la syntaxe de balisage par laquelle le client affiche la page pour l'utilisateur .

125
Madara's Ghost

Dans les mots du profane:

Ici, je ne parlerai que de la programmation Web.

côté client la programmation est principalement liée à l'interface utilisateur avec laquelle l'utilisateur interagit. Dans le développement Web, c'est le navigateur, dans la machine de l'utilisateur, qui exécute le code, et cela se fait principalement en javascript, flash, etc. Ce code doit fonctionner dans une variété de 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 du serveur lorsque la vitesse est très critique.)
  • animation
  • manipulation d'éléments d'interface utilisateur
  • appliquer des styles
  • certains calculs sont effectués lorsque vous ne souhaitez pas actualiser la page si souvent

Le responsable de la programmation frontale doit savoir:

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

Côté serveur la programmation a à voir avec 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 recherchent 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 disons la base de données.

Cette programmation peut se faire dans de nombreux 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 et calculs commerciaux

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

  • certaines des langues mentionnées ci-dessus
  • HTML
  • SQL,
  • scripts shell linux/unix
  • OOP
  • règles commerciales, etc.
27
Tulains Córdova

D'autres réponses se sont concentrées sur quoi est la programmation côté client et côté serveur: quels langages sont principalement utilisés, quelles tâches doivent être accomplies, etc.

C'est tout à fait vrai, mais je manque un peu de concentration sur quelles sont les différences entre les deux types de programmation, dans le contexte de la programmation Web. Permettez-moi d'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, pour des raisons de sécurité. L'utilisateur ne fait pas nécessairement confiance à chaque morceau de code téléchargé à partir du Web et exécuté sur sa machine, et c'est le 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.

Dans la programmation côté serveur, il est recommandé de limiter également l'accès de chaque application au système sous-jacent, mais cela vous est beaucoup moins imposé, car en fin de compte, vous ou votre entreprise contrôlez ce système. Cette conception de `` cage isolée '' est pas intégrée dans les outils et langages de programmation côté serveur, mais est accomplie via la configuration de l'installation (en utilisant des utilisateurs dédiés avec des autorisations restreintes, en choisissant des ports qui nécessitent ou ne nécessitent pas autorisations root, etc.).

Déploiement et plateforme

Dans la programmation côté serveur, le déploiement doit avoir lieu depuis l'extérieur de votre code, à l'aide d'une sorte d'outil (même s'il s'agit de make install ou un git clone), et ce déploiement est généralement manuel - ou du moins, il devrait se produire de manière semi-supervisée. Le système (c'est-à-dire le système d'exploitation) sur lequel vous déployez est généralement uniforme sur un certain nombre de machines, mais il peut être fortement personnalisé en fonction de 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 plus grand nombre de machines. Afin de rendre le déploiement possible, les normes doivent être conservées et il existe une tendance beaucoup plus forte vers un langage et un environnement uniques.

C'est pourquoi la copie de code côté serveur d'une machine à une autre peut prendre des semaines, tandis que le code côté client est généralement trivial à exécuter sur différentes machines.

Effets étatiques et secondaires

(Avertissement: c'est de loin le point le plus subjectif de tous. Il y a probablement beaucoup de mauvais aspects à 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 importante, c'est-à-dire comment récupérer et mettre à jour les données à la demande de l'utilisateur avec la possibilité de conflits dus à la concurrence. Même si la majeure partie de cette complexité est déchargée sur un serveur de base de données, il est de la responsabilité du 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 de cache pour les mises à jour qui ne sont jamais vues par la base de données), alors 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, la présentation des résultats à l'utilisateur est une préoccupation beaucoup plus importante, 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 seulement que le principal objectif du code est de réellement interagir avec l'utilisateur, et cela ne peut pas 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émo, pour vérifier que toutes les couleurs et la mise en page sont correctes, tandis que la programmation côté serveur peut se produire presque exclusivement dans un environnement orienté texte, où automatisé les tests vérifient que la logique fait toujours ce qu'elle est censée faire.

14
logc

Il ne s'agit en aucun cas d'une réponse acceptée; je l’offre plutôt comme point complémentaire (en réponse au when do you use each of them question) qui n'a pas encore été mentionné dans les autres réponses, à savoir:

Protection de la propriété intellectuelle

Le code source qui se trouve du côté client (comme en Javascript) est facilement lisible et/ou peut être rétroconçu s'il a été obscurci.

Le code source qui se trouve côté serveur peut cependant protéger en toute sécurité les algorithmes propriétaires et ne renvoyer que le résultat; une sorte de boîte noire.

3
Kosta Kontos