Voir rapidement les headers d’une reponse HTTP d’un serveur web peut s’avérer très pratique, pour cela, une réponse rapide : telnet.
Le protocole HTTP répond à la RFC 2616 du W3C.
Telnet
Pour se connecter à un serveur, faire la ligne de commande suivante :
> telnet serveur num_port
par exemple :
%> telnet www.voila.fr 80
Une fois connecté, on va demander un document. On va utiliser la méthode GET. Par exemple sur la racine du site (ie / ) :
GET / HTTP/1.0 <CRLF><CRLF>
Il est important de préciser le protocole que l’on va utiliser après le document demandé (ici on demande du HTTP/1.0, ca aurait pu être du HTTP/1.1).
Il est primordial de placer 2 <CRLF> (ie des retours à la ligne) après la commande GET, pour signaler au serveur que la commande est complète.
On peut construire des requêtes plus compliquées, en enchainant les Headers, par exemple :
GET / index.html HTTP/1.0 <CRLF>Accept : text/html, image/gif <CRLF> User-Agent : Mozilla/4.0 (compatible ; MSIE 4.0 ; Linux X11 2.2.17) <CRLF><CRLF>
Autorisation
Les méthodes d’autorisation pour accéder à certaines zone d’un serveur HTTP répondent à la RFC 2617 du W3C.
Lorsqu’une zone du serveur est protégée par cette méthode, la demande d’un document de cette zone renvoie une réponse comme suit :
HTTP/1.0 401 Authorization RequiredDate: Wed, 23 Jan 2002 15:12:30 GMT Server: Apache/1.3.20 (Unix) (Red-Hat/Linux) ApacheJServ/1.1.1 mod_ssl/2.8.4 OpenSSL/0.9.6 WWW-Authenticate: BASIC realm="RealmName" Content-Type: text/html X-MTracker-Version: v4.0 build 49.5 Expires: Thu, 01 Jan 1970 00:00:00 GMT Last-Modified: Wed, 23 Jan 2002 15:12:30 GMT Cache-Control: no-cache must-revalidate Pragma: no-cache
Le Header important est WWW-Authenticate. Si l’utilisateur n’est pas déjà authentifié pour le Realm “RealmName“, une fenêtre pop-up apparaitra et demandera le login/password de l’utilisateur.
Autorisation et Telnet
Pour s’authentifier en utilisant Telnet sur un serveur HTTP avec l’autorisation ’Basic’, il faut ajouter un Header “Authorization”, suivi d’une chaine encodée BASE64 composée du login et du password. La structure de cette chaine est :
login:password
Si l’on veut s’identifier comme l’utilisateur marc qui a le password antoine, on obtient l’encodage BASE64 suivant : bWFyYzphbnRvaW5l [1].
La requête à construire pourra donc être :
GET /servlet/protected/content/ HTTP/1.0 <CRLF> Authorization: Basic bWFyYzphbnRvaW5l <CRLF><CRLF>
Note : Attention à écrire Basic et non BASIC !
[1] obtenu grâce à la commande perl suivante : %> perl -MMIME::Base64 -e ‘print encode_base64(“marc:antoine”)’