🌐web

Architecture client-serveur et protocoles HTTP : cours NSI

30 mars 2026 5 min de lecture

Le modèle client-serveur : la base de tout échange sur le web

Imagine que tu veux regarder une vidéo sur une plateforme de streaming. Tu ouvres ton navigateur (le client), tu tapes l'adresse, et presque instantanément, la page s'affiche. Cette magie repose sur un modèle fondamental en informatique : l'architecture client-serveur. C'est le pilier invisible de presque tous les services que tu utilises quotidiennement sur Internet.

Dans ce modèle, les rôles sont bien distincts :

  • Le client : C'est le demandeur. Il initie la communication. Ton navigateur web (Chrome, Firefox), ton application mobile, ou un programme Python utilisant la bibliothèque requests sont des clients. Son rôle est de formuler une requête et d'afficher ou traiter la réponse.
  • Le serveur : C'est le fournisseur de service. Il attend passivement les demandes des clients. Quand il en reçoit une, il la traite et renvoie une réponse. C'est une machine (ou un programme) qui héberge des sites web, des bases de données, des fichiers. Il est généralement toujours allumé et connecté au réseau.

Cette séparation des tâches est une forme de répartition des rôles. Le client gère l'interface utilisateur et la demande, le serveur gère les données, la logique métier et la sécurité. C'est ce qui permet à des milliards de clients différents d'accéder aux mêmes services (comme Google ou YouTube) de manière fiable.

HTTP : le langage universel entre client et serveur

Pour que le client et le serveur se comprennent, ils ont besoin d'un protocole de communication commun. Sur le web, ce protocole est le HTTP (HyperText Transfer Protocol). Pense à HTTP comme à un ensemble de règles de politesse et de formats prédéfinis pour que deux machines puissent échanger des informations de manière structurée.

Une conversation HTTP typique se déroule en trois étapes simples :

  1. Connexion : Le client établit une connexion TCP avec le serveur (généralement sur le port 80 pour HTTP, 443 pour HTTPS).
  2. Requête : Le client envoie un message de requête HTTP.
  3. Réponse : Le serveur traite la requête et renvoie un message de réponse HTTP, puis la connexion est généralement fermée (modèle stateless).

Le protocole est dit « sans état » (stateless) : le serveur ne garde pas en mémoire les informations sur les requêtes précédentes du même client. C'est pour pallier cette limite que les cookies ont été inventés, permettant de maintenir une « session » utilisateur.

Décortiquons une requête et une réponse HTTP

La requête HTTP

