Skip to content

Protocole HTTP : le "langage de communication" entre frontend et backend

Question centrale

Comment fonctionne HTTP ? C'est comme demander : comment deux personnes dialoguent-elles ? Il faut convenir d'une langue, d'une syntaxe, de règles de conversation. HTTP est le "protocole de dialogue" entre le frontend et le backend.


0. L'essence d'HTTP

HTTP (HyperText Transfer Protocol, protocole de transfert hypertexte) est le protocole fondamental de la communication entre le frontend et le backend.

0.1 Analogie avec une conversation

Élément de conversationCorrespondance HTTPExplication
LangueProtocole HTTPUn langage compréhensible par les deux parties
SyntaxeFormat requête/réponseComment "parler"
FluxModèle requête-réponseUne question, une réponse
FinRaccrocherFermeture de la connexion TCP

1. L'évolution d'HTTP

Depuis sa création en 1991, HTTP a connu plusieurs évolutions majeures.

🌐HTTP Protocol Demo
📤HTTP request
GET/api/users/123HTTP/1.1
Host:api.example.com
User-Agent:Mozilla/5.0
Accept:application/json
Authorization:Bearer xxx
TCP connection
📥HTTP response
HTTP/1.1200OK
Content-Type:application/json
Content-Length:156
Cache-Control:max-age=3600
{ "id": 123, "name": "Alice", "email": "alice@example.com" }

1.1 Comparaison des versions

VersionAnnéeAmélioration cléCaractéristique typique
HTTP/0.91991Supporte uniquement GETTexte brut, requêtes uniquement, pas d'en-tête de réponse
HTTP/1.01996Ajout de POST/HEADUne connexion TCP par requête
HTTP/1.11997Connexions persistantesKeep-Alive, plusieurs requêtes sur une connexion
HTTP/22015MultiplexageTrames binaires, compression des en-têtes
HTTP/32022Basé sur QUICTransport UDP, résout le blocage en tête de ligne

Pourquoi HTTP/2 ?

