Le protocole HTTP, (Hypertext Transfer Protocol), est un protocole de communication utilisé sur Internet pour transférer des données entre un client (généralement un navigateur web) et un serveur web. Il a été conçu par Tim Berners Lee dans les années 1990 lorsqu’il travaillait au CERN. A ce moment, Tim Berners Lee travaillait également sur le langage HTML pour permettre la création de documents hypertextes. Ce protocole a connu plusieurs évolutions.
Le protocole HTTP fonctionne en utilisant des en-têtes qui décrivent les métadonnées d’un message HTTP échangé entre un client et un serveur. Ces en têtes sont basés sur un codage de type MIME (Multipurpose Internet Mail Extensions). Bien que le format principal des données transférées soit généralement du HTML, HTTP peut être utilisé pour transmettre divers types de médias, tels que des images, des vidéos, et même des données envoyées depuis des formulaires web.
Lorsqu’un utilisateur effectue une action, comme la saisie d’une URL dans la barre d’adresse ou le clic sur un lien, cette action est convertie en une requête HTTP envoyée au serveur. Le serveur renvoie au client une réponse HTTP. Ces requêtes et réponses fournissent des instructions pour initier, développer et finaliser la transmission d’informations, mais aussi déclencher l’exécution de ressources spécifiques stockées sur le serveur. C’est ce que l’on appelle le schéma “requête-réponse”.
Un aspect important du protocole HTTP est son caractère « sans état ». Cela signifie que chaque requête est traitée de manière indépendante, sans que le serveur ne conserve d’informations sur les connexions précédentes de l’utilisateur. Cependant, dans le développement d’applications web, il est souvent nécessaire de maintenir un certain état, par exemple pour suivre l’activité de l’utilisateur ou pour conserver des informations entre différentes requêtes. Pour cela, les applications web utilisent des cookies, qui sont des données stockées sur le système de l’utilisateur. Ces cookies permettent aux serveurs de suivre les utilisateurs et de maintenir un état entre les différentes interactions en ligne, car ils peuvent être conservés sur le client pendant une période définie.
Il n’y avait initialement aucune numérotation de version définie pour la première version du protocole HTTP, bien que cette version soit nommée aujourd’hui 0.9. La première version est aussi nommée « protocole une ligne », car elle permettait de solliciter une page HTML à travers une requête en une ligne, à l’aide de la commande GET.
En 1996, HTTP/1.0 voit son apparition lorsque l’Internet Engineering Task Force publia la première RFC officielle décrivant le protocole HTTP : RFC 1945. La notion d’entête HTTP a été introduite pour les requêtes et les réponses, permettant ainsi la transmission de métadonnées. Grâce à ces en-têtes HTTP améliorés, il est possible de transférer des types de données autres que des fichiers HTML, en utilisant notamment l’en-tête Content-Type. Chaque échange d’objet entre un client et un serveur nécessite la création d’une nouvelle connexion TCP, HTTP/1.0 est donc un stateless protocole.
Ensuite, en 1997 HTTP/1.1 a vu le jour avec diverses améliorations comme la mise en place de mécanismes de mise en cache, mais aussi le maintient des connexions actives au-delà d’une unique requête, à l’aide d’un signal keepalive. Grâce à ce mécanisme, la même connexion est réutilisée pour plusieurs requêtes.
Enfin, en 2015 le protocole HTTP/2 a été introduit par Google et porte le nom de SPDY. Il est aujourd’hui largement adopté sur la plupart des sites Internet. Cette nouvelle version se concentre essentiellement sur l’amélioration des performances, en compressant notamment les entêtes. Le multiplexage aide à ce que toutes les ressources nécessaires à l’affichage d’une page sont téléchargées en une seule requête.
Une requête HTTP est une instruction sur plusieurs lignes envoyée d’un client vers un serveur web. Elle comprend :
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Connection: keep-alive
Corps de la requête (vide dans le cas d'une requête GET)
La composition d’une réponse HTTP est sensiblement la même qu’une requête, on a sur la première ligne la version du protocole HTTP et le code de réponse. Un en tête qui contient des informations (date d’envoi de la réponse, informations sur le serveur, sur la connexion, mise en place des cookies…). Certaines réponses contiennent aussi un corps qui va permettre de transmettre la ressource demandée par la requête.
HTTP/1.1 200 OK
Date: Tue, 11 Oct 2023 10:00:00 GMT
Server: Apache/2.4.41
Content-Type: text/html
Content-Length: 1234
Corps de la réponse (contenu de la page web)
HTTP fonctionne avec des méthodes de requête pour préciser l’action que l’on veut réaliser sur la ressource au moment où un client lace une requête au serveur. La liste des requêtes :
Il existe d’autres types de méthodes, mais peu couramment utilisées :
Le protocole HTTPS est une extension sécurisée du protocole HTTP qui crypte les informations transmises du client vers le serveur, elles ne peuvent donc pas être espionnées ou modifiées. Sur près de 3 sites sur 4, la version du protocole HTTP est la version sécurisée. Cette version se base sur les protocoles TLS pour chiffrer les échanges entre le client et le serveur. Pour cela, il n’y a qu’à installer un certificat SSL sur le nom de domaine.
Les codes de réponse HTTP sont des codes numériques envoyés par un serveur Web en réponse à une requête effectuée par un utilisateur depuis un navigateur Web ou un autre client. Ces codes concernent les réponses serveur, les redirections… Ils sont conçus pour indiquer le statut de la réponse à la requête. Ces codes permettent de diagnostiquer les problèmes éventuels lors de l’interaction entre les clients (navigateurs, applications) et les serveurs Web. Tous les codes de réponse ne sont pas nécessairement visibles par l’utilisateur à travers le navigateur ou l’application. Certains codes sont visibles depuis un client FTP lorsqu’il y a une erreur ou un succès de connexion au serveur, d’autres depuis le navigateur lorsque l’accès à un répertoire sensible est protégé ou qu’une ressource est introuvable. Ces codes permettent de solutionner rapidement certains problèmes d’accès et être en mesure de comprendre la présence de redirections. Voici une liste non exhaustive des codes de réponses les plus communs :
Pour ce type de code, il n’y en a qu’un :
Ces codes de réponse sont relatifs aux redirections effectuées d’une adresse URL à une autre, en règle générale, ils sont gérés coté serveur directement ou coté CMS si ce dernier le permet. Ces directives de redirection sont ensuite transmises au fichier de configuration du répertoire du site. Il existe deux types de redirection (temporaire ou permanente) :