Dijon - B2 - PRA Help

Cours : Le protocole HTTP

Les bases

Le fait qu'en français on l'appelle le protocole HTTP est en fait un léger abus de langage. En effet HTTP signifie : HyperText Transfer Protocol, le mot protocole est donc déjà contenu dans le nom.

Un peu d'histoire

Lorsque Tim Berners-Lee invente le World Wide Web (ce qu'on appelle aujourd'hui communément le web) son idée est de mettre en place un système qui permet de partager de l'information structurée entre des laboratoires de recherche distants.

Pour ce faire, il a besoin d'inventer trois systèmes distincts :

  • Une façon de structurer l'information pour la rendre plus facilement lisible par l'humain : ce sera le HTML

  • Une façon de localiser et trouver différentes informations : ce sera les URL (Uniform Resource Locator)

  • Une façon de permettre aux clients (les humains et leur terminal) d'interroger les serveurs qui contiennent l'information : ce sera le HTTP

Implémentation du protocole

Les méthodes HTTP

GET

GET est probablement la méthode la plus couramment utilisée, elle permet de demander à accéder à une ressource et son contenu.

Dans cet exemple, je demande à ce que l'on m'envoie le contenu de la page d'accueil de Google :

GET Host: www.google.com

HEAD demande des informations sur la ressource, sans demander la ressource elle-même.

Parmi les informations utiles que peut vous transmettre HEAD il y a Content-Length qui vous permet de connaître la taille d'un contenu avant de lancer une requête GET lourde si la ressource est volumineuse.

POST

POST permet de transmettre des données, son usage le plus classique aujourd'hui est au sein des formulaires HTML. Quand vous remplissez un formulaire HTML qui a comme attribut method=post c'est elle qui sera appelée.

OPTIONS

OPTIONS permet de récupérer la liste des options de communication disponibles pour une ressource ou un serveur : Les méthodes disponibles, si une autorisation est nécessaire, le format de données attendu, ...

CONNECT

CONNECT permet d'utiliser un intermédiaire, appelé proxy pour accéder aux ressources.

TRACE

TRACE peut être considérée comme une méthode de debug ou de diagnostic, elle demande au serveur de retourner exactement ce qu'il a reçu.

PUT

PUT permet de remplacer ou ajouter une ressource sur un serveur. Comme les formulaires HTML n'acceptent que GET et POST, elle est très souvent remplacée par POST.

PATCH

PATCH permet de modifier partiellement une ressource, sans avoir à la remplacer totalement (contrairement à PUT).

QUERY

QUERY est la plus récente des méthodes, c'est une sorte de POST qui envoie des données pour traitement, mais qui contrairement à POST ne fait pas de modification sur le serveur.

DELETE

DELETE demande à supprimer une ressource du serveur.

Les en-têtes (Headers)

En plus de la méthode et de l'URI, chaque requête et réponse HTTP transporte des en-têtes (headers en anglais). Ce sont des paires clé/valeur qui donnent au serveur ou au client des informations supplémentaires sur le contenu envoyé ou attendu.

On les présente souvent comme un tableau :

En-tête

Valeur

Rôle

Host

api.jsonplaceholder.typicode.com

Indique le domaine cible de la requête

Content-Type

application/json

Précise le format du corps de la requête/réponse

Accept

application/json

Indique le format que le client souhaite recevoir

Authorization

Bearer <token>

Transporte un jeton d'authentification

User-Agent

Mozilla/5.0...

Décrit le logiciel du client (navigateur, curl, Postman...)

Les en-têtes dans une requête

