Une requête HTTP
Comment est structuré un message HTTP pour effectuer une requête vers la machine "serveur" ?
Dernière mise à jour
Comment est structuré un message HTTP pour effectuer une requête vers la machine "serveur" ?
Dernière mise à jour
Nous avons maintenant une connexion TCP sur la machine "serveur" à l'adresse example.com
sur le port 80
.
Il est temps de faire une requête HTTP au serveur HTTP !
Avant de mettre le contenu de la requête, on vient placer ce qu'on appelle les "headers" (ou en-têtes en français).
Nous avons premièrement GET
qui correspond au nom de la méthode HTTP que l'on veut utiliser.
Il en existe plusieurs (), GET
est la plus courante car c'est celle qui permet de récupérer du contenu. C'est celle que votre navigateur utilise par défaut lors des navigations.
/
correspond tout simplement au chemin que vous voulez accéder.
Ici, l'on veut faire une requête à http://example.com/
mais si l'on voulait faire une requête à http://example.com/some/path
, on aurait du écrire /some/path
.
Finalement, HTTP/1.1
est une constante : c'est la version utilisée du protocole HTTP, ici 1.1
.
Après cette première ligne, nous avons plusieurs champs qui sont formatés ainsi, Key: value
.
Le champ Host
est obligatoire car il permet au serveur de savoir à quelle adresse (et port si utilisé explicitement : example.com:8080
) la requête a été faite. Cela est utile dans des cas de configurations assez complexes.
Tout les autres champs sont optionnels, on peut même ajouter nos propre champs, cependant quelques champs peuvent avoir un impact sur le contenu.
Par exemple, le champ User-Agent
contient des informations sur la version de l'application faisant la requête HTTP. Ici, nous avons décidé d'utiliser le User-Agent
suivant : http-1o1
et on a précisé qu'on était à la version 1.0.0
. Cependant, un vrai User-Agent
tel que celui de Chrome, par exemple, est bien plus long : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
.
Ce champ permet au serveur de pouvoir potentiellement adapter le contenu en fonction du navigateur.
Un autre exemple : le champ Accept-Language
permet de dire au serveur quel langue notre navigateur préfère (par ordre de préférence). Ainsi le serveur peut potentiellement adapter le contenu en fonction des langues données.
Dans cet exemple, le contenu DOIT être vide.
Nous faisons une requête GET
et lorsque l'on utilise cette méthode, le contenu DOIT être vide : on ne peut pas envoyer de données avec un GET
car cette méthode est faite pour la lecture seulement.
Si l'on veut envoyer des données au serveur lors de notre requête HTTP, on peut utiliser les autres méthodes tel que POST
, par exemple :
Vous pourrez remarquer que j'ai ajouté le champ Content-Type
pour spécifier le MIME du contenu que j'ai envoyé au serveur. Ici, j'ai envoyé un JSON qui correspond donc au MIME : application/json
On a envoyé notre requête, maintenant il faut avoir la réponse !
Vous pourrez retrouver d'autres MIME dans la documentation de la MDN, .
Nous allons revenir sur notre requête GET
(vers ) et allons l'envoyer à la machine "serveur" via notre socket. Nous utiliserons une version plus simplifiée de la requête.