Le protocole HTTP (Hypertext Transfer Protocol) : versions et fonctionnement

HTTP (Hypertext Transfer Protocol) est le protocole applicatif utilisé pour l'échange de données du World Wide Web.
En d'autre terme, c'est le protocole qui permet pour la diffusion de pages WEB et le fonctionnement des sites internet.

Enfin HTTP a connu des évolutions et versions au fil du temps qui apportent des améliorations et nouvelles fonctionnalités.

Cet article vous dit tout sur les versions du protocole HTTP et son fonctionnement.

Le protocole HTTP (Hypertext Transfer Protocol) : versions et fonctionnement

Qu'est-ce que HTTP ?

C'est le protocole de la couche applicatif comme, par exemple FTP (File Transfert Protocol) ou DNS (Domain Name System).
HTTP lui permet le fonctionnement des sites internet ou sites WEB.

Son fonctionnement est relativement simple.
D'un côté, un serveur WEB écoute sur le port réseau 80 ou 443 pour la version chiffrée puis un client se connecte à ce dernier.
La communication se fait alors au travers du protocole HTTP pour échanger les données et faire en sorte que le serveur WEB délivre le contenu WEB au client.
Cet échange de données se fait à travers des méthodes HTTP.
Enfin vous l'aurez compris, c'est un protocole client/serveur.

HTTP est développé conjointement par Internet Engineering Task Force (IETF) et the World Wide Web Consortium (W3C).
Ainsi diverses versions sont apparues et la dernière est la version 3.

Les versions de HTTP

Voici les dates de publication des spécifications de HTTP :

AnnéeVersion de HTTP
19910.9
19961.0
19971.1
20152.0
20183.0
Les versions de HTTP

HTTP/1.1

Dans HTTP/1.0, une nouvelle connexion TCP est créée pour chaque échange de demande et réponse entre les clients et les serveurs.
Ainsi toutes les demandes encourent une pénalité de latence car les prises de contact TCP et TLS sont terminées avant chaque demande.

La révision HTTP/1.1 de la spécification HTTP a tenté de résoudre ces problèmes quelques années plus tard en introduisant le concept de connexions «keep-alive».
Cela permet aux clients de réutiliser les connexions TCP, et donc d'amortir le coût de l'établissement de la connexion initiale et de ralentir commencez par plusieurs demandes.
Mais ce n'était pas une solution miracle: alors que plusieurs demandes pouvaient partager la même connexion, elles devaient toujours être sérialisées l'une après l'autre.
Ainsi un client et un serveur ne pouvaient exécuter qu'un seul échange de demande et réponse à un moment donné pour chaque connexion.

HTTP/2

HTTP/2 vise à corriger les limitations de la version 1.1 et ainsi améliorer les temps de réponse de chargement des pages.
C'était d'autant plus nécessaires que les sites WEB sont devenus plus lourd avec le CSS, images et JavaScript.
Cela notamment à travers le protocole SPDY.

SPDY était un protocole expérimental, développé chez Google et annoncé à la mi-2009, dont l'objectif principal était d'essayer de réduire la latence de charge des pages Web en abordant certaines des limitations de performances bien connues de HTTP / 1.1.

Les spécifications de la version 2 du protocole HTTP ont commencé en 2009 pour se terminer en 2015.

Voici les améliorations apportées :

  • Compression des en-têtes HTTP
  • HTTP / 2 Serveur Push : cela permet de charger des ressources de manière préventives
  • pipeline des demandes et le multiplexage de plusieurs requêtes sur une seule connexion TCP. HTTP/2 permet d'envoyer plusieurs stream dans une même connexion TCP.
  • correction du problème de blocage de tête de ligne dans HTTP 1.x

Ainsi, HTTP/2 réduit le nombre de connexion TCP à une seule ce qui réduit le temps de chargement d'une page internet.

Schéma connexion HTTP/1 vs HTTP/2
source https://blog.cloudflare.com/http3-the-past-present-and-future/

Enfin HTTP/2 apporte aussi la sécurité à travers Transport Layer Security (TLS) ce qui permet la mise en ligne de site WEB dit sécurisés :

HTTP/3

HTTP/3 tente aussi d'améliorer la vitesse de chargement des pages WEB à travers le protocole QUIC.

Quic est un protocole de transport développé par Google.
Ce dernier nommé au départ HTTP-over-QUIC a ensuite donné naissance à HTTP/3.
Une des particularités est qu'il utilise le protocole de transport UDP.
Ce dernier étant plus rapide que TCP.

Ainsi, le mode de connexion est totalement revu.
En HTTP/2, trois connexion successivement s'effectue :

L'établissement de la connexion HTTP/2 + TLS
source https://blog.cloudflare.com/http3-the-past-present-and-future/

Avec HTTP/3 on obtient ceci :

  • La connexion TCP et TLS sont remplacés par le protocole QUIC
  • Puis on retrouve le protocole applicatif HTTP