HTTP/1.1 supporte les connexions persistantes, mais les requêtes doivent être envoyées séquentiellement (la réponse à la requête précédente doit être reçue avant d'envoyer la suivante). HTTP/2 résout ce problème par le multiplexage, permettant l'envoi simultané de plusieurs requêtes.


2. Structure d'une requête HTTP

2.1 La ligne de requête

http
GET /api/users/123 HTTP/1.1

Comprend trois parties :

  • Méthode : GET, POST, PUT, DELETE, etc.
  • URL : Chemin de la ressource demandée
  • Version : HTTP/1.1 ou HTTP/2

2.2 Les en-têtes de requête

http
Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer xxx
Content-Type: application/json
Content-Length: 45

En-têtes courants :

En-têteDescriptionExemple
HostNom de domaine du serveurapi.example.com
User-AgentInformations sur le clientMozilla/5.0
AcceptType de réponse acceptéapplication/json
AuthorizationInformations d'authentificationBearer token
Content-TypeType du corps de la requêteapplication/json

2.3 Le corps de la requête

json
{
  "name": "Zhang San",
  "email": "zhangsan@example.com"
}

Seules les méthodes POST, PUT, PATCH, etc. possèdent un corps de requête.


3. Structure d'une réponse HTTP

3.1 La ligne d'état

http
HTTP/1.1 200 OK

Comprend trois parties :

  • Version : HTTP/1.1
  • Code d'état : 200, 404, 500, etc.
  • Texte d'état : OK, Not Found, etc.

3.2 Les en-têtes de réponse

http
Content-Type: application/json
Content-Length: 156
Cache-Control: max-age=3600
Set-Cookie: session=xxx; HttpOnly

En-têtes de réponse courants :

En-têteDescriptionExemple
Content-TypeType du corps de réponseapplication/json
Content-LengthTaille du corps de réponse156
Cache-ControlStratégie de cachemax-age=3600
Set-CookieDéfinition d'un Cookiesession=xxx

3.3 Le corps de la réponse

json
{
  "code": 0,
  "data": {
    "id": 123,
    "name": "Zhang San"
  }
}

4. Méthodes HTTP en détail

MéthodeUsageCorps de requêteIdempotenceSécurité
GETRécupérer une ressourceNonOuiOui
POSTCréer une ressourceOuiNonNon
PUTMise à jour complèteOuiOuiNon
PATCHMise à jour partielleOuiNonNon
DELETESupprimer une ressourceNonOuiNon
HEADRécupérer les en-têtesNonOuiOui
OPTIONSInterroger les méthodes supportéesNonOuiOui

4.1 GET vs POST

CaractéristiqueGETPOST
Position des paramètresParamètres dans l'URLCorps de la requête
CachePeut être mis en cacheNon mis en cache par défaut
FavorisPeut être ajouté aux favorisNon
HistoriqueConservé dans l'historique du navigateurNon conservé
Longueur des donnéesLimitée (longueur de l'URL)Illimitée
SécuritéParamètres visibles dans l'URLParamètres dans le corps de la requête

Quand utiliser GET/POST ?

  • GET : interroger, récupérer des données
  • POST : créer, soumettre des données
  • PUT : mise à jour complète (remplacer toute la ressource)
  • PATCH : mise à jour partielle (modifier uniquement les champs spécifiés)
  • DELETE : supprimer une ressource

5. Codes d'état HTTP

5.1 Catégories de codes d'état

CatégorieDescriptionCodes typiques
2xxSuccès200 OK, 201 Created, 204 No Content
3xxRedirection301 permanent, 302 temporaire, 304 non modifié
4xxErreur client400 paramètre incorrect, 401 non authentifié, 404 inexistant
5xxErreur serveur500 erreur interne, 503 indisponible

5.2 Codes d'état courants

Code d'étatSignificationScénario d'utilisation
200 OKRequête réussieRequête GET, PUT réussie
201 CreatedCréation réussieCréation de ressource via POST réussie
204 No ContentPas de contenuSuppression via DELETE réussie
301 Moved PermanentlyRedirection permanenteChangement d'URL permanent
302 FoundRedirection temporaireChangement d'URL temporaire
304 Not ModifiedNon modifiéCache valide
400 Bad RequestParamètre incorrectFormat des paramètres de requête incorrect
401 UnauthorizedNon authentifiéConnexion requise
403 ForbiddenAccès interditConnecté mais droits insuffisants
404 Not FoundInexistantRessource inexistante
500 Internal Server ErrorErreur interneAnomalie du serveur
503 Service UnavailableIndisponibleServeur en maintenance ou surchargé

6. HTTPS : un HTTP sécurisé

6.1 HTTP vs HTTPS

CaractéristiqueHTTPHTTPS
ProtocoleTCPTCP + SSL/TLS
Port80443
DonnéesTransfert en clairTransfert chiffré
CertificatNon requisCertificat SSL requis
PerformanceLégèrement plus rapideLégèrement plus lent (overhead de handshake)
SEOSans impactPriorisé par les moteurs de recherche

6.2 Fonctionnement de HTTPS

  1. Client Hello : le client envoie les suites de chiffrement supportées
  2. Server Hello : le serveur retourne le certificat et la suite de chiffrement sélectionnée
  3. Vérification du certificat : le client vérifie la validité du certificat du serveur
  4. Échange de clés : utilisation du chiffrement asymétrique pour échanger la clé de session
  5. Communication chiffrée : utilisation de la clé de session pour la communication symétrique

Avantages de HTTPS

  • Protection contre l'écoute : données chiffrées, les tiers ne peuvent pas les lire
  • Protection contre la modification : vérification de l'intégrité des données
  • Protection contre l'usurpation : le certificat SSL vérifie l'identité du serveur

7. Mécanisme de cache HTTP

7.1 En-têtes de cache

En-têteDescriptionExemple
Cache-ControlStratégie de cachemax-age=3600
ETagVersion de la ressource"33a64df551425fcc"
Last-ModifiedDernière modificationWed, 21 Oct 2015 07:28:00 GMT

7.2 Stratégies de cache

Cache fort :

http
Cache-Control: max-age=3600

Pendant 3600 secondes, le navigateur utilise directement le cache, sans envoyer de requête.

Cache négocié :

http
ETag: "33a64df551425fcc"

Le navigateur envoie If-None-Match, le serveur retourne 304 (non modifié) ou 200 (modifié).


8. Questions fréquentes

8.1 La vraie différence entre GET et POST

Idée reçue : la différence entre GET et POST se résume à la position des paramètres.

La réalité :

  • GET est idempotent, plusieurs requêtes donnent le même résultat
  • POST n'est pas idempotent, plusieurs requêtes peuvent créer plusieurs ressources
  • GET peut être mis en cache, POST ne l'est pas par défaut
  • GET peut être sauvegardé en favori, POST ne le peut pas

8.2 Le blocage en tête de ligne d'HTTP/1.1

Problème : HTTP/1.1 supporte les connexions persistantes, mais les requêtes doivent être envoyées séquentiellement. Si la réponse à une requête est lente, toutes les requêtes suivantes doivent attendre.

Solutions :

  • Multiplexage HTTP/2
  • Fragmentation de domaine (établir plusieurs connexions via plusieurs noms de domaine)
  • Pool de connexions (limiter le nombre de connexions concurrentes)

8.3 Les avantages d'HTTP/2

CaractéristiqueHTTP/1.1HTTP/2
Format de transfertTexteTrames binaires
MultiplexageNon supportéSupporté
Compression des en-têtesAucuneAlgorithme HPACK
Push serveurNon supportéSupporté

Glossaire

TermeAnglaisExplication
HTTPHyperText Transfer ProtocolProtocole de transfert hypertexte
HTTPSHTTP SecureHTTP + SSL/TLS
TCPTransmission Control ProtocolProtocole de contrôle de transmission
SSL/TLSSecure Sockets LayerCouche de sockets sécurisés
IdempotenceIdempotentPlusieurs requêtes donnent le même résultat
Connexion persistanteKeep-AliveUne connexion TCP pour plusieurs requêtes
MultiplexageMultiplexingEnvoi simultané de plusieurs requêtes
Blocage en tête de ligneHead-of-Line BlockingLes requêtes précédentes bloquent les suivantes