Professional Documents
Culture Documents
Protocole parmi les plus courants, le protocole HTTP est trs souvent mconnu pour ne pas dire inconnu des webmasters et des dveloppeurs d'applications Web en gnral. Ce tutoriel vous aidera acqurir les connaissances de base (ainsi que certaines autres plus avances) concernant ce protocole.
Notes Remerciements Introduction I - Gnralits I-A - Prsentation I-B - Structure I-C - Caractres Interdits ou Rservs I-D - L'URL-Encoding II - Les Requtes HTTP II-A - La ligne d'Introduction La Mthode La Page La Version Les Mthodes II-B - Les en-ttes de requte II-C - Le corps de la requte III - Les Rponses HTTP III-A - La ligne d'Introduction Informations : les 1xx Succs : les 2xx Redirection : les 3xx Requte Invalide : les 4xx Erreur Serveur : les 5xx D'autres codes status III-B - Les en-ttes de rponse IV - Divers IV-A - Le cache : qu'est-ce que c'est ? IV-B - Et PHP/ASP/JSP/les CGI dans tout a ? IV-C - Et (D)(X)HTML/JavaScript/ActiveX dans tout a ? IV-D - Une connexion = Un change ? IV-E - Les cookies : le clignotant du Web ? IV-F - Voir le protocole HTTP IV-G - Voir aussi
-2Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
Notes Remerciements
Merci Yogui et neguib pour leurs relectures et leurs conseils.
Introduction
Cet article prsente le protocole HTTP (HyperText Transfert Protocole) d'une manire simple et, normalement, comprhensible pour n'importe qui ayant un minimum de connaissances en matire de Thorie des Rseaux Informatiques (notamment la structure client/serveur, changes binaires/changes textes, ...). Sur l'Internet, de nombreux protocoles sont utiliss. Le protocole HTTP est l'un des plus courants. C'est notamment celui qui est utilis pour la navigation sur les sites Web. Par exemple, si vous lisez actuellement la version en ligne de cet article, votre navigateur a eu recours au protocole HTTP pour rcuprer la page Web, les diffrentes images, feuilles de styles, etc. Ce protocole est relativement simple dans sa forme et ses utilisations fondamentales devraient tre connues de tous les dveloppeurs Web.
-3Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
I-B - Structure
Les requtes et les rponses sont bties sur le mme modle :
{Ligne d'introduction}{SEP} {En-ttes spares par des {SEP} } {SEP}{SEP} {Corps}
En thorie, le seul lment capable de diffrencier une requte d'une rponse, c'est la Ligne d'introduction. En fait, certaines en-ttes sont plutt caractristiques des requtes, tandis que d'autres sont plutt utilises pour les rponses. Les requtes ont cette forme :
{Nom}{HSEP}{Valeur}
Le sparateur HSEP reprsente la combinaison deux points + espace ": ". Le protocole HTTP dfinit un ensemble d'en-ttes standard. Des en-ttes supplmentaires peuvent tre ajoutes, la condition que leur nom commence par "X-".
0x0A (10)
\n
-4Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
code US-ASCII
notation courante
point d'interogation
0x3F (63)
rserves et interdictions Son utilisation l'intrieur de la Ligne d'Introduction et des en-ttes est donc interdite. Il est utilis certains endroits de la Ligne d'Introduction. Son utilisation l'intrieur de celle-ci est donc rglemente. Il est utilis certains endroits de la Ligne d'Introduction. Son utilisation l'intrieur de celle-ci est donc rglemente. Il est utilis certains endroits de la Ligne d'Introduction. Son utilisation l'intrieur de celle-ci est donc rglemente. Il est utilis certains endroits de la Ligne d'Introduction. Son utilisation l'intrieur de celle-ci est donc rglemente. Il est utilis dans le cadre de l'URL-Encoding. Son utilisation l'intrieur de celui-ci est donc rglemente. Il sont utiliss dans les en-ttes. Son utilisation l'intrieur de celles-ci est donc rglemente. Il est utilis dans la Ligne d'Introduction et les en-ttes. Son utilisation l'intrieur de celles-ci est donc rglemente.
gal
0x3D (31)
0x26 (38)
&
dise
0x23 (35)
pourcentage
0x25 (37)
deux points
0x3A (58)
0x20 (32)
-5Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
Le sparateur SEP correspond en fait au duo "\r\n" (Carriage Return, New Line : CRLF)
I-D - L'URL-Encoding
L'URL-Encoding permet d'insrer les caractres rservs, ou des caractres accentus, dans certaines parties des messages HTTP. Cet encodage consiste simplement remplacer un caractre interdit par : le caractre pourcentage suivi des deux caractres reprsentant le code hexadcimal US-ASCII du caractre remplacer. Exemple : le sparateur SEP (\r\n) deviendrait : %0D%0A Pour dcoder une chane URL-Encode, il suffit de remplacer le triplet %?? par le caractre dont le code US-ASCII correspond.
-6Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
La Mthode
GET HEAD POST PUT DELETE OPTIONS TRACE CONNECT
On parle aussi parfois de type de requtes. Les Mthodes autres que GET et POST sont propres la version 1.1 de HTTP. Ces mthodes seront dtailles un peu plus loin.
La Page
Le spcificateur Page dsigne le chemin vers la ressource charge de traiter, ou de correspondre la requte partir de la racine du site. Il doit commencer par un slash (/) et la chane doit tre URL-Encode. Les paramtres d'URL (paramtres GET) L'identificateur de fragment (fragment identifier)
-7Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
Le Nom et la Valeur sont URL-Encods. Forcment, il n'y a pas d'espace. Le sparateur EQ correspond au caractre gal. Chaque paramtre est spar du suivant par un esperluette. La chane ainsi forme est place la suite du chemin, le tout tant spar par un point d'interrogation. Le fragment identifier permet de dsigner une partie prcise du document. Il n'a pour le moment que peu (voire pas) de signification pour le serveur, car il est surtout utile au client. Par exemple, c'est lui qui est utilis pour dsigner une ancre dans un document HTML. Le langage XPointer est prvu pour tre notamment utilis dans le fragment identifier. Il doit galement tre URL-Encod. Il est ajout la suite des paramtres d'URL (ou du chemin s'il n'y a pas de paramtre d'URL) et il en est spar par un dise.
La Version
HTTP/1.0 pour la version 1.0 HTTP/1.1 pour la version 1.1
Les Mthodes
Nous allons maintenant voir un peu plus en dtail les 4 mthodes proposes par la version 1.1 du protocole HTTP. Les informations sur les mthodes GET et POST sont galement valables pour la version 1.0. GET Cette mthode est la plus courante, il s'agit normalement d'une simple requte de tlchargement d'un document. Deux requtes GET portant sur le mme document devraient retourner des rponses smantiquement identiques (certaines en-ttes pouvant influer sur le comportement du serveur, les rponses peuvent ne pas tre totalement identiques). Aucune donne traiter ne peut tre envoye au serveur par cette mthode. Il est par contre possible d'ajouter les paramtres d'URL (aussi nomms paramtres GET). Le corps de la requte DOIT tre vide, et le document spcifi dans la requte (la Page) est celui qui doit tre retourn.
HEAD Cette mthode est similaire et presque quivalente la mthode GET. C'est en fait la rponse finale du serveur qui est tronque. La rponse une requte HEAD est la rponse la requte GET qui lui est similaire, sauf que le corps de la rponse HTTP n'est pas transmis. Cela permet souvent d'conomiser beaucoup de bande passante.
POST
-8Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
La Mthode POST est la mthode de base pour demander un traitement d'informations au serveur. Ces requtes sont censes mettre en jeu des mcanismes propres au serveur et provoquant des communications avec d'autres modules, voire d'autres serveurs, pour effectuer le traitement des dites donnes. De ce fait, il est tout fait probable que deux requtes POST identiques reoivent des rponses diffrentes ou mme smantiquement opposes. Les donnes traiter sont spcifies dans le corps de la requte. Le document dsign par la requte via la page est la ressource qui doit traiter les donnes et gnrer la rponse.
PUT et DELETE Ces mthodes sont censes permettre l'upload (le chargement sur le serveur) ou la suppression d'un document sans passer par un serveur FTP ou autre. Bien videmment, cela peut provoquer des remplacements de fichiers, et donc de trs grosses failles de scurits sur un serveur. De ce fait, la plupart des serveur Webs requierent une configuration spciale indiquant une ressource ou un document charg de traiter ces requtes. Le document dsign par la requte est celui qui doit tre remplac (ou cr), et le contenu du document est dans le corps de la requte. En thorie, les paramtres d'URL et le fragment identifier devraient tre interdits ou ignors par le serveur. En pratique, ils sont gnralement transmis la ressource charge de traiter la requte.
OPTIONS et TRACE Ces mthodes permettent au client de demander certaines informations sur le serveur. Tous les serveurs ne les implmentent pas forcment.
CONNECT Cette mthode est cense tre utilise pour demander une utilisation du serveur en tant que proxy. Tous les serveurs ne les implmentent pas forcment.
-9Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
Sa valeur est le domaine du site Web. Elle est gnralement spcifie juste aprs la Ligne d'Introduction.
User-Agent Cette en-tte permet d'indiquer la signature du programme effectuant la requte. C'est une chane de caractres qui permet d'identifier le programme. En gnral, il s'agit du nom complet du programme et de sa version.
Content-type et Content-length Ces deux en-ttes ne peuvent tre spcifies que dans le cadre d'une requte POST ou PUT. Elles indiquent respectivement le type MIME et la taille en octets du corps de la requte. Si elles ne sont pas spcifies, c'est le serveur qui est seul responsable de leur ventuelle valeur par dfaut.
Cookie Cette en-tte permet au client de fournir un cookie au serveur. Sa valeur est simplement le nom et la valeur du cookie, spars par un gal.
D'autres en-ttes De nombreuses autres en-ttes ont t prvues dans le protocole HTTP. Elles servent par exemple prciser la gestion du cache, la langue ou le format prfr pour la rponse, l'authentification du client, etc. Les Requests For Comments (RFC) du protocole HTTP vous fourniront toutes les en-ttes [pour ses versions 1.0 et 1.1]. Toute en-tte non reconnue par le serveur doit thoriquement tre ignore.
- 10 Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
La Version est la mme que pour la requte. Le Code Status est un code sur trois chiffres qui indique le status de la requte. Nous y reviendrons plus tard. Le sparateur SP est un espace. La Phrase Status est simplement une phrase permettant de rendre le status plus lisible pour un humain. Elle est purement indicative et n'a aucune valeur informative sur le plan du protocole, elle est d'ailleurs facultative. Nous indiquerons cependant les Phrases Status (Reason Phrase) proposes par les RFC pour les codes que nous dtaillerons. Les Codes Status sont regroups en familles, qui sont au nombre de cinq pour les versions 1.0 et 1.1 de HTTP. La famille est indique par le premier chiffre du code (celui des centaines), il va de 1 5. Tout code inconnu doit tre trait par le client comme le code de base de la famille (X00) et tre prsent l'utilisateur. Si la famille est inconnue, le code doit tre trait comme un code Erreur Serveur (famille 5xx) et tre indiqu l'utilisateur.
101 Switching protocol Ce code status permet de changer le protocole ou la version du protocole utilis lors de la communication. Le nouveau protocole utiliser est spcifi par l'en-tte Upgrade.
- 11 Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
201 Created Peut tre utilis par exemple dans le cadre d'un requte PUT pour indiquer que le document a bien t upload.
204 No Content La requte s'est bien droule, mais le corps de la rponse est vide.
206 Partial Content Ce code est gnralement utilis dans le cadre d'une rcupration de tlchargement, ou de l'utilisation du cache. Seule une partie du document demand est renvoye.
301 Moved Permanently Quand une ressource est dplace dfinitivement, c'est ce code qui permet d'indiquer le dplacement notamment aux moteurs de recherche. La requte ayant gnr l'erreur doit alors tre renvoye pour correspondre avec la nouvelle ressource.
- 12 Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
401 Unauthorized ou Authorization required Le client n'est pas cens avoir accs la requte au vu de son niveau actuel d'identification. Il doit s'identifier de manire correcte. S'il ne peut remplir les conditions d'identification, alors les requtes suivantes aboutiront une erreur 403.
404 Not Found La fameuse erreur 404, elle indique que la ressource demande n'a pu tre trouve.
405 Method Not Allowed Le client n'est pas cens pouvoir envoyer ce type de requte, une authentification est certainement ncessaire.
501 Not Implemented Certaines fonctionnalits requises par les en-ttes ou la mthode employes ne sont pas supportes par le serveur.
- 13 Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
503 Service Unavaible Utilis par exemple quand le serveur est surcharg.
505 HTTP Version Not Supported Le serveur ne supporte pas la version du protocole HTTP qui a t utilise.
Location Cette en-tte permet d'indiquer une redirection. A sa rception, le client est gnralement cens renvoyer une requte sur l'adresse indique. Ce comportement dpend du code status renvoy avec la rponse.
Set-Cookie Cette en-tte permet d'indiquer au client des cookies stocker. Sa valeur peut prendre une forme assez complexe. La forme par dfaut est celle de l'en-tte de requte Cookie. Les formes plus volues consistent l'indication d'informations telles que : la date de premption (Expires), le domaine d'application (Domain), le chemin d'application (Path), etc. Toutes ces informations sont indiques la suite du couple nom/valeur de la mme manire (nom de l'information, gal, valeur) et spars entre elles et de celui-ci par un point-virgule.
D'autres en-ttes Bien sr, toutes les en-ttes ne sont pas listes ici. Vous trouverez srement une description exhaustive dans la RFC.
- 14 Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/
Puis tapez votre requte. En thorie, vous devriez voir votre requte arriver.
- 16 Copyright 2006 - Mathieu Lemoine. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.
http://mathieu-lemoine.developpez.com/tutoriels/web/http/