logo

Requêtes HTTP

Introduction

HTTP est un protocole de transmission au même titre que FTP.

Il permet à un client de récupérer auprès d’un serveur web des données. Si le client est un navigateur web, ce protocole permet d’obtenir les données nécessaires à l’affichage d’une page internet.

Le protocole fonctionne par l’intermédiaire de requêtes émises par le client et de réponses fournies par le serveur.

Étude détaillée d’un cas pratique

Nous pouvons consulter les requêtes (et les réponses) HTML avec le navigateur Firefox avec le developpement web.

Examinons la demande d’une page web telle que mathartung.xyz/nsi par un navigateur internet.

Le navigateur commence par demander, à un serveur de noms de domaines (DNS), l’adresse IP de mathartung.xyz.

Celui-ci lui fournit 185.28.20.156.

La communication par IP n’est pas suffisante car sur un ordinateur peuvent fonctionner diverses applications utilisant internet comme un navigateur ou un logiciel de messagerie. De plus, les paquets de données transitant par le protocole IP ont une taille limite d’environ 1500 octets.

On utilise alors TCP, un protocole de connexion situé sur une couche supérieure à celle d’IP :

Le navigateur contacte donc directement le serveur web à l’adresse 185.28.20.156 :80 en utilisant la couche TCP/IP. La connexion s’établit grâce au 3way-handshake.

Le client envoie alors la requête HTTP au serveur web :

La requête possède toujours la même forme :

Le serveur web renvoie l’entête suivant :

suivi des données c’est-à-dire de la page web au format HTML.

La réponse possède, elle aussi, une réponse formatée :

Le navigateur analyse la page et, pour chaque lien présent, réalise toutes les étapes précédentes avant d’afficher le résultat. Une

page web moderne peut nécessiter près de 100 requêtes : la page mathartung.xyz/nsi a nécessité par exemple 24 requêtes.

Approfondissement de HTTP

L’étude des requêtes et des réponses HTTP peut être réalisée dans Firefox grâce au menu Outils/Développement web/Réseau. Les méthodes disponibles pour HTTP sont les suivantes : GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH. GET permet d’obtenir une ressource.

PUT, DELETE et PATCH permettent de modifier des données sur le serveur : il est évidemment nécessaire d’être authentifié pour réaliser ces changements et le serveur doit être configuré pour autoriser ces changements. HEAD permet d’obtenir seulement l’en-tête de la réponse. POST permet d’envoyer une ressource au serveur : cette méthode est souvent utilisée lors du remplissage d’un formulaire. Les codes de statuts commencent par 100, 200, 300, 400 ou 500.

Code Message Description
10x Message d'information Ces codes ne sont pas utilisés dans la version 1.0 du protocole
20x Réussite Ces codes indiquent le bon déroulement de la transaction
200 OK La requête a été accomplie correctement
201 CREATED Elle suit une commande POST, elle indique la réussite, le corps du reste du document est sensé indiquer l'URL à laquelle le document nouvellement créé devrait se trouver.
202 ACCEPTED La requête a été acceptée, mais la procédure qui suit n'a pas été accomplie
203 PARTIAL INFORMATION Lorsque ce code est reçu en réponse à une commande GET, cela indique que la réponse n'est pas complète.
204 NO RESPONSE Le serveur a reçu la requête mais il n'y a pas d'information à renvoyer
205 RESET CONTENT Le serveur indique au navigateur de supprimer le contenu des champs d'un formulaire
206 PARTIAL CONTENT Il s'agit d'une réponse à une requête comportant l'en-tête range. Le serveur doit indiquer l'en-tête content-Range
30x Redirection Ces codes indiquent que la ressource n'est plus à l'emplacement indiqué
301 MOVED Les données demandées ont été transférées à une nouvelle adresse
302 FOUND Les données demandées sont à une nouvelle URL, mais ont cependant peut-être été déplacées depuis...
303 METHOD Cela implique que le client doit essayer une nouvelle adresse, en essayant de préférence une autre méthode que GET
304 NOT MODIFIED Si le client a effectué une commande GET conditionnelle (en demandant si le document a été modifié depuis la dernière fois) et que le document n'a pas été modifié il renvoie ce code.
40x Erreur due au client Ces codes indiquent que la requête est incorrecte
400 BAD REQUEST La syntaxe de la requête est mal formulée ou est impossible à satisfaire
401 UNAUTHORIZED Le paramètre du message donne les spécifications des formes d'autorisation acceptables. Le client doit reformuler sa requête avec les bonnes données d'autorisation
402 PAYMENT REQUIRED Le client doit reformuler sa demande avec les bonnes données de paiement
403 FORBIDDEN L'accès à la ressource est tout simplement interdit
404 NOT FOUND Classique! Le serveur n'a rien trouvé à l'adresse spécifiée. Parti sans laisser d'adresse... :)
50x Erreur due au serveur Ces codes indiquent qu'il y a eu une erreur interne du serveur
500 INTERNAL ERROR Le serveur a rencontré une condition inattendue qui l'a empêché de donner suite à la demande (comme quoi il leur en arrive des trucs aux serveurs...)
501 NOT IMPLEMENTED Le serveur ne supporte pas le service demandé (on ne peut pas tout savoir faire...)
502 BAD GATEWAY Le serveur a reçu une réponse invalide de la part du serveur auquel il essayait d'accéder en agissant comme une passerelle ou un proxy
503 SERVICE UNAVAILABLE Le serveur ne peut pas vous répondre à l'instant présent, car le trafic est trop dense (toutes les lignes de votre correspondant sont occupées veuillez rappeler ultérieurement)
504 GATEWAY TIMEOUT La réponse du serveur a été trop longue vis-à-vis du temps pendant lequel la passerelle était préparée à l'attendre (le temps qui vous était imparti est maintenant écoulé...)


HTTP est sans état, c’est-à-dire qu’il n’y a pas de lien entre deux requêtes réalisées sur la même connexion. Cela pose problème en particulier sur des sites de commerce en ligne avec un panier d’achat que l’on remplit au fur et à mesure. Mais HTTP n’est pas sans session : on ajoute des cookies au flux HTTP, que l’on stocke sur le client, ce qui permet de maintenir une session pour l’utilisateur et donc de remplir le panier d’achat !

HTTP a connu plusieurs révisions :

Ces révisions permettent d’accélérer le chargement des pages web qui ont une certaine tendance à l’embonpoint ! De plus, les données sont mises en cache dans le navigateur. Cela permet de ne pas les recharger auprès du serveur lorsque l’on utilise les boutons Précédent et Suivant du navigateur.