jeudi 29 mai 2014

Le protocole HTTP



Le protocole HTTP

HTTP  (HyperText Transfer Protocol) est un protocole de communication conçu pour formuler des demandes à un serveur web et transférer et recevoir le contenu des pages web. Il fonctionne usuellement grâce à TCP/IP, un protocole réseau de plus bas niveau. Nous sommes habitués en tant qu’internautes  lire le fameux préfixe http:// dans la barre d’adresse du navigateur, mais il est plus rare de s’intéresser à son fonctionnement. De nos jour, les questions de performance et d’optimisation à l’extrême le place sur le devant de la scène. HTTP se base essentiellement sur un dialogue texte, car à l’origine les pages web sont surtout constituées de code HTML. Il a été imaginé par tim Berners-Lee en 1991, s’est vu numéroté en version 0.9 juste après la finalisation de HTTP 1.0, puis a évolué jusqu’à HTTP 1.1

Requête et réponse

La plupart du temps, les pages web sont demandées au serveur grâce aux commandes GET et POST. Il existe bien d’autres, mais elles sont utilisées plus rarement ou pour des développements spécifiques (OPTIONS, CONNECT, HEAD, TRACE, PUT, DELETE).
Chaque requête HTTP débute par une ligne contenant une commande, suivie de l’emplacement de la ressource que le navigateur souhaite obtenir, terminé par HTTP, un slash et un numéro de version.
Cette ligne peut être suivie par une pléthore d’option facultatives, ajoutées par le navigateur, occupant chacune une ligne. Elles ne se sont pas toutes normalisées et obéisse à la syntaxe champ : valeur. On les nomme en-tête HTTP, car elles définissent les modalités d’échange qui sont masquées à l’utilisateur des données qui suivent, tant en envoi qu’en réception.
Ces méta-informations véhiculées par les en-têtes HTTP peuvent concerner :
  •   Le type MIME du document servi,
  •  Le type accepté par l’agent utilisateur,
  •  Les paramètres du cache,
  •  La chaîne d’identification du navigateur,
  •  L’adresse du référant
  •  Et bien d’autres combinaisons.
Le tout est clos par une simple ligne vide et suivi par les données envoyées au serveur dans les cas d’une requête formulée par le navigateur.

Un exemple de requête HTTP

GET /imghp?hl=fr&tab=wi HTTP/1.1
Host: images.google.fr
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.9) Gecko/2009040821 Firefox/3.0.9
(.NET CLR 3.5.30729) FirePHP/0.2.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Le serveur répond de manière similaire avec en introduction le protocole, sa version et un code de retour (200 si tout s’est bien passé, et le fameux 404 si rien n’a été trouvé à l’adresse demandée). D’autres en-têtes peuvent  suivre, ainsi les données utiles délivrées par le serveur qui peuvent être de type texte (HTML, CSS, JavaScript, etc.  ) Ou du type binaire (images, vidéo, sons, etc.).

Un exemple de réponse HTTP

HTTP/1.1 200 OK
X-Powered-By: PHP/5.2.6
Set-Cookie: bbsessionhash=5dc22176091fde3ea648f61564e566dd; path=/; HttpOnly
Cache-Control: private
Pragma: private
Content-Type: text/html; charset=ISO-8859-1
Content-Encoding: gzip
Content-Length: 58840
Date: Fri, 24 Apr 2009 15:05:08 GMT
Server: Apache

Quelques en-têtes HTTP détaillés

En-tête
Usage
Date
Date et heure de formulation de la requête.
Host
Domaine interrogé (permet d’héberger plusieurs noms de domaine sur le même serveur avec la même adresse IP).
Server
Non du serveur
Content-Type
Type MIME de la ressource envoyée par le serveur
Content-Length
Longueur des données envoyées ou reçues dans la partie utile suivant les en-entêtes (en octets).
Cache-control
Encodage de caractères acceptés

Les codes de retour font partir des cinq familles se distinguant sur le chiffre des centaines :
§          1xx : Information
§          2xx : Succès
§          3xx : Redirection
§          4xx : Erreur du client http
§         5xx : Erreur du serveur

Quelques codes détaillés

Code
Signification
Explication
200
OK
Succès
301
Permanently Redirect
Ressource déplacé de façon permanente à une autre adresse
302
Found
Ressource déplacée de façon temporaire à une autre adresse
304
Not modified
Ressouce non modifiée depuis la dernière requête
403
Forbidden
Identification refusée
404
Not found
Ressource non trouvée
410
Gone
Ressource absente, sans adresse de redirection connue
500
Internal server error
Erreur interne au serveur
503
Service unavailable
Serveur temporairement indisponible

Les messages et requêtes HTTP transitant par le navigateur peuvent être analysé relativement facilement grâce aux extensions, par exemple dans l’onglet réseau de Fierbug (pour Firefox) et network des outils de développement (pour Google Chrome).
Quant à HTTPS, une déclinaison fonctionnant avec les protocoles de chiffrement SSI et TLS, on la retrouve surtout dans la conception d’espaces utilisateurs avec  identification sécurisée, et pour les procédures nécessitant de la confidentialité telles que les paiements sur les sites d’e-commerce.

Aucun commentaire:

Enregistrer un commentaire