Aller au contenu
M07 · A. Introduire la notion client/serveur

Le modèle client / serveur et le protocole HTTP

Qui demande, qui répond, et ce qui circule entre les deux. Architectures 2-tiers et 3-tiers, requête et réponse HTTP, codes de statut, ports, et les types de serveurs web.

1Situer

Au module 04, vos pages HTML étaient des fichiers ouverts directement par le navigateur. Le site de Souk Atlas doit maintenant afficher le stock à jour, enregistrer les commandes, reconnaître le client connecté : ces pages sont fabriquées à la demande par un programme qui tourne sur un serveur. Avant d'écrire ce programme en PHP, il faut comprendre la conversation entre le navigateur et le serveur.

2Comprendre

Qui fait quoi : le client et le serveur
CLIENT Quartier : Agdal Ph. Atlas ✓ Ph. Zaytoun Ph. Ibn Sina ✓ ☑ Ouvertes JS, sur place SERVEUR Application PHP / Node.js vérifie, calcule DONNÉES Base dedonnées GET /pharmacies?quartier=agdal 200 OK [{"nom":"Ph. Atlas","ouverte":true},…]

Le client (le navigateur du téléphone), le serveur (le programme de l'application) et la base de données.

1 / 6

Un client, un serveur

Sur le web, le client est le navigateur (Chrome, Firefox, le navigateur du téléphone). Le serveur est une machine, souvent dans un centre de données, sur laquelle tourne un logiciel serveur web (Apache par exemple). Le même mot « serveur » désigne donc la machine et le logiciel.

Les deux ne se trouvent pas forcément sur deux machines : avec XAMPP, votre PC joue les deux rôles. Le navigateur demande http://localhost/... et c’est Apache, sur le même PC, qui répond.

Architectures 2-tiers et 3-tiers

  • 2-tiers : le client parle directement au serveur de données. Exemple : un logiciel de caisse installé sur le PC du magasin, relié à une base MySQL. Toute la logique est dans le logiciel du poste.
  • 3-tiers : un serveur d’application s’intercale. Le navigateur (1) parle à Apache + PHP (2), qui seul parle à MySQL (3). C’est l’architecture du web dynamique : le client n’a jamais accès à la base.

L’intérêt du 3-tiers : la base est protégée (seul PHP la contacte), les règles métier sont écrites une fois sur le serveur, et le client n’a rien à installer.

HTTP : la langue commune

Une requête contient :

  • une méthode : GET (je demande une page), POST (j’envoie des données, un formulaire), et pour les API PUT, DELETE ;
  • une ressource : le chemin, avec d’éventuels paramètres après ? ;
  • des en-têtes : Host (le site visé), User-Agent (le navigateur), Cookie… ;
  • un corps, pour POST : les données du formulaire.
GET /produits.php?categorie=3 HTTP/1.1
Host: www.soukatlas.ma
User-Agent: Mozilla/5.0 (Android 14)
Accept: text/html

Une réponse contient un code de statut, des en-têtes et le corps (le HTML de la page) :

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 5120

<!DOCTYPE html><html>...
CodeSignificationQuand ?
200 OKtout va bienla page est renvoyée
301 / 302redirection« allez plutôt à cette adresse » (en-tête Location)
403 Forbiddeninterditpas le droit d’accéder
404 Not Foundintrouvablele fichier n’existe pas
500 Internal Server Errorerreur du serveurle script a planté

Adresses, ports et noms

ServicePort par défaut
HTTP (Apache)80
HTTPS443
MySQL3306
FTP (envoi de fichiers)21
SSH (administration à distance)22

Une URL complète les contient tous : http://localhost:80/souk/index.php. Quand le port est celui par défaut, on ne l’écrit pas. Le nom (www.soukatlas.ma) est traduit en adresse IP par le DNS ; localhost désigne toujours votre propre machine (127.0.0.1).

Les types de serveurs web

  • Apache HTTP Server : le plus répandu historiquement, livré avec XAMPP ; configuration par fichiers (httpd.conf, .htaccess).
  • Nginx : très rapide pour les sites à fort trafic ; souvent placé devant PHP-FPM.
  • IIS : le serveur web de Microsoft, pour Windows Server (sites ASP.NET).
  • LiteSpeed : courant chez les hébergeurs mutualisés ; compatible avec la configuration d’Apache.
  • Serveurs intégrés aux langages : php -S localhost:8000 pour tester vite, Node.js pour le JavaScript.

On distingue aussi le contenu statique (le même fichier pour tout le monde, comme vos pages du module 04) et dynamique (fabriqué à chaque demande par un programme : PHP, Python, Node.js).

Exemple simple

Le serveur du café

Vous (le client) passez commande : « un thé à la menthe ». Le serveur va en cuisine, le prépare et vous l'apporte. Vous ne voyez jamais la cuisine, seulement ce qui arrive sur la table. Le navigateur, lui, ne voit jamais le code PHP : seulement le HTML qui arrive.

Exemple simple

Le guichet de la poste

Au guichet, on tend un formulaire rempli (la requête) et on reçoit un reçu avec un numéro (la réponse et son code). Si le guichet est fermé, on reçoit « revenez plus tard » : c'est l'équivalent d'une erreur 503.

3Manipuler

Le site contient une page statique (index.html) et une page dynamique (heure.php). Cliquez sur les liens, observez chaque requête et chaque réponse dans « Entre le navigateur et le serveur », puis ouvrez « Code source reçu » : le code PHP n'y est jamais.
Pas à pas dans le lab ↗ Cliquez sur Exécuter : PHP 8.3 démarre dans votre navigateur (environ 5 Mo à télécharger, une seule fois).

La page s'affichera ici.

Le navigateur demandera /index.html au serveur, qui exécutera le PHP et renverra du HTML.

Entre le navigateur et le serveur aucun échange pour l'instant

Consignes 0 / 2

  1. Ouvrez la page dynamique heure.php : elle affiche « Il est ... »
  2. Dans heure.php, ajoutez un paragraphe « Bonne journée chez Souk Atlas », puis Exécuter

4Pratiquer

Exercice 1 · Lire une requête

Voici une requête : « GET /produits.php?categorie=3 HTTP/1.1 » suivie de « Host: www.soukatlas.ma ». Donnez la méthode, la ressource demandée, le paramètre envoyé et le serveur visé.

Voir le corrigé
Méthode : GET (on demande une page, sans envoyer de formulaire).
Ressource : /produits.php
Paramètre : categorie = 3 (dans l'URL, après le ?)
Serveur : www.soukatlas.ma (en-tête Host)

Exercice 2 · Quel code de statut ?

Associez chaque situation à son code : la page existe ; la page a été déplacée et le navigateur doit aller ailleurs ; la page n'existe pas ; le script PHP a planté ; l'utilisateur n'a pas le droit.

Voir le corrigé
La page existe et est renvoyée      → 200 OK
Redirection vers une autre page     → 302 Found (ou 301 si c'est définitif)
La page n'existe pas                → 404 Not Found
Le script PHP a planté              → 500 Internal Server Error
Accès interdit                      → 403 Forbidden

Exercice 3 · 2-tiers ou 3-tiers ?

Le site de Souk Atlas : le navigateur demande une page à Apache, PHP exécute le script et interroge MySQL. Combien de tiers ? Nommez chacun.

Voir le corrigé
Trois tiers :
1. Le client : le navigateur (présentation).
2. Le serveur d'application : Apache + PHP (traitements, règles métier).
3. Le serveur de données : MySQL (stockage).
Si le client parlait directement à la base (une application de bureau reliée à MySQL), ce serait du 2-tiers.

5Vérifier

1. Que reçoit le navigateur quand il demande heure.php ?
2. Sur quel port écoute un serveur web en HTTP par défaut ?
3. Le code 404 signifie :