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.