On voit donc que le nombre d'aller/retour est réduit pour une connexion WEB plus rapide.

L'établissement de la connexion HTTP/3
source https://blog.cloudflare.com/http3-the-past-present-and-future/

Le fonctionnement du protocole HTTP

On a donc d'un côté le client WEB et de l'autre le serveur WEB.
Mais comme ces derniers communiquent ?
A travers le protocole standard de communication reste HTTP.

Les méthodes HTTP

Dans le protocole HTTP, la communication entre le client et le serveur se base sur un ensemble de méthode.
Lors d'une requête HTTP par le navigateur WEB, ce dernier indique la méthode à utiliser dans l'en-tête.

Il en existe beaucoup mais voici les trois principales :

  • DELETE supprime la ressource spécifiée
  • GET : on demande une ressource au serveur WEB. En général, il s'agit du contenu d'une page WEB
  • HEAD : On demande QUE le contenu d'une en-tête HTTP
  • PUT est utilisé pour envoyer des données à un serveur pour créer / mettre à jour une ressource
  • OPTIONS décrit les options de communication pour la ressource cible
  • POST : permet d'insérer ou mettre à jour une donnée
HTTP GET VS POST : les différences
https://codenuclear.com/difference-between-get-post/

Exemple d'une requête HTTP :

Exemple de requête HTTP
source : https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview

Le site de Mozilla donne les définitions de tout les méthodes HTTP : Méthodes de requête HTTP

Le contenu d'une requête HTTP

Voici quelques informations concernant ce dernier.
Ce protocole régit les échanges entre le serveur WEB et le navigateur internet.

Voici le contenu d'une requête HTTP.

  • A gauche, la couche a transport.
  • A droite, le contenu d'une requête HTTP.
Une requête HTTP lors d'une connexion à un site internet
source : https://developers.google.com/web/fundamentals/performance/http2/

Celle-ci se divise en deux parties :

  • L'en-tête HTTP ou HTTP Header avec des données sur la méthode, l'host et la longueur du contenu.
  • Les données ou Data. En général, le contenu en langage de programmation de la page WEB (HTML, CSS, JavaScript, etc).

Ci-dessous un exemple de requête HTTP en retour par le serveur WEB.

Le header ou en-tête HTTP

Comprenez que ce protocole HTTP s'utilise dans les deux sens.
Lorsque le client demande une page et lorsque le serveur WEB lui donne en retour.
Ainsi le client envoie une requête HTTP et le serveur WEB en réponse.

source : https://developers.google.com/web/fundamentals/performance/http2/

Header et en-tête HTTP

Ci-dessous, les deux en-tête HTTP du côté client et du côté serveur.
Par exemple, on peut voir que le client WEB, indique la méthode ici GET ainsi que le user agent.

Le header ou en-tête HTTP

Voici un exemple d'en-tête HTTP de réponse du serveur WEB.
Comme vous pouvez le constater, on trouve beaucoup d'informations.
Ainsi le serveur WEB indique notamment :

  • La version du protocole
  • La date de la requête HTTP
  • Le type de contenu, html, images, etc
  • La taille de la requête HTTP
  • Des informations sur le cache
Le header ou en-tête HTTP

Les données

Rien d’extraordinaire là dessus puisqu'il s'agit du code source de la page WEB.
C'est à dire le code que le serveur WEB envoie au client.
Lorsqu'il s'agit d'un navigateur WEB, ce dernier peut l'interpréter pour construire la page WEB à afficher à l'écran de l'utilisateur.
Le coude source mélange alors :

  • du CSS (Cascading Style Sheets) : c'est un langage de présentation des pages WEB
  • HTML (HyperText Markup Language) : c'est le langage de base pour créer une page WEB. Il fonctionne avec des balises et peut appeler des images, créer des liens hypertextes, etc. Plusieurs versions existent depuis sa création. Aujourd'hui nous sommes à la version 5
  • XHTML (Extensible HyperText Markup Language) : Il se voulait le successeur de HTML basé sur le XML
  • JavaScript et Node.js : Il s'agit d'un langage de script qui permet de créer des pages WEB interactives. A ne pas confondre avec Java
  • D'autres langages

Ci-dessous, il s'agit du code source de la page mais il peut aussi s'agir d'un fichier image, binaire ou autre.

Le code source et les données d'un site

Les erreurs HTTP

Lorsque le serveur WEB ne peut délivrer le contenu d'une ressources, il renvoie une erreur.
Par exemple, la page demandée n'existe pas ou vous n'y êtes pas autorisé.

Les erreurs HTTP sont standardisées et sont numérotées.
Par exemple l'erreur 404 correspond à une ressources introuvables.
L'erreur 403 est un accès interdit, etc.

La page suivante donne la liste des erreurs HTTP :

Liens

Source CloudFlare