La réponse est le second versant de la relation client-serveur. Elle sera créée par le serveur à partir des fichiers et des ressources demandées par la requête du client, puis elle lui sera envoyée à ce dernier. Elle est utilisée pour transmettre une information, un message et/ou des données au client.
Elle est composée d'éléments assez similaires à ceux de la requête. Elle est également composée de trois parties :
- La signature de la réponse,
- Les entêtes de la requête,
- Le corps de la requête.
La signature
Comme la signature de la requête, elle sera composée de trois éléments :
- La version du protocole HTTP,
- La code de status,
- Le status.
Exemple :
HTTP/1.1 404 Not Found
La version
La version est la même chose que la version pour la requête.
Le status et son code de status
Les deux éléments sont indiscociables l'un de l'autre. Chaque status (composé d'un texte) a son code associé (composé d'un nombre à trois chiffres). Il vont traduire quel est le type de réponse envoyée. Pour une meilleure lisibilité ils sont classés en cinq familles :
100 - Information
100 Continue : En attente de la suite de la requête. Utilisée si la requête est en plusieurs partie, pour signifier au client qu'on attend la suite de cette dernière.
200 - Successful
200 OK : c'est le statut le plus courant. Il indique que tout s'est passé et que le serveur répond faborablement à la demande. Il pourra par exemple envoyer un la page demandée, les ressources récupérées en base de données, que la connexion s'est bien passée et que l'utilisateur peut accéder à la page...
201 Created : souvent renvoyé après une requête de type POST, elle indique que l'élément qui devait être créé en base de donnée l'a bien été. La plupart du temps l'élément qui a été créé sera renvoyé dans le corps de la requête.
204 No Content : la requête a été acceptée, le serveur a fait ce qui a été demandé et tout s'est bien passé, mais il n'y a rien a renvoyer dans le corps de la réponse. Utilisée par exemple après une requête de type DELETE, l'élément a bien été supprimé, mais comme il n'existe rien ne peut être renvoyé.
206 Partial Content : utilisée lorsque la réponse sera en plusieurs partie, souvent car le contenu est trop gros pour être envoyé en plusieurs fois. Par exemple dans le contexte de la 3D, la réponse sera fragmentée entre la structure de l'object, sa texture, les ombres, les lumières... chaque partie de la requête qui est fragmentée renverra une 206 jusqu'à la dernière qui renverra une 200.
300 - Redirection
301 Moved Permanently : la ressource demandée a bougé d'URL de manière permanente, l'utilisateur est donc redirigé vers la nouvelle URL. Elle est associée au header "Location" qui indiquera la nouvelle URL.
302 Found : la ressource est provisoirement disponible à une nouvelle adresse, l'utilisateur est redirigé vers la nouvelle adresse. Elle est également associée au header "Location".
304 Not Modified : pour augmenter les performances des sites, les navigateurs vont garder certains fichiers en cache (les images, les fichiers de style CSS, les fichiers de script Javascript...). Ce cache peut durer plus ou moins longtemps selon le type de fichier, les réglages par défaut dans le navigateur et les réglages qu'on fait les développeurs sur le serveur. Quand un utilisateur demande un fichier qui n'a pas été modifié depuis sa dernière demande, le serveur lui répond par une 304, qui n'a pas de corps, et le navigateur va alors charger le fichier dans son cache plutôt que de le télécharger à nouveau. On économise comme ça du temps, de l'énergie et de la bande passante.
400 - Client error
400 Bad Request : le serveur a bien trouvé ce qu'on a demandé, il a compris la requête mais elle contient une erreur. Utilisé par exemple lorsqu'on fait une demande de création d'un nouvel élément dans la base de donnée, mais que ce dernier ne correspond pas au schéma de base de donnée : un nom d'utilisateur trop long, un mot de passe qui ne correspond pas au format imposé...
401 Unauthorized : code assez proche du 403 ci-dessous. Cette réponse est envoyée lorsqu'on essaye d'accéder à une requête sécurisée mais qu'on n'est pas encore connecté, par exemple on veut afficher la page d'administrateur sans être logué. Le plus souvent le développeur de l'application redirige l'utilisateur vers la page de connexion lorsqu'il reçoit une 401.
403 Forbidden : code assez proche du 401 ci-dessus. La réponse est renvoyée après la demande d'une ressource sécurisée alors qu'on est connecté mais qu'on n'a pas les droits nécessaires pour y accéder. Exemple : sur un site il existe le status Utilisateur, Auteur et Administrateur et on essaye, en tant que Auteur d'accéder aux réglages de l'application qui ne sont accessibles qu'aux administrateurs, le serveur répondra par une 403. Souvent cette réponse entraine l'affichage d'un message d'erreur ou la redirection vers une page qui indique qu'on n'a pas les droits pour accéder à la ressource demandée.
404 Not Found : peut-être le status le plus connu du web ! Il indique que la ressource qu'on a demandée n'existe pas ou que la page à laquelle on essaye d'accéder n'existe pas à cette URL. Elle est source d'inspiration pour de nombreux sites qui rivalisent d'inventivités pour faire des pages 404 plus originales les unes que les autres, deux sites qui montrent des exemple :
405 Method Not Allowed : utilisée plutôt dans les projets avancés, où on va faire de la réécriture d'URL et filtrer les VERBES de requête qui sont autorisés à faire une demande sur cette URL.
Par exemple : l'URL /users permet de charger une liste d'utilisateurs et de créer un nouvel utilisateur sur le site, les verbes autorisés sont donc GET pour la liste et POST pour la création. Tous les autres verbes n'étant pas autorisés, si on les utilises on reçoit une 405. Cela permet par exemple d'être sûr qu'on ne fera pas de suppression d'utilisateur sur ce site.
409 Conflict : envoyée lorsqu'on essaye de faire quelque chose qui entre en conflit avec une autre ressource, par exemple on veut créer un nouveau compte sur un site et que l'adresse email existe déjà dans la base.
418 I'm a teapot : signifie "Je suis une théière", il informe que le serveur refuse de préparer du café, car il s'agit d'une théière. Cette erreur est une référence au protocole Hyper Text Coffee Pot Control Protocol qui est le poisson d'avril des RFCs en 1998.
500 - Server error
500 Internal Server Error : le serveur ne répond car il a un problème technique. Cette erreur est un peu "fourre-tout", dès que le serveur ne peut pas répondre qu'aucun autre code de type 500 ne correspond, c'est la 500 qui est renvoyée. Une erreur de synthaxe en PHP, un oublie de ";" par exemple entraîne une 500.
502 Bad Gateway : le serveur qui vous répond sert de passerelle vers un autre serveur qui lui ne répond pas.
504 Gateway Time-out : le serveur qui vous répond sert de passerelle vers un autre serveur qui a mis trop de temps à répondre.
Les images qui illustrent les codes sont tous issus du site HTTP Cats. La liste ci-dessus n'est pas exaustive mais regroupe les codes les plus fréquemment utilisés. Cliquer ici pour avoir une liste exhaustive et ici pour avoir le site des RFC (fichiers de description des standards du web).