Quand tu cliques sur un lien, ton navigateur construit une requête HTTP. Elle est composée de trois parties principales :

  • La ligne de requête : Elle contient la méthode (l'action à effectuer), l'URL de la ressource demandée, et la version du protocole HTTP.
    Exemple : GET /cours-nsi/architecture-client-serveur.html HTTP/1.1
  • Les en-têtes (headers) : Ce sont des métadonnées qui donnent des informations contextuelles au serveur (navigateur utilisé, types de contenus acceptés, cookies...).
    Exemple : User-Agent: Mozilla/5.0, Accept-Language: fr-FR
  • Le corps (body) : Optionnel. Il est principalement utilisé pour envoyer des données au serveur, comme le contenu d'un formulaire (avec la méthode POST).

La réponse HTTP

Le serveur, après traitement, renvoie une réponse structurée de la même manière :

  • La ligne de statut : Elle contient la version du protocole et, surtout, un code de statut crucial (ex: 200 OK, 404 Not Found, 500 Internal Server Error).
  • Les en-têtes de réponse : Ils donnent des informations sur la réponse (type de contenu, taille, date, serveur...).
    Exemple : Content-Type: text/html; charset=utf-8
  • Le corps de la réponse : C'est la ressource demandée elle-même, le plus souvent du code HTML, mais aussi du JSON, une image, du CSS, etc.

Les méthodes HTTP essentielles : GET, POST, PUT, DELETE

Les méthodes HTTP (ou verbes) définissent l'intention de la requête. Les quatre principales forment la base des opérations CRUD (Create, Read, Update, Delete) :

  • GET : Demande une lecture (R de Read) d'une ressource. C'est la méthode la plus courante, utilisée pour récupérer une page web, une image. Les données sont visibles dans l'URL.
  • POST : Utilisée pour envoyer des données au serveur afin de créer une nouvelle ressource (C de Create). C'est la méthode des formulaires de connexion, d'inscription. Les données sont dans le corps de la requête.
  • PUT : Utilisée pour mettre à jour intégralement une ressource existante (U de Update).
  • DELETE : Demande la suppression (D de Delete) d'une ressource spécifiée.

En NSI, tu manipules souvent GET et POST lorsque tu travailles avec des formulaires web ou des API.

De HTTP à HTTPS : l'importance cruciale de la sécurité

HTTP a un défaut majeur : les échanges sont en clair. Un pirate sur le même réseau pourrait intercepter et lire tes mots de passe, tes messages. C'est inacceptable aujourd'hui.

HTTPS (HTTP Secure) est la réponse. Il ajoute une couche de chiffrement (grâce à TLS/SSL) entre le client et le serveur. Comment le reconnaître ?

  • Le cadenas vert dans la barre d'adresse de ton navigateur.
  • L'URL qui commence par https:// au lieu de http://.

HTTPS garantit trois choses fondamentales :

  1. Chiffrement : Les données échangées sont illisibles pour quiconque les intercepterait.
  2. Intégrité : Les données n'ont pas été modifiées pendant le transfert.
  3. Authentification : Tu communiques bien avec le vrai site (et non une copie frauduleuse), grâce aux certificats numériques.

Développer des applications web sécurisées passe aujourd'hui obligatoirement par l'utilisation de HTTPS.

Mise en pratique avec Python et le module requests

La théorie, c'est bien, la pratique en Python, c'est mieux ! La bibliothèque requests est un outil formidable pour incarner le rôle du client HTTP. Voici un exemple simple :

import requests
# Envoi d'une requête GET
réponse = requests.get('https://api.github.com')
# Affichage du code de statut
print(f"Statut : {réponse.status_code}") # Affiche 200
# Affichage du contenu (généralement du JSON pour une API)
print(f"Contenu : {réponse.json()}")
# Affichage des en-têtes
print(f"En-têtes : {dict(réponse.headers)}")

Avec quelques lignes, tu peux interroger des API, scraper des données (de manière éthique !), ou tester tes propres serveurs web. C'est la concrétisation parfaite de tout ce que tu as appris sur l'architecture client-serveur.

📚 Pour aller plus loin

Questions fréquentes

Quelle est la différence fondamentale entre un client et un serveur ?

Le client est l'initiateur de la communication : il envoie une requête pour demander une ressource ou un service. Le serveur est le répondeur : il écoute en permanence les requêtes, les traite et renvoie une réponse appropriée. Pense au client comme à un client dans un restaurant (il commande) et au serveur comme au serveur du restaurant (il reçoit la commande et apporte le plat).

Pourquoi dit-on qu'HTTP est un protocole "sans état" (stateless) ?

On dit qu'HTTP est "sans état" car le serveur ne conserve aucune information sur les requêtes précédentes d'un même client entre deux connexions. Chaque requête est traitée de manière totalement indépendante. C'est un choix de conception qui simplifie l'architecture des serveurs mais qui pose problème pour gérer des sessions utilisateurs (comme un panier d'achat). C'est pour contourner cette limite que les cookies ont été inventés : ce sont de petits fichiers stockés côté client et renvoyés avec chaque requête, permettant au serveur de "reconnaître" l'utilisateur.

Quand faut-il utiliser la méthode POST plutôt que GET dans un formulaire ?

Il faut utiliser GET lorsque la requête ne modifie rien d'important côté serveur et qu'elle est idempotente (la répéter plusieurs fois a le même effet). C'est le cas pour les recherches, les filtres. Les données du formulaire sont alors visibles dans l'URL. Il faut utiliser POST lorsque la requête a un effet modificateur (création d'un compte, envoi d'un message, achat) ou qu'elle transmet des données sensibles (mot de passe). Les données sont alors cachées dans le corps de la requête, ce qui est plus sécurisé et ne pollue pas l'historique de navigation.

En Python, quelle est la différence entre urllib et requests pour faire des requêtes HTTP ?

`urllib` est un module standard de Python, donc toujours disponible, mais son API est considérée comme plus verbeuse et moins intuitive. `requests` est une bibliothèque tierce très populaire qui offre une API beaucoup plus simple et "pythonique". Elle gère automatiquement beaucoup de détails (encodage, sessions, JSON). Pour débuter et pour la majorité des cas en NSI, `requests` est fortement recommandé pour sa clarté. Il faut juste l'installer via `pip install requests`.

Bravo ! Tu as lu cet article
Inscris-toi pour sauvegarder ta progression et gagner des XP
Creer mon compte
client serveur NSIprotocole HTTParchitecture web NSI
Pixel