Quand vous faites une requête HTTP, les en-têtes voyagent après la première ligne (méthode + URI + version) et avant le corps (s'il y en a un) :

POST /posts HTTP/1.1 Host: jsonplaceholder.typicode.com Content-Type: application/json Accept: application/json User-Agent: PostmanRuntime/7.32.3 {"title": "foo", "body": "bar"}

Les en-têtes Content-Type et Accept sont particulièrement importants : ils disent au serveur ce que vous envoyez (Content-Type) et ce que vous attendez (Accept). C'est ce qu'on appelle la négociation de contenu.

Les en-têtes dans une réponse

Le serveur renvoie ses propres en-têtes avant le corps de la réponse :

HTTP/1.1 201 Created Content-Type: application/json; charset=utf-8 Location: /posts/1 Set-Cookie: session=abc123; HttpOnly; Secure

Ici, le serveur indique que la ressource a été créée (201 Created), quel format elle retourne (Content-Type), où la trouver (Location, utile pour les redirects ou la création de ressources) et qu'il positionne un cookie de session.

À retenir sur les en-têtes

  • Ils ne font pas partie du corps de la requête ou de la réponse

  • Le champ Host est toujours obligatoire (quel que soit la version d'HTTP), les autres le sont moins

  • Le client et le serveur peuvent en ajouter autant qu'ils veulent, tant que chacun les comprend

Le protocole de communication

À l'origine

Dans ses premières versions, HTTP nécessitait de rouvrir une connexion pour chaque requête, le processus ressemblait à ceci :

  1. Le client ouvre la connexion

  2. Le client envoie sa requête

  3. Le serveur envoie sa réponse

  4. Le serveur ferme la connexion

Sécurisé mais peu pratique.

Aujourd'hui

  1. Le client ouvre la connexion en indiquant de la maintenir ouverte Keep-Alive

  2. Le client envoie sa première requête

  3. Le serveur envoie la réponse à la première requête

  4. Le client envoie la seconde requête

  5. Le serveur envoie la réponse à la seconde requête

  6. ...

  7. Le client (Connection: close) ou le serveur (Connection : timeout) ferme la connexion

Exemple

Dans cet exemple je veux récupérer les infos sur une ressource pour vérifier sa taille avant de lancer la récupération de cette ressource :

Le client ouvre la connexion vers le serveur.

Le client envoie une requête HEAD pour récupérer les informations de la ressource :

HEAD /document.pdf HTTP/1.1 Host: documents.com

Le serveur envoie la réponse avec les informations sur document.pdf:

HTTP/1.1 200 OK Content-Type: application/pdf Content-Length: 1048576

Le client envoie une requête GET pour récupérer document.pdf:

GET /document.pdf HTTP/1.1 Host: documents.com

Le serveur envoie la réponse avec le contenu de document.pdf:

HTTP/1.1 200 OK Content-Type: application/pdf Content-Length: 1048576 [Données brutes du fichier PDF...]

Les codes de réponse HTTP

HTTP est un protocole qui prévoie un certains nombres de codes de réponse en fonction de ce que le serveur a pu ou non rencontrer comme problèmes. Voici les principaux :

200

Un code 200 signifie que tout s'est passé normalement.

300

Un code 301 ou 302 signifie que la requête a dû être redirigée.

400

Les codes 400 sont des codes d'erreur (et généralement le problème vient du client):

  • 401 : utilisateur non authentifié

  • 403 : accès refusé (vous êtes peut être authentifié mais n'avez pas les droits nécessaires par exemple)

  • 404 : ressource non trouvée (la fameuse page 404)

500

Les codes 500 sont des codes d'erreur et généralement le problème vient du serveur :

  • 500, 502 et 503 : erreur du côté du serveur (souvent vous návez pas plus de précision)

  • 504 : le serveur n'a pas répondu.

Le meilleur d'entre tous

En 1998 un code avait été annoncé pour le 1er avril : 418 : Je suis une théière. Le problème, c'est que la blague a tellement perduré qu'on a estimé que ce code ne pourrait pas servir pour quelque chose de sérieux, il a donc été officiellement adopté. Il sert spécifiquement pour une théière à signifier qu'elle ne peut pas faire de café, puisqu'elle est une théière.

Exercice guidé sur le protocole HTTP


16 September 2026