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 :
| Type | Code | Usage |
|---|---|---|
| DATA | 0x00 | Corps du message |
| HEADERS | 0x01 | En-têtes HTTP |
| PRIORITY | 0x02 | Priorité de stream |
| RST_STREAM | 0x03 | Annulation de stream |
| SETTINGS | 0x04 | Paramètres de connexion |
| PUSH_PROMISE | 0x05 | Server Push |
| PING | 0x06 | Heartbeat |
| GOAWAY | 0x07 | Fin de connexion |
| WINDOW_UPDATE | 0x08 | Contrôle de flux |
| CONTINUATION | 0x09 | Suite 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 :
| Opcode | Type |
|---|---|
| 0x0 | Continuation |
| 0x1 | Text |
| 0x2 | Binary |
| 0x8 | Close |
| 0x9 | Ping |
| 0xA | Pong |
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éristique | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| Transport | TCP | TCP | QUIC (UDP) |
| Multiplexing | Non (pipelining limité) | Oui (streams) | Oui (streams) |
| HOL Blocking | Oui (TCP) | Oui (TCP) | Non (QUIC) |
| Compression headers | Non | Oui (HPACK) | Oui (QPACK) |
| Server Push | Non | Oui | Oui |
| 0-RTT | Non | Non | Oui |
| Connection Migration | Non | Non | Oui |
| Chiffrement | Optionnel (TLS) | Souvent TLS | Obligatoire (TLS 1.3) |
| Format | Texte | Binaire | Binaire |
| Priorisation | Non | Oui (stream priority) | Oui (stream priority) |
Diagramme en cours de génération...
8. HTTP Caching
8.1 Cache-Control
Directives principales :
| Directive | Signification |
|---|---|
no-cache | Valider auprès du serveur avant utilisation |
no-store | Ne pas mettre en cache du tout |
public | Peut être caché par tout le monde |
private | Cache seulement navigateur |
max-age=3600 | Durée de validité en secondes |
must-revalidate | Doit revalider si expiré |
immutable | Ne 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