La requête est un des deux versants de la relation client-serveur. Comme on a vu dans les chapitres précédents, elle est construite par le navigateur et est envoyée au serveur. Elle va représenter la demande en détail qui est faite à ce dernier et elle va contenir beaucoup d'informations sur le demandeur.
Elle est composée de trois parties :
- La signature de la requête,
- Les entêtes de la requête,
- Le corps de la requête.
La signature
La signature est elle-même composée de trois parties :
- La méthode appelée le "VERBE",
- La ressource demandée,
- La version du protocole HTTP.
Exemple :
GET /contact/admin.html HTTP/1.1
La méthode
Elle est composé d'un verbe qui va déterminer la nature de se qu'on demande au serveur. Les deux principaux sont : GET et POST :
- GET va faire une requête de type : "demande d'informations". On requête le serveur pour qu'il nous envoie des ressources : un utilisateur, une liste d'articles...
- POST est associé à des informations qu'on possède et qu'on souhaite transmettre, via le corps de la requête, au serveur. Le serveur pourra ensuite les traiter : les stocker en base de données, les envoyer par mail, faire des calculs...
À ces deux verbes principaux, on ajoute les suivants :
- DELETE : va faire une demande de suppression d'une et de plusieurs données au serveur.
- PATCH : fait une demande de modification d'une ressource sur le serveur.
- PUT : fait une demande de remplacement d'une donnée au serveur.
Documentation : Méthodes de requête HTTP
La ressource demandée
Elle correspond à l'URL de cette ressource. On peut avoir deux types de chemin :
- comme dans l'exemple :
/contact/admin.html. Le serveur part du dossier racine du projet, il se rend dans le sous-dossier "contact" et cherche le fichier "admin.html". - ou dans une URL du type :
/articles/3. Ce type d'adresse est issue d'une technique qu'on appelle la "réécriture d'URL", technique qu'on verra dans un chapitre dédié. Elle permet d'avoir des URL propres, plus optimisées pour le référencement dans les navigateurs, et décorrélées de la structure du projet, ce qui permet une plus grande sécurité car l'URL ne trahit pas où se trouve quelle ressource.
Une fois que le fichier a été localisé, le serveur l'ouvrira, chargera son contenu et celui de ses dépendances, avant de compiler le tout et de l'envoyer au client via la réponse qu'on verra au chapitre suivant.
La version
La version majoritaire du HTTP est la 1.1 et ce depuis la fin des années 90. Le protocole a peu évolué depuis sa création fin des années 80. Une nouvelle version majeure a été validée en 2015. Elle est encore en cours d'adoption mais ne représente aujourd'hui (août 2023) que 36% du web. Cette version permet une plus grande sécurité des échanges, des performances bien meilleures, mais n'est pas encore implémentée partout.
Les entêtes de requête
Ces entêtes permettent de mettre du contexte à cette requête.
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: fr,en;q=0.9,en-US;q=0.8,fr-FR;q=0.7,de;q=0.6,ar;q=0.5
Connection: keep-alive
Host: api.jojotique.fr
Origin: https://www.jojotique.fr
Referer: https://www.jojotique.fr/
sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
On voit ici que :
- notre requête a comme origine le site "Origin: https://www.jojotique.fr"
- qu'on appelle le serveur "Host: api.jojotique.fr"
- qu'on accepte en langage pour la réponse le JSON : "application/json", le texte brute : "text/plain" ou tout le reste "*/*"
Le corps de la requête
Le corps de la requête est un dictionnaire contenant les valeurs que l'on souhaite transmettre au serveur. Dans le cadre d'une requête résultante de l'envoi d'un formulaire, les clés correspondront aux noms des champs et les valeurs aux données entrées dans les champs du formulaire.