La méthode TRACE est essentiellement utilisée à des fins de débogage. Lorsqu'on utilise cette méthode le serveur renvoie dans le corps de la réponse le contenu exact de ce qu'il a reçu du client. On se sert par exemple de cette méthode pour comprendre ce qui se passe lorsqu'on a des proxy en cascade par exemple. On voit déjà un problème: si cette information peut nous servir en phase de débogage elle peut aussi servir à une personne mal intentionnée pour obtenir des informations sur l'architecture du serveur à moindre coût.

Voici un exemple d'utilisation de TRACE:

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
TRACE / HTTP/1.1
Host: foo.bar
A: juste A
B: B rien de plus!

HTTP/1.1 200 OK
Date: Thu, 06 Jul 2006 19:18:42 GMT
Server: Apache/2.0.55 (Debian) mod_python/3.2.8 Python/2.3.5 PHP/5.1.4-0.1
Transfer-Encoding: chunked
Content-Type: message/http

43
TRACE / HTTP/1.1
Host: foo.bar
A: juste A
B: B rien de plus!


0
Connection closed by foreign host.

Ca semble anodin mais je vous laisse imaginer les informations que l'on pourrait obtenir. Il semblerait que l'on s'expose à d'autres problèmes notament de faille xss mais je n'ai pas trouvé de liens pertinants.

Quoi qu'il en soit j'ai décidé de désactiver la méthode. C'est possible dans apache 2 et dans apache 1.3 (à partir de la version 1.3.34) avec la directive TraceEnable positionnée à Off.

Si on essaie de nouveau la méthode TRACE on a un accès refusé, erreur http 403