Le protocole HTTP

LE PROTOCOLE HTTP.

 

Le protocole HTTP.

Ce protocole définit comment un navigateur envoie une requête à un serveur Web. La requête est envoyée sous forme ASCII, elle peut contenir trois parties dont seule la première (partie en-tête) est obligatoire. Cette partie en-tête contient au moins :

  • La méthode utilisée
  • L'URL recherchée
  • Le protocole utilisé

Exemple.

GET /bonjour.htm HTTP/1.0

remarque : /bonjour est l'adresse relative

A réception de cette requête, le serveur retourne le contenu du fichier précédé par une en-tête de document :

On peut mettre en évidence cet échange avec Telnet.

Telnet est un protocole qui permet d'interroger directement le serveur. Dans l'environnement Windows, une application telnet.exe émule un terminal basé sur ce protocole.

 

fig 1 En utilisant Telnet, et après connexion ( nom du serveur + port )

On remarque que la connexion est immédiatement terminée après l'envoie du document. Nous sommes en mode "déconnecté".

Une fois reçue cette réponse du serveur, le navigateur de l'émetteur de la requête se chargera d'interpréter les balises html et d'afficher :

fig 2 traitement par le navigateur ( interpréteur HTML ) de la réponse du serveur

D'autres requêtes peuvent être envoyées:

  • POST pour l'envoie de paramètres
  • HEAD demande d'information sur un document
  • PUT, DELETE...

Exemple : requête HEAD

fig 3 résultat d'une requête HEAD

Le serveur peut renvoyer un numéro d'erreur parmi les classes d'erreur :

  • 2xx : succès dont 200 "OK"
  • 3xx : redirection
  • 4xx : erreur client ( 404 (!!) document inexistant
  • 5xx : erreur serveur

Envoie de données avec la méthode GET :

L'emetteur de la requête GET peut ajouter à la suite de l'URL ( après un ? ) des couples de valeurs ( nom de variable= valeur ) séparés par le caractère &

Exemple:

fig 4 méthode GET : passage de variables dans l'URL

Le serveur Web récupère ces variables, sous un format ASCII, dans sa variable d'environnement QUERY_STRING. Dans l'exemple proposé plus haut, aucun traitement particulier n'est effectué sur ces variables.

Nous verrons comment il est possible de traiter ces variables (ar exemple avec un CGI )

Cette méthode de passage de variables est largement limitée par une contrainte technique liée au nombre de caractères supporté par la variable QUERY_STRING: 256 caractères en général.

D'autre part, la sécurité des informations est limitée par la visibilité derrière l'URL des variables transmises

Envoie de données avec la méthode POST.

La technique est ici différente, les variables circulent à l'intérieur de la requête passée, après son en-tête sous la forme de couples ( <nom variable>=<valeur>)

POST /bonjour.htm HTTP/1.0

Accept : text/html

< saut de ligne >

nom=Grand

prenom=Patrice

Ici il n'y a pas limitation de taille des variables et celles-ci ne sont pas visibles dans le navigateur.

Ces variables sont récupérées par le serveur dans son entrée standard (stdin). La variable QUERY_STRING ne contient rien. La longueur des données transmises est contenue dans la variable CONTENT_LENGTH.

Nous aborderons plus en détail ces deux méthodes lors de la présentation des CGI.