Anatomie d'une requête HTTP HTTP ( HyperText Transfer Protocol ) est le protocole du web. Le principe est simple : un client envoie une requête , le serveur renvoie une réponse . Toujours dans ce sens, toujours une réponse par requête. Voir HTTP en vrai L'option -v (verbose) de curl affiche tout l'échange : curl -v https://formation.tfrichet.fr Les lignes qui commencent par > sont envoyées par le client, celles qui commencent par < sont reçues du serveur. La requête Exemple avec JSONPlaceholder , une fausse API publique faite pour s'entraîner : curl -v https://jsonplaceholder.typicode.com/posts \ -H "Content-Type: application/json" \ -d '{"title": "Hello", "body": "Mon premier article", "userId": 1}' POST /posts HTTP/1.1 Host: jsonplaceholder.typicode.com User-Agent: curl/8.10.1 Accept: */* Content-Type: application/json {"title": "Hello", "body": "Mon premier article", "userId": 1} Ligne de requête : la méthode ( POST ), le chemin ( /posts ) et la version de HTTP. Headers : des paires Nom: valeur qui donnent des informations sur la requête. Ligne vide , puis le body (facultatif) : les données envoyées. La réponse HTTP/1.1 201 Created Content-Type: application/json; charset=utf-8 Location: https://jsonplaceholder.typicode.com/posts/101 {"title": "Hello", "body": "Mon premier article", "userId": 1, "id": 101} Ligne de statut : la version, le code de statut et sa description. Headers , ligne vide, puis le body . Les headers à connaître Header Sens Rôle Host Requête Le nom de domaine visé (plusieurs sites peuvent partager un serveur) Content-Type Les deux Le format du body envoyé : application/json , text/html … Accept Requête Le format que le client souhaite recevoir Authorization Requête Les informations d'authentification User-Agent Requête Le logiciel client Set-Cookie / Cookie Réponse / Requête Le serveur dépose un cookie, le client le renvoie ensuite Location Réponse L'adresse d'une ressource créée ou d'une redirection Oublier Content-Type: application/json en envoyant du JSON est l'erreur numéro 1. Le serveur ne sait pas comment lire le body et répond souvent par une erreur peu claire. Un protocole sans état HTTP est sans état ( stateless ) : le serveur ne se souvient de rien entre deux requêtes. Chaque requête doit contenir tout ce qu'il faut pour être comprise. Alors comment un site sait-il que vous êtes connecté ? Le client renvoie à chaque requête une preuve d'identité : un cookie pour un site web, un token ou une clé d'API pour une API. HTTP n'a pas de mémoire persistante. Ce n'est pas un défaut : c'est ce qui permet de répartir les requêtes sur plusieurs serveurs. Les familles de codes de statut Famille Signification Exemples 1xx Information, patientez 101 Switching Protocols 2xx Succès 200 OK , 201 Created , 204 No Content 3xx Redirection, c'est ailleurs 301 Moved Permanently , 304 Not Modified 4xx Erreur du client : c'est ta faute 400 Bad Request , 401 , 404 Not Found 5xx Erreur du serveur : c'est la mienne 500 Internal Server Error , 503 Service Unavailable Le détail des codes est vu au chapitre 2. Et HTTPS, HTTP/2, HTTP/3 ? HTTPS : le même HTTP, mais chiffré par TLS. HTTP/2 et HTTP/3 : le transport est plus rapide (multiplexage, QUIC), mais les méthodes, headers et codes restent les mêmes. Tout ce cours s'applique.