Modifier les entêtes HTTP

«« précédent suivant »»


Cet article vous présente quelques notions basiques sur les entêtes HTTP, leur rôle, les informations qu'elles fournissent et comment les modifier pendant que vous visitez un site web.

Hypertext Transfer Protocol, plus connu sous l'abréviation HTTP est un des protocole de communication client-serveur développé pour le World Wide Web. C'est le protocole utilisé lorsqu'on parle de web.

Les commandes HTTP

GET : Cette méthode est utilisée pour appeler une page via la barre d'adresse.

HEAD : Cette méthode concerne l'entête et ne renvoie pas la ressource en elle-même. C'est ce que nous allons analyser plus bas.

POST : On l'utilise pour envoyer un formulaire par exemple.

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 effectuer un diagnostic sur la connexion.

PUT : Plus utilisé par FTP, cette méthode permet d'ajouter une ressource sur le serveur.

DELETE : Cette méthode permet de supprimer une ressource du serveur.

Pour placer ou supprimer un fichier sur un serveur, il faut évidemment un accés sur la machine.


Rôle
Le rôle des entêtes HTTP est de définir quelques modalités entre le client et le serveur. Lorsque vous demandez une page, vous envoyez des informations au serveur :

GET http://www.wulab.com/
Host: www.wulab.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: fr-fr,en-us;q=0.7,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 également :

HTTP/1.x 200 OK
Date: Thu, 03 Aug 2006 08:31:59 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/5.1.4
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 3133



Votre navigateur obtient ainsi une série d'informations sur le serveur et sur le résultat de la requête.

Logiciels
Afin d'analyser vos entêtes HTTP ou de les modifier, vous aurez besoin de quelques outils. Vous pouvez également le faire en ligne de commandes, mais c'est moins attractif.
Un ancien outil : HKIT permet de modifier ces entêtes sur Internet Explorer. Nous en utiliserons ici un autre, bien plus adapté et plus efficace.
C'est en fait une extension pour Mozilla Firefox : Live HTTP Headers qui permet de modifier les en-têtes à la volée.



Exemple d'utilisation
Cette extension peut servir à beaucoup de choses suivant la façon dont on l'utilise. Dans cet exemple, je m'en suis servi pour analyser et corriger un défaut de programmation :
Aprés avoir créé un flux rss, je m'aperçois que Firefox ne m'affiche pas l'arbre xml mais directement le texte sans mis en forme. Aprés vérification, l'arbre xml est valide et aucune erreur n'est à déplorer de ce coté. Un test avec IE m'affiche correctement l'arbre xml...
Je vérifie donc les entêtes que me renvoie mon serveur.
Et en effet, il m'affiche un Content-Type: text/html
En modifiant mon script j'envoie directement une information dans l'entête :
header("Content-type: application/xml")
Le serveur me renvoie maintenant correctement le flux rss sous forme d'arbre xml, ce qui se vérifie par la réponse du serveur : Content-Type: application/xml

Dans cette illustration, Live HTTP Headers permet d'identifier un problème et de le corriger mais il peut faire beaucoup plus comme modifier à la volée l'entête d'une requête.
Vous pouvez par exemple faire un test de sécurité de votre blog ou site web, un peu à l'image du fuzzing et ainsi vérifier que vos scripts répondent efficacement aux différentes requêtes. Les applications sont nombreuses (émulation de cookie, de user agent, de referer...).


Cette article a été publiée le 02 août 2006.