Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

HTTP: Passé, présent et futur du protocole du web

Par Antoine LANGE Publié le 06/07/2015 à 11:15:13 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Introduction

Depuis le mois de février 2015, L’Internet Engineering Task Force (IETF) a terminé et finalisé la nouvelle version du protocole de communication HTTP, qui sera donc le futur successeur de la version 1.0 et 1.1. Cette évolution est l’une des plus importantes pour l’internet pour cette année et le futur.

HTTP quésaco ?

L’acronyme HTTP, signifie « Hypertext Transfer Protocol » et donc littéralement en français « Protocole de transfert hypertexte », il s’agit en quelque sorte de la colonne vertébrale de tout l’internet. C’est un protocole de type client-serveur développé pour le web, il appartient à la couche Application du modèle OSI et il utilise par défaut le port 80. Les clients qui utilisent ce protocole sont les navigateurs Web que nous utilisons tous les jours (Google Chrome, Safari, Internet Explorer, Mozilla Firefox…). Ces navigateurs nous permettent donc d’accéder aux données stockées sur un serveur grâce au protocole HTTP.

HTTP/1.0

A ses débuts au commencement du World Wide Web, le protocole HTTP était très simple, chaque échange s’effectuait en quatre étapes :

  • Connexion du client HTTP

  • Envoi d’une requête de méthode « GET », « POST » ou « HEAD »

  • Réponse du serveur HTTP

  • Le serveur ferme la connexion pour signaler la fin de la transaction

A l’époque, seules les requêtes GET, POST ou HEAD étaient possibles, les requêtes du type, « PUT » ou encore « DELETE » n’existaient pas. Le HTTP/1.0 prévoyait aussi l’utilisation d’en-têtes dans les requêtes.

Une requête HTTP/1.0 présentait le format suivant :

  1. Ligne de commande (Commande, URL, Version de protocole)

  2. En-tête de requête

  3. [Ligne vide]

  4. Corps de requête

Une réponse HTTP/1.0 présentait le format suivant :

  1. Ligne de statut (Version, Code-réponse, Texte-réponse)

  2. En-tête de réponse

  3. [Ligne vide]

  4. Corps de réponse

Exemple de requête HTTP/1.0 :

GET /campus.html HTTP/1.0

Host: supinfo.com

Referer: https://supinfo.com/

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36

Host permet de préciser le nom de domaine site web concerné par la requête, nécessaire pour effectuer des requêtes sur un serveur hébergeant plusieurs sites sur une même adresse IP. C’est le seul en-tête indispensable.

Referer permet au client d'indiquer, à l'usage du serveur, l'adresse (URI) de la ressource a été trouvée.

User-Agent indique le client web utilisé. Il est différent pour chaque modèle et version de navigateur.

Exemple de réponse HTTP/1.0 :

HTTP/1.0 200 OK

Date: Tue, 31 Jun 2015 18:32:25 GMT

Server: Apache/2.2

Content-Type: text/html

Content-Length: 992

Expires: Mon, 01 Jul 2015 00:32:25 GMT

Last-modified: Fri, 09 Aug 2014 12:33:58 GMT

La première ligne fournie le code de retour HTTP.

Petit rappel des codes de retour les plus souvent rencontrés :

  • 200 OK : Requête traitée avec succès

  • 400 Bad Request : Syntaxe de requête éronnée

  • 403 Forbidden : Le serveur a compris la requête, mais refuse de l'exécuter

  • 404 Not Found : Ressource non trouvée

  • 408 Request Time-out : Temps d’attente d’une réponse du serveur écoulé

  • 500 Internal Server Error : Erreur interne du serveur

Date affiche le moment auquel la réponse est générée sous un format datetime.

Server indique le modèle et la version du serveur HTTP répondant à la requête.

Content-type indique le type MIME de la ressource retournée.

Content-length indique la taille en octet de la ressource retournée.

Expires indique le moment où la ressource doit être considérée comme obsolète. Elle permet aux navigateurs de définir jusqu’à quand garder une ressource en cache.

Last-Modified indique la date de la dernière modification de la ressource demandée.

HTTP/1.1 : Un protocole utilisé aujourd’hui datant de plus de 15 ans

La principale différence de HTTP/1.1 avec la version 1.0 est une meilleure gestion de la mémoire cache ainsi que l’introduction de la technique du « pipelining ». Le problème de la version 1.0 du protocole HTTP est qu’il crée une connexion TCP pour chaque objet. Le standard HTTP/1.1 a été conçu pour résoudre ce problème en utilisant une même connexion pour plusieurs objets grâce au pipelining. Cette technique utilise le principe de connexion persistante (notamment par l'emploi de l'en-tête Connection: Keep-Alive).

Comme vous l’avez vu précédemment, lorsque le client envoie une requête HTTP au serveur, celui-ci inclut dans sa réponse la version du protocole HTTP utilisée. Si les deux extrémités utilisent HTTP/1.1, le pipelining envoie plusieurs requêtes à la suite sans attendre leurs résultats et le serveur HTTP a l’obligation de renvoyer les réponses exactement dans le même ordre que les requêtes.

