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
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… ;
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>...
Code
Signification
Quand ?
200 OK
tout va bien
la page est renvoyée
301 / 302
redirection
« allez plutôt à cette adresse » (en-tête Location)
403 Forbidden
interdit
pas le droit d’accéder
404 Not Found
introuvable
le fichier n’existe pas
500 Internal Server Error
erreur du serveur
le script a planté
Adresses, ports et noms
Service
Port par défaut
HTTP (Apache)
80
HTTPS
443
MySQL
3306
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.
Publicité
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 serveuraucun échange pour l'instant
Consignes 0 / 2
Ouvrez la page dynamique heure.php : elle affiche « Il est ... »
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.