MFormations
Modern Network Engineering

Chapitre 8

08 — Applications HTTP

Ce chapitre couvre les protocoles de la couche application HTTP, de HTTP/1.1 à HTTP/3, en passant par WebSocket, gRPC, TLS 1.3, le caching et la sécurité.

Chapitre 08 : Applications HTTP

1. HTTP/1.1

1.1 Persistent Connections

HTTP/1.1 a introduit les connexions persistantes (Keep-Alive) pour réutiliser une même connexion TCP pour plusieurs requêtes/réponses, évitant ainsi le coût de l'établissement TCP à chaque requête.

Diagramme en cours de génération...
Diagramme en cours de génération...

1.2 Pipelining

Le pipelining permet d'envoyer plusieurs requêtes sans attendre les réponses, réduisant la latence.

Diagramme en cours de génération...

Problème du HOL blocking : une réponse lente bloque toutes les suivantes.

1.3 Caching HTTP/1.1

En-têtes de caching : Cache-Control, ETag, Last-Modified, Expires.

Diagramme en cours de génération...

2. HTTP/2

2.1 Multiplexing

HTTP/2 remplace le pipelining par le multiplexage : plusieurs streams peuvent être actifs simultanément sur une même connexion TCP.

Diagramme en cours de génération...

2.2 Binary Framing Layer

HTTP/2 est binaire, pas textuel. Trames (frames) envoyées sur des streams multiplexés.

Diagramme en cours de génération...

Types de trames :

TypeCodeUsage
DATA0x00Corps du message
HEADERS0x01En-têtes HTTP
PRIORITY0x02Priorité de stream
RST_STREAM0x03Annulation de stream
SETTINGS0x04Paramètres de connexion
PUSH_PROMISE0x05Server Push
PING0x06Heartbeat
GOAWAY0x07Fin de connexion
WINDOW_UPDATE0x08Contrôle de flux
CONTINUATION0x09Suite d'en-têtes

2.3 HPACK

Compression des en-têtes HTTP avec HPACK (RFC 7541) : tables statique et dynamique, codage Huffman.

Diagramme en cours de génération...

Table statique : contient les entrées les plus courantes (:method: GET, :status: 200, etc.). Un champ comme :method: GET est encodé sur un seul octet (index 2).

2.4 Server Push

Le serveur peut envoyer des ressources avant que le client ne les demande.

Diagramme en cours de génération...

2.5 Stream Prioritization

Arbre de priorité des streams pour optimiser l'ordre de livraison.

Diagramme en cours de génération...

3. HTTP/3

3.1 QUIC — Présentation

HTTP/3 utilise QUIC (RFC 9000) comme transport, basé sur UDP, pour éliminer le HOL blocking de TCP.

Diagramme en cours de génération...

3.2 0-RTT

Un client qui a déjà connecté peut envoyer des données immédiatement.

Diagramme en cours de génération...

3.3 Connection Migration

Avec QUIC, la connexion survit au changement d'adresse IP (ex: Wi-Fi → 4G).

Diagramme en cours de génération...

3.4 Pas de HOL Blocking

Diagramme en cours de génération...

4. WebSocket

4.1 Handshake de mise à jour

Diagramme en cours de génération...

4.2 WebSocket Frame

Diagramme en cours de génération...

Opcodes :

OpcodeType
0x0Continuation
0x1Text
0x2Binary
0x8Close
0x9Ping
0xAPong

5. gRPC

5.1 Architecture

gRPC utilise HTTP/2 comme transport et Protocol Buffers pour la sérialisation.

Diagramme en cours de génération...

5.2 Types de streaming

Diagramme en cours de génération...

5.3 Exemple de définition Protobuf

syntax = "proto3";

service ChatService {
  rpc SendMessage(SendMessageRequest) returns (SendMessageResponse);
  rpc ChatStream(ChatStreamRequest) returns (stream ChatMessage);
  rpc BidirectionalChat(stream ChatMessage) returns (stream ChatMessage);
}

message SendMessageRequest {
  string user_id = 1;
  string message = 2;
}

message ChatMessage {
  string user_id = 1;
  string message = 2;
  int64 timestamp = 3;
}

6. TLS 1.3

6.1 Handshake TLS 1.3 (1-RTT)

Diagramme en cours de génération...

6.2 ALPN (Application-Layer Protocol Negotiation)

Diagramme en cours de génération...

6.3 Cipher Suites TLS 1.3

Diagramme en cours de génération...

7. Comparaison des versions HTTP

CaractéristiqueHTTP/1.1HTTP/2HTTP/3
TransportTCPTCPQUIC (UDP)
MultiplexingNon (pipelining limité)Oui (streams)Oui (streams)
HOL BlockingOui (TCP)Oui (TCP)Non (QUIC)
Compression headersNonOui (HPACK)Oui (QPACK)
Server PushNonOuiOui
0-RTTNonNonOui
Connection MigrationNonNonOui
ChiffrementOptionnel (TLS)Souvent TLSObligatoire (TLS 1.3)
FormatTexteBinaireBinaire
PriorisationNonOui (stream priority)Oui (stream priority)
Diagramme en cours de génération...

8. HTTP Caching

8.1 Cache-Control

Directives principales :

DirectiveSignification
no-cacheValider auprès du serveur avant utilisation
no-storeNe pas mettre en cache du tout
publicPeut être caché par tout le monde
privateCache seulement navigateur
max-age=3600Durée de validité en secondes
must-revalidateDoit revalider si expiré
immutableNe changera jamais (fichier statique)

8.2 Stratégie de caching

Diagramme en cours de génération...

8.3 Vary

L'en-tête Vary indique quels en-têtes de requête influencent la représentation :

Vary: Accept-Encoding
Vary: Accept-Language, User-Agent

9. CDN (Content Delivery Network)

Diagramme en cours de génération...

10. HTTP Security Headers

Diagramme en cours de génération...

10.1 Exemple CSP

Content-Security-Policy: default-src 'self';
                          script-src 'self' https://cdn.example.com;
                          style-src 'self' 'unsafe-inline';
                          img-src 'self' data: https://*.cloudfront.net;
                          connect-src 'self' wss://ws.example.com;
                          frame-ancestors 'none';

10.2 HSTS

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

11. Performance HTTP/2 vs HTTP/3

Diagramme en cours de génération...

12. Résumé

  • HTTP/1.1 : connexions persistantes, pipelining limité, HOL blocking TCP
  • HTTP/2 : multiplexage binaire, HPACK, server push, toujours HOL TCP
  • HTTP/3 : QUIC/UDP, 0-RTT, connection migration, pas de HOL
  • WebSocket : upgrade HTTP, full-duplex, frames binaires/texte
  • gRPC : HTTP/2 + protobuf, 4 types de streaming
  • TLS 1.3 : 1-RTT handshake, 0-RTT resumption, ciphers AEAD
  • Caching : Cache-Control, ETag, Vary, stratégies freshness
  • Sécurité : CSP, HSTS, X-Frame-Options, X-Content-Type-Options