Ainsi, en ouvrant et fermant beaucoup moins de connexions TCP, les clients, serveurs et routeurs économisent du temps de calcul CPU et de la mémoire. De plus, la congestion du réseau est réduite par la diminution du nombre de paquets de connexions TCP. Enfin la latence est réduite car on ne perd pas le temps dû à l’initialisation de la connexion TCP.

HTTP/1.1 permet aussi l’ajout de nouveaux en-têtes qui sont Connection, Accept, Accept-charset, Accept-Language, Transfer-Encoding, Trailer et TE.

Les problèmes avec HTTP/1.x

Les origines de HTTP/2 remontent à 2009 avec le développement chez Google du SPDY (pour speedy, rapide), un protocole réseau qui devait rendre Internet, selon le géant de l'internet, au moins deux fois plus rapide. En 2012, le développement du HTTP/2 commence et se base sur ce protocole. De nos jours, les navigateurs Chrome et Firefox ou les plateformes Youtube et Facebook utilisent la technologie SPDY.

En effet, Google avait développé le nouveau protocole pour solutionner des problèmes de performance avec les premières versions du protocole HTTP. Le principal problème avec le HTTP/1 est qu’il utilisait plusieurs connexions pour charger les différentes ressources les unes après les autres comme nous l’avons vu ci-dessus (Le CSS, le JavaScript, les images…), provoquant des latences considérables. De plus, si un des éléments échouait pendant le chargement de la page, alors les autres pouvaient attendre éternellement, ce qui provoquait un problème connu des pages qui chargent à l’infini.

Par la suite, la plupart des connexions HTTP/1.x demandaient une requête sur un seul objet. Ce sont les navigateurs qui devaient faire le traitement parallèlement, mais cela demandait plusieurs connexions sur chaque serveur. Cela générait des ressources réseaux additionnelles et le temps de chargement était accru puisque chaque connexion individuelle nécessitait plusieurs transferts entre le client et le serveur.

Les solutions de HTTP/2

Le nouveau protocole HTTP/2 résout immédiatement ce problème. Dans cette seconde version du protocole HTTP, les multiples flux bidirectionnels sont multiplexés sur une seule et même connexion TCP. Chaque flux peut transporter un ensemble requête/réponse et peut consommer plusieurs requêtes d’un même serveur en utilisant des flux multiples. De plus, les flux restent toujours indépendants et cela signifie que si l’un des flux devient lent pour une raison quelconque, cela n’empêche pas les autres flux de continuer le chargement.

Par surcroit, un client web peut demander une ressource assez lourde et une plus légère, et la réponse pour la ressource plus légère peut être donnée avant ou même pendant la réponse du composant plus lourd. En revanche cette norme exige que les clients et les serveurs supportent au moins 100 flux différents sur une seule connexion.

Le HTTP/2 propose aussi des améliorations sur la performance et la stabilité. Le HTTP/1.x était un protocole basé sur du texte. Le HTTP/2 est conçu sur du binaire qui peut fractionner les requêtes et réponses sur des environnements non lisibles par les humains et qui sont transmis sur une connexion TCP. Le nouveau protocole permet également aux serveurs de fournir des flux aux clients, même sans aucune demande de ces derniers.

Malgré que le HTTP/2 soit un protocole binaire, il n'altère pas le concept de base de la connexion HTTP. Les requêtes et réponses sont toujours formées de la même manière, comprenant des en-têtes et un corps. Ces en-têtes fournissent les métadonnées importantes pour le corps, mais maintenant de façon plus efficace. Le HTTP/2 s’inspire du SPDY de Google qui utilisait la compression Gzip (acronyme de GNU zip) pour les en-têtes dans les deux directions. Mais en 2012, une faille de sécurité fut détectée dans le format de compression Gzip, permettant entre autre de lancer une attaque sous le nom de CRIME. SPDY a donc arrêté d’utiliser Gzip tandis que le HTTP/2 a créé sa propre norme se nommant HPACK.

Le HPACK

Le HPACK est une manière de compresser les en-têtes HTTP sur les connexions HTTP/2 tout en évitant la faille d’exploitation CRIME. A l'inverse de Gzip qui est un algorithme de compression général, HPACK est conçu précisément pour les besoins du HTTP/2. Depuis, Google a annoncé l’abandon du SPDY. Les dernières versions des navigateurs web Google Chrome et Mozilla Firefox ont déjà adopté le nouveau protocole et HTTP/2 demeure également un objectif pour Internet Explorer.

Et pour la sécurité ?

C’est sur ce point-là que les choses se complexifient. A l’origine, le chiffrement obligatoire des données trasférées devait être incorporé automatiquement (HTTPS) mais malheureusement ce point a été abandonné. Toutefois, certains fournisseurs ont déclaré qu’ils allaient implémenter de fait le TLS pour avoir une meilleure sécurité. Cela entraîne donc un conflit avec la nouvelle orientation des navigateurs Chrome et Firefox qui vont bientôt évoluer vers un 100 % sécurisé. Les futurs sites, qui voudront utiliser le HTTP/2 et s’afficher sous Chrome et Firefox, devront crypter leurs données.

Un bel engagement pour l’internaute qui pourra naviguer plus rapidement à sa plus grande joie. Et cerise sur le gâteau, il n’aura rien à faire, son navigateur préféré devra seulement être à jour pour profiter des améliorations du nouveau protocole HTTP/2.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels