HTTP



Le protocole HTTP (Hypertext Transfer Protocol) est l'épine dorsale de la communication sur le World Wide Web. Il définit les règles qui permettent aux navigateurs web (clients) d'interagir avec les serveurs web pour récupérer et transmettre des informations, rendant possible la navigation sur les sites web, le téléchargement de fichiers et l'utilisation d'applications web.

Historique

HTTP/0.9

Comme vu pécédemment, l'histoire de HTTP commence avec Tim Berners-Lee au CERN, en 1990, lors de la création des 3 piliers du web (HTML, URL, HTTP).

HTTP, plus précisément HTTP/0.9, est implémenté en 1991. Il était extrêmement simple, ne supportant qu'une seule méthode de requête, GET, et ne transmettait que le contenu HTML des pages. Il n'y avait pas d'en-têtes de requête ou de réponse, et la connexion TCP était fermée après chaque requête.

HTTP/1.0 et HTTP/1.1 (1996-1997)

L'adoption croissante du web a nécessité des améliorations significatives du protocole HTTP. En 1996, HTTP/1.0 a indroduit des changements clés :

  • nouvelles méthodes de requête: POST et HEAD ont été ajoutées, permettant non seulement de récupérer des ressources (GET), mais aussi d'envoyer des données au serveur (POST) et de demander uniquement les en-têtes d'une ressource sans son contenu (HEAD).
  • en-têtes de requête et de réponse: des en-têtes ont été introduits pour fournir des informations supplémentaires sur la requête et la réponse, comme le type de contenu, le navigateur utilisé, etc.

Cependant, HTTP/1.0 restait inefficace car chaque requête nécessitait l'établissement d'une nouvelle connexion TCP. En 1997, HTTP/1.1 a apporté des améliorations majeures pour pallier à ce problème :

  • connexions persistantes (Keep-Alive): permet de réutiliser la même connexion TCP pour plusieurs requêtes, réduisant la latence et améliorant les performances.
  • pipelining des requêtes: permet d'envoyer plusieurs requêtes sur la même connexion sans attendre la réponse à la première.
  • Chunked Transfer Encoding: permet d'envoyer des données de réponse en morceaux, sans avoir à connaître la taille totale à l'avance.
  • mise en cache: des mécanismes de cache plus sophistiqués ont été introduits pour réduire la charge sur les serveurs et améliorer la vitesse de chargement des pages.

HTTP/1.1 est resté le protocole dominant pendant plus de 15 ans, mais ses limitations en termes de performances sont devenues de plus en plus évidentes avec l'explosion du contenu web et l'augmentation du nombre d'utilisateurs.

HTTP/2 (2015)

HTTP/2 a été publié en 2015, basé sur le protocole Spdy de Google, et représentait une refonte majeure du protocole. Les principaux objectifs de HTTP/2 étaient d'améliorer les performances et de réduire la latence. Les innovations clés incluaient :

  • multiplexage: possibilité d'envoyer plusieurs requêtes et réponses simultanément sur une seule connexion TCP, éliminant le problème du "head-of-line blocking" inhérent à HTTP/1.1.
  • compression des en-têtes (HPACK): réduit la taille des en-têtes, minimisant le volume de données transférées.
  • priorisation des requêtes: permet au client de spécifier l'ordre dans lequel il souhaite recevoir les ressources.
  • server push: permet au serveur d'envoyer des ressources au client avant même que celui-ci ne les demande, anticipant les besoins du client.

HTTP/2 est un protocole binaire, plus complexe à analyser manuellement qu'HTTP/1.1, mais beaucoup plus efficace en termes de performances. Il a rapidement été adopté par les principaux navigateurs web et les fournisseurs de contenu.

Les futures versions, comme HTTP/3, continuent d'explorer de nouvelles approches pour optimiser la communication web.

Fonctionnement de HTTP

Rappel sur TCP/IP

Avant de plonger dans HTTP, il est important de comprendre sa base : TCP/IP. TCP/IP est une suite de protocoles qui régit la communication sur Internet. HTTP, lui, s'appuie sur TCP pour établir une connexion fiable entre le client et le serveur.

  • IP (Internet Protocol) : responsable de l'adressage et du routage des paquets de données.
  • TCP (Transmission Control Protocol) : assure une transmission fiable des données, avec vérification d'erreurs et réassemblage des paquets dans l'ordre correct. HTTP utilise TCP car il a besoin de garantir que les données arrivent intégralement et dans l'ordre.

En bref, HTTP "parle" à travers TCP/IP. TCP/IP gère le transport des données, HTTP gère le sens de ces données.

Format d'un message HTTP (Requête ou Réponse)

Un message HTTP (que ce soit une requête ou une réponse) est un bloc de texte brut structuré. Il comprend les éléments suivants, séparés par des lignes vides :

  1. ligne de début :

    • Pour une requête : MÉTHODE URI Version (ex: GET /index.html HTTP/1.1)
    • Pour une réponse : Version CodeStatut Phrase (ex: HTTP/1.1 200 OK)
  2. en-têtes (Headers) : une série de paires clé-valeur, chacune sur une ligne distincte, séparées par un deux-points (:). Les en-têtes fournissent des métadonnées sur le message. Exemple:

    Content-Type: text/html
    Content-Length: 1234
    User-Agent: Mozilla/5.0
    
  3. ligne vide : sépare les en-têtes du corps du message.

  4. Corps (Body) : optionnel, contient les données réelles de la requête (ex: données de formulaire POST) ou de la réponse (ex: code HTML).


Programme

  • SNT : thème Internet
  • NSI 1ère : intéraction client/serveur, requêtes HTTP, réponses du serveur