HyperText Transfer Protocol

Vous ne vous êtes jamais demandés pourquoi vous écrivez « http:// » avant l’adresse de la plupart des sites internet ?

Quelles que soient les réponses, je vais tenter de vous expliquer çà travers cet article.

  1. Qu’est ce que HTTP ?

Si je vais sur Wikipedia , je trouve cette superbe définition :

Citation : Wikipédia

Le Hypertext Transfer Protocol, plus connu sous l’abréviation HTTP, littéralement le « protocole de transfert hypertexte », est un protocole de communication client-serveur développé pour le World Wide Web. Il est utilisé pour échanger toute sorte de données entre client HTTP et serveur HTTP.

C’est-à-dire que HTTP est une espèce de langage qui va permettre au client (vous, par le biais de votre navigateur par exemple) de communiquer avec un serveur connecté au réseau (le serveur HTTP installé sur le serveur d’un site, par exemple Apache).

Dans le schéma suivant, les flèches représentent les requêtes HTTP :

Les requêtes (les flèches du schéma) vont toujours par paires : la demande (du client) et la réponse (du serveur).
Si ce n’est pas le cas, c’est qu’un problème est survenu à un endroit du réseau.

2. Les requêtes clients

Syntaxe générale

La syntaxe de la demande (= requête client) est toujours la même :

Une requête HTTP a donc la syntaxe suivante (<crlf> signifie retour chariot ou saut de ligne) :

   METHODE  URL  VERSION HTTP <crlf>

   EN-TETE: Valeur <crlf>

   –

   –

   –

  EN-TETE: Valeur <crlf>

  Ligne vide <crlf>

  CORPS DE LA REQUETE

La méthode spécifie le type de requête, elle peut avoir les valeurs:

GET
C’est la méthode la plus courante pour demander une ressource. Une requête GET est sans effet sur la ressource, il doit être possible de répéter la requête sans effet.
HEAD
Cette méthode ne demande que des informations sur la ressource, sans demander la ressource elle-même.
POST
Cette méthode doit être utilisée lorsqu’une requête modifie la ressource.
OPTIONS
Cette méthode permet d’obtenir les options de communication d’une ressource ou du serveur en général.
CONNECT
Cette méthode permet d’utiliser un proxy comme un tunnel de communication.
TRACE
Cette méthode demande au serveur de retourner ce qu’il a reçu, dans le but de tester et d’effectuer un diagnostic sur la connexion.
PUT
Cette méthode permet d’ajouter une ressource sur le serveur.
DELETE
Cette méthode permet de supprimer une ressource du serveur.

Ensuite, vient URL, c’est-à-dire l’adresse de la page sur le serveur ; elle est du type : « /repertoire/page.ext ».
Traduction : le fichier « page.ext » dans le dossier « repertoire » qui se situe à la racine du serveur.

Le dernier élément de Ligne est la version de HTTP utilisée.

NB:  Il faut noter qu’il existe trois versions de HTTP:

  • HTTP 0.9 : Première version de HTTP, apparue en 1990, elle n’est clairement plus supportée de nos jours.
  • HTTP 1.0 : La version 1.0 a été normalisée en 1996, même si elle a commencé à être utilisée avant. Elle décrit le « vrai » Web que nous connaissons aujourd’hui.
  • HTTP 1.1: HTTP 1.1 arrive en 1999, entièrement rétro-compatible avec HTTP 1.0 : si un en-tête n’est pas compris par l’une des deux parties (client/serveur), il doit alors être ignoré.

En-têtes

Maintenant, attaquons-nous à l’en-tête : celui-ci peut contenir tout un tas de valeurs (c’est un peu le même principe que les balises <meta> en HTML), toujours présentées sous la forme :

Nom: Valeur

En voici quelques-unes :

  • Host: www.technohttp.wordpress.com
    Spécifie le nom de domaine du site, par exemple s’il y a plusieurs sites à la même adresse IP.

  • Cookie: nom-cookie=valeur cookie
    Permet d’envoyer au serveur les cookies qui ont été enregistrés. Un cookie à toujours un nom et une valeur. Pour en envoyer plusieurs, écrivez-les à la suite, séparés par un point-virgule.

  • Connection: Close|Keep-Alive
    Définit le type de connexion :

    • Close : la connexion est fermée après la réponse

    • Keep-Alive : crée une connexion persistante. Avec ce type de connexion, il est même possible d’envoyer une requête sans attendre la réponse à la précédente.

  • Content-type: application/x-www-form-urlencoded
    Spécifie le type MIME du corps de requête, il sera très utile dans le cas d’une requête POST.

  • Content-Length: 42
    Spécifie la longueur du corps de requête.

Corps

Pour terminer la requête, on envoie le corps de requête. Il peut contenir, par exemple, le contenu d’un formulaire HTML envoyé en POST.
Dans le cas du formulaire, les variables ont un nom et une valeur, comme l’en-tête Cookie, et les différentes variables sont séparées par des esperluettes : « & » (notez que les variables passées par GET sont également séparées par « & »).

 3. Les réponses

La première chose qu’un serveur doit faire lors de l’envoi de sa réponse, est de fournir de manière concise, rapide et pratique, un moyen d’informer le client du résultat du traitement de sa demande.
Le serveur utilise pour cela une ligne de statut comprenant un code de réponse qui tient sur 3 chiffres.

La réponse commence toujours par une ligne de statut qui rappelle la version de HTTP utilisée, puis un code de réponse, suivi de sa description en toutes lettres.
Suivent ensuite des en-têtes, et comme dans le cas de la requête, il peut y avoir un corps, mais pas tout le temps (cela dépendra de la requête). Une requête HEAD requiert que la réponse n’ait pas de corps, idem pour une requête de type OPTIONS.

  • Version : la version HTTP du serveur

  • Code-réponse : le code d’erreur retourné (par exemple 200, 403, 404, 500)

  • Texte-réponse : le texte associé à l’erreur (respectivement pour les exemples précédents : « OK », « FORBIDDEN », « NOT FOUND », « INTERNAL ERROR »).

En-têtes

Les en-têtes sont nombreux ici aussi, en voici quelques-uns utiles :

  • Date: Fri, 31 Dec 1999 23:59:59 GMT
    Date de génération de la réponse.

  • Server: Apache/2.2.3
    Spécifie le modèle du serveur HTTP.

  • Content-type: text/plain

  • Content-Length: 42

  • Set-Cookie: variable=valeur; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.site.com
    Demande au navigateur d’enregistrer un cookie.

Corps

Et pour finir, le Corps de réponse contient le contenu du fichier, le HTML d’une page par exemple.

4. Comment s’en servir ?

C’est bien beau tout ça, mais où dois-je taper mes requêtes HTTP ? Je dois les compiler ? Je dois les enregistrer dans un fichier ? o_O

HTTP n’est pas un langage en soit, c’est un protocole de communication, une syntaxe pour formuler des demandes et des réponses. On l’utilise via un vrai langage de programmation, le PHP ou le C, par exemple. Le langage se chargera de se connecter au serveur, d’envoyer / recevoir les requêtes et de fermer la connexion.

Pour faire des requêtes HTTP et recevoir les réponses du serveur, il faut utiliser ce qu’on appelle les sockets.

Voilà, on est au bout ; j’espère que ce tuto vous a plu et surtout, que vous avez compris certaines choses.
Normalement, maintenant, vous êtes parés pour faire un navigateur :p , en C par exemple, à l’aide des sockets.

Publié dans Non classé | Tagué | Laisser un commentaire