Structure des messages HTTP
HTTP est un modèle d'architecture client/serveur (C/S) qui échange des informations sur une connexion fiable, et c'est un protocole de requête/réponse sans état.
Les messages HTTP sont la base de la communication entre les clients et les serveurs. Ils se composent d'une série de lignes de texte qui suivent un format et une structure spécifiques.
Les messages HTTP se divisent en deux types : les messages de requête et les messages de réponse.
Un client HTTP est une application (un navigateur Web ou tout autre client) qui se connecte à un serveur afin de lui envoyer une ou plusieurs requêtes HTTP.
Un serveur HTTP est aussi une application (généralement un service Web, tel que Nginx, le serveur Apache ou le serveur IIS, etc.) qui reçoit les requêtes des clients et envoie les données de réponse HTTP au client.

Message de requête client
Un message de requête envoyé par un client au serveur via une requête HTTP se compose de quatre parties : la ligne de requête, les en-têtes de requête, une ligne vide et les données de requête. La figure ci-dessous montre le format général d'un message de requête.

-
Ligne de requête(Request Line):
- Méthode: par exemple GET, POST, PUT, DELETE, etc., spécifiant l'opération à effectuer.
- URI de requête(Uniform Resource Identifier) : le chemin de la ressource demandée, incluant généralement le nom d'hôte, le numéro de port (si non par défaut), le chemin et la chaîne de requête.
- Version HTTP: telle que HTTP/1.1 ou HTTP/2.
Exemple de format de ligne de requête :
GET /index.html HTTP/1.1 -
En-têtes de requête(Request Headers):
- Contient les informations sur l'environnement du client, la taille du corps de la requête (le cas échéant), les types de compression pris en charge par le client, etc.
- Les en-têtes de requête courants incluent
Host、User-Agent、Accept、Accept-Encoding、Content-Lengthetc.
-
Ligne vide:
- Le séparateur entre les en-têtes de requête et le corps de la requête, indiquant la fin des en-têtes de requête.
-
Corps de la requête(facultatif) :
- Dans certains types de requêtes HTTP (comme POST et PUT), le corps de la requête contient les données à envoyer au serveur.
Message de réponse du serveur
Une réponse HTTP se compose également de quatre parties : la ligne de statut, les en-têtes de message, une ligne vide et le corps de la réponse.

-
Ligne de statut(Status Line):
- Version HTTP: correspond à la version dans le message de requête.
- Code de statut: un nombre à trois chiffres indiquant le résultat du traitement de la requête, par ex. 200 signifie succès, 404 signifie ressource introuvable.
- Informations de statut: une brève description du code de statut.
Exemple de format de la ligne de statut :
HTTP/1.1 200 OK -
En-têtes de réponse(Response Headers):
- Contient des informations sur l'environnement du serveur, la taille du corps de la réponse, les types de compression pris en charge par le serveur, etc.
- Les en-têtes de réponse courants incluent
Content-Type、Content-Length、Server、Set-Cookieetc.
-
Ligne vide:
- Le séparateur entre les en-têtes de réponse et le corps de la réponse, indiquant la fin des en-têtes de réponse.
-
Corps de la réponse(Facultatif) :
- Contient les données renvoyées par le serveur, telles que le contenu de la page web demandée, les images, les données JSON, etc.
Exemple
L'exemple suivant est un exemple typique d'utilisation de GET pour transmettre des données :
Requête du client :
GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate Connection: keep-alive
Réponse du serveur :
HTTP/1.1 200 OK
Date: Wed, 18 Apr 2024 12:00:00 GMT
Server: Apache/2.4.1 (Unix)
Last-Modified: Wed, 18 Apr 2024 11:00:00 GMT
Content-Length: 12345
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Hello, World!</h1>
<!-- The rest of the HTML content -->
</body>
</html>
Dans les applications pratiques, les messages HTTP peuvent contenir davantage de champs d'en-tête, et les tailles du corps de la requête et du corps de la réponse varient selon les données transmises.
Autres extensions