Web Net Crea

Comment fonctionne un site web côté serveur : le guide complet

Un certificat expiré m'a coûté 40 minutes de ventes. Comprendre le côté serveur n'est pas de la théorie : c'est ce qui vous évite de perdre vos revenus sans savoir pourquoi. Voici comment ça marche vraiment.

Comment fonctionne un site web côté serveur : le guide complet

Un jour de mars 2024, une boutique en ligne que je gérais a perdu 40 minutes de ventes parce qu'un certificat TLS avait expiré. Pas de panne de courant, pas de piratage, pas de bug dans le code. Juste un fichier qui a cessé d'être valide à 14 h 37, et le serveur a refusé de répondre à quiconque. Ce jour-là, j'ai compris quelque chose que je répète à tous les débutants que je croise : comprendre comment fonctionne un site web côté serveur, ce n'est pas de la théorie pour développeurs. C'est ce qui vous évite de regarder vos revenus disparaître sans comprendre pourquoi.

La plupart des explications qu'on trouve en ligne s'arrêtent à « le navigateur demande, le serveur répond ». C'est vrai, mais c'est aussi utile qu'un mode d'emploi qui dirait « appuyez sur le bouton pour allumer ». Ce qui se passe entre la demande et la réponse, c'est là que tout se joue : la latence, la sécurité, les coûts, la scalabilité. On va y aller étape par étape.

Points clés à retenir

  • Le « côté serveur » désigne tout ce qui s'exécute sur une machine distante, pas dans le navigateur du visiteur.
  • Une seule visite déclenche en réalité plusieurs échanges : résolution DNS, poignée de main TLS, requête HTTP, traitement applicatif, réponse.
  • Deux logiciels différents coexistent presque toujours : le serveur web (Apache, Nginx) et le serveur applicatif (Django, Express, PHP-FPM).
  • Le code serveur est le seul endroit où vous pouvez manipuler des mots de passe, des paiements ou des données privées sans les exposer.
  • Un site statique se contente de servir des fichiers ; un site dynamique exécute du code à chaque requête, ce qui change tout en termes de coût et de sécurité.

Comment fonctionne un site web côté serveur, concrètement

Prenez l'adresse que vous venez de taper. Avant même qu'une seule ligne de HTML existe, votre ordinateur doit trouver où se trouve la machine qui détient votre site. C'est le rôle du DNS : traduire un nom lisible (monsite.fr) en une adresse IP que les routeurs comprennent.

Cette étape seule prend souvent entre 20 et 120 millisecondes. Ça paraît rien. Mais si votre résolveur DNS est mal configuré ou que le serveur fait une résolution inverse à chaque requête, vous ajoutez cette durée à chaque visiteur, à chaque page. J'ai vu un client diviser son temps de chargement par deux simplement en changeant de fournisseur DNS. Aucun changement de code. Juste une ligne dans un panneau d'administration.

Le trajet complet d'une requête

Voici la séquence réelle, dans l'ordre :

  1. Résolution DNS — le nom devient une adresse IP.
  2. Connexion TCP — votre navigateur ouvre un canal vers le port 443 (ou 80 en HTTP).
  3. Négociation TLS — les deux machines s'accordent sur un chiffrement. C'est ici que le certificat expiré de mon anecdote a tout bloqué.
  4. Envoi de la requête HTTP — une ligne du type GET /panier HTTP/1.1, plus des en-têtes (cookies, langue, type de navigateur).
  5. Traitement côté serveur — le serveur web passe la main à l'application, qui interroge éventuellement une base de données, applique des règles métier, construit une réponse.
  6. Réponse — le serveur renvoie un code de statut (200, 404, 500…), des en-têtes et un corps (HTML, JSON, image).
  7. Rendu — le navigateur affiche. À ce stade, le serveur a fini son travail.

Sept étapes pour ce que l'utilisateur perçoit comme « la page s'est affichée ». Et la moindre défaillance à l'une d'elles casse toute la chaîne.

Serveur web ou serveur applicatif : qui fait quoi ?

C'est la confusion la plus fréquente, et elle est rarement expliquée. Quand vous payez un hébergement, vous n'avez pas un serveur. Vous en avez presque toujours deux, empilés.

Le serveur web (Nginx, Apache, Caddy) est le portier. Il écoute sur les ports 80 et 443, termine le chiffrement TLS, sert les fichiers statiques — images, CSS, polices — et transmet le reste à l'application. Il est optimisé pour encaisser des milliers de connexions simultanées sans transpirer.

Le serveur applicatif (Django, Express, Laravel, Rails, ou même un simple script PHP) exécute votre logique. C'est lui qui vérifie si l'utilisateur est connecté, calcule un total de panier, écrit en base. Il est plus lent, plus gourmand, et c'est souvent lui qui plante.

CritèreServeur web (Nginx, Apache)Serveur applicatif (Django, Express…)
Rôle principalAiguillage et fichiers statiquesLogique métier et données
LangageConfigurationPython, JavaScript, PHP, Ruby, Java…
Connexions simultanéesTrès élevéLimité par le nombre de workers
Point de défaillance typiqueCertificats, règles de cacheFuites mémoire, requêtes SQL lentes
RedémarrageQuasi instantanéCasse souvent les sessions en cours

Sur un petit projet, vous pouvez tout faire tenir dans un seul processus. Dès que le trafic grimpe, séparer les deux devient indispensable. Je m'en suis rendu compte à mes dépens : un pic de 400 visiteurs simultanés a mis mon application à genoux alors que Nginx, lui, affichait fièrement 0 % d'utilisation CPU. Le goulot n'était pas là où je le cherchais.

Ce qui se passe vraiment dans le code serveur

Le navigateur ne sait rien de votre base de données. Il ne sait pas si vous stockez les paniers en mémoire ou dans PostgreSQL. Cette opacité est une protection, pas une limite.

Ce qui se passe vraiment dans le code serveur

Quels langages tournent côté serveur ?

Le JavaScript est le langage le plus répandu côté serveur aujourd'hui, via Node.js. Mais ce n'est qu'un choix parmi d'autres. Voici ce que j'ai utilisé sur de vrais projets, avec mon avis honnête :

  • Node.js / Express — parfait quand vous voulez partager du code entre front et back. J'ai mis en production deux API avec. Rapide à démarrer, moins évident à structurer sur de gros projets.
  • Python / Django — batteries incluses, administration gratuite. Mon choix par défaut pour tout ce qui touche aux données.
  • PHP — moqué pendant des années, toujours majoritaire sur le web réel. Un serveur WordPress est du PHP côté serveur, que ça plaise ou non.

Le langage compte moins que la logique. Un mauvais algorithme en Go sera plus lent qu'un bon algorithme en PHP.

Un exemple concret de traitement

La question « comment coder un serveur » revient souvent, et la réponse tient en quelques lignes. Voici ce qui se passe quand un visiteur demande la page de son panier, en pseudo-code :

route GET /panier
  session = lireCookie("session_id")
  utilisateur = requete("SELECT * FROM users WHERE session = ?", session)
  si utilisateur est nul : renvoyer 302 vers /connexion
  articles = requete("SELECT * FROM panier WHERE user_id = ?", utilisateur.id)
  html = moteurDeTemplate.rendre("panier.html", articles)
  renvoyer 200, html

Trois choses à observer. D'abord, la requête SQL est paramétrée (?) : c'est ce qui empêche l'injection SQL, l'une des attaques les plus courantes. Ensuite, la session est vérifiée avant de toucher au panier. Enfin, le HTML est produit sur le serveur et envoyé déjà rempli — c'est le rendu côté serveur, revenu à la mode après des années de tout-JavaScript.

Une variante mal écrite de ce même bloc, avec une concaténation de chaîne au lieu d'un paramètre, suffit à exposer toute votre base. Ce n'est pas une figure de style : c'est la faille numéro un des sites que j'ai audités.

Site statique, site dynamique : la vraie différence

Un site statique est une pile de fichiers posés sur le serveur. Nginx les renvoie tels quels. Aucun code exécuté, aucune base interrogée. C'est imbattable en vitesse et en coût, et j'héberge mon propre blog comme ça.

Site statique, site dynamique : la vraie différence

Un site dynamique exécute du code à chaque requête. C'est ce qu'il faut dès que le contenu dépend du visiteur : espace client, recherche personnalisée, paiement.

La frontière bouge en permanence. Un site de documentation peut être généré en statique tous les matins à 6 h, puis servi sans aucune exécution le reste de la journée. On appelle ça le rendu statique anticipé, et pour beaucoup de projets c'est le meilleur compromis.

Ce que le navigateur ne verra jamais

Les mots de passe, les clés d'API, la structure des tables, le contenu des autres utilisateurs. Tout cela reste côté serveur, dans un environnement auquel personne n'a d'accès direct depuis l'extérieur. C'est exactement pour ça qu'on ne met jamais une clé secrète dans du JavaScript : ce qui part chez le client est lisible par le client.

J'ai découvert cette règle à mes tous débuts, en laissant une clé d'API dans un fichier JS. Heureusement en environnement de test, mais la leçon est restée.

Sécurité et sessions côté serveur

Le web ne garde aucun souvenir entre deux requêtes. À chaque fois, le serveur voit un inconnu arriver. La session est ce qui lui permet de vous reconnaître : un identifiant opaque, stocké dans un cookie, qui pointe vers des données conservées côté serveur.

Ce qui signifie que le serveur supporte toute la responsabilité de l'authentification. Le navigateur peut mentir, modifier ses cookies, rejouer des requêtes. Le serveur, lui, doit vérifier chaque appel comme si c'était le premier.

  • Un session_id doit être aléatoire et long. Court et prévisible, il se devine.
  • Le cookie doit porter les attributs HttpOnly (invisible au JavaScript) et Secure (HTTPS uniquement).
  • Les sessions doivent expirer, sinon un ordinateur volé reste connecté des mois.

Ces trois lignes sont souvent négligées, même sur des sites commerciaux. Je les vérifie systématiquement quand on me demande d'auditer une application.

Le coût caché du traitement serveur

Chaque chose faite côté serveur coûte du CPU, de la mémoire, parfois de l'argent. Un rendu côté serveur avec trois appels de base de données ne vaut pas une page mise en cache. La règle que j'applique : si un résultat est identique pour tout le monde, calculez-le une fois et servez-le mille fois. C'est bête, et ça a réduit la facture d'hébergement d'un projet de 60 %.

Ce qu'il faut retenir

Le côté serveur, c'est la partie de votre site que personne ne voit et dont tout dépend. Le navigateur n'est qu'un terminal qui pose des questions ; la réponse, la vérification d'identité, la lecture des données et les décisions sensibles se passent ailleurs, sur une machine dont vous êtes responsable.

La prochaine fois qu'un site met cinq secondes à répondre, vous saurez où chercher : résolution DNS lente, serveur applicatif saturé, requête SQL mal indexée, ou certificat en fin de validité. Mon expérience la plus instructive reste celle de ce certificat expiré en 2024, parce que la cause était minuscule et l'effet total.

Une dernière chose, et c'est peut-être le plus important : le jour où vous séparerez pour la première fois votre serveur web de votre serveur applicatif, vous comprendrez la plupart de ces concepts d'un coup, mieux qu'avec n'importe quel schéma. Faites-le sur un petit projet, cassez-le, réparez-le. C'est ainsi que ça entre vraiment.

Marion Rossignol

Marion Rossignol

Marion Rossignol est une développeuse et architecte logicielle reconnue pour son expertise en JavaScript et TypeScript, ainsi qu'en conception de microservices. Elle accompagne les équipes dans la mise en place de pipelines DevOps et CI/CD robustes, alliant rigueur technique et pédagogie. Passionnée par la transmission, elle partage régulièrement ses retours d'expérience pour aider les organisations à moderniser leurs pratiques de développement.

Voir tous les articles →

Articles similaires