+++ to secure your transactions use the Bitcoin Mixer Service +++

 

RFC: 1945 : Hypertext Transfer Protocol - HTTP/1.0 (SPECIFICATION)

Cr�dits : T. Berners-Lee, MIT/LCS, R. Fielding, UC Irvine, H. Frystyk, MIT/LCS,
Traduction : Val�ry G. FREMAUX Ing�nieur Professeur / EISTI
Edition originale : Mai 1996 / Version FR: Septembre 1997
Statut : Information

Avant Propos
1. Introduction
2. Conventions de notation et Grammaire g�n�rique
3. Param�tres du protocole
4. Messages HTTP
5. Request
6. R�ponse
7. Entit�s
8. D�finition des m�thodes
9. D�finition des codes d'�tat
10. D�finition des champs d'en-t�te
11. Authentification d'acc�s sous HTTP
12. S�curit�
13. Cr�dits
14. Bibliographie
15. Adresses des auteurs
Appendices


AVANT-PROPOS

Note du Traducteur :

Le texte suivant est la traduction int�grale de la sp�cification HTTP 1.0, telle qu'�dit�e par les auteurs originaux du protocole, sans ajouts, commentaires, ni omissions. Ce document a valeur informative, selon la proc�dure courante d'enregistrement des documents au sein du W3C. Il n'a de ce fait pas valeur de "norme", et, s'il peut �tre consid�r� comme document de r�f�rence, il ne peut par contre octroyer une l�gitimit� quelconque � un quelconque d�veloppement, ni servir de preuve ni de garant d'une conformit� quelle qu'elle soit.

Concernant les droits de traduction de ce texte : Toute reproduction de cette traduction est autoris�e � titre personnel ou �ducatif. Par contre, �tant donn� la quantit� de travail que cette mise en œuvre repr�sente, le traducteur se r�serve le droit d'autoriser une reproduction partielle ou totale de cette traduction dans tout ouvrage � caract�re commercial.

Statut de ce m�mo

Ce m�mo est une information � destination de la communaut� Internet. Il ne peut �tre consid�r� comme une sp�cification officielle d'aucun protocole Internet. Sa distribution n'est pas limit�e.

Note IESG

L'IESG esp�re que ce document sera rapidement remplac� par une norme officielle.

Contexte

L'Hypertext Transfer Protocol (HTTP) est un protocole de niveau application suffisamment l�ger et rapide, pour la transmission de documents distribu�s et multim�dia � travers un syst�me d'information multi-utilisateurs. Il s'agit d'un protocole g�n�rique, orient� objet, pouvant �tre utilis� pour de nombreuses t�ches, dans les serveurs de nom et la gestion d'objets distribu�s par l'extension de ses m�thodes de requ�te (commandes). Une caract�ristique d'HTTP est son typage des repr�sentations de donn�es, permettant la mise en oeuvre de syst�mes ind�pendants des donn�es y �tant transf�r�es.

HTTP a �t� utilis� � l'initiative du World-Wide Web depuis 1990. Cette sp�cification d�crit le protocole de base r�f�renc� sous l'appellation "HTTP/1.0".

HYPERTEXT TRANSFER PROTOCOL - HTTP/1.0

SPECIFICATION



Cr�dits : T. Berners-Lee, MIT/LCS, R. Fielding, UC Irvine, H. Frystyk, MIT/LCS,
Traduction : V.G. FREMAUX
Edition originale : Mai 1996 / Version FR: Septembre 1997 

1. Introduction

1.1 Objectif

L'Hypertext Transfer Protocol (HTTP) est un protocole de niveau application suffisamment l�ger et rapide, pour la transmission de documents distribu�s et multim�dia � travers un syst�me d'information multi-utilisateurs. HTTP � �t� utilis� � l'initiative du Word-Wide Web d�s 1990. Cette sp�cification d�crit les fonctionnalit�s le plus souvent rencontr�es dans les impl�mentation "client/serveur HTTP/1.0". Elle est divis�e en deux section. Les fonctions usuellement exploit�es de HTTP sont d�crites dans le corps de ce document. Les autres fonctions, moins utilis�es sont list�es dans l'annexe D.

Les syst�mes d'information pratiques n�cessitent des fonctions plus �volu�es que la simple r�cup�ration de donn�es, parmi lesquelles on trouve la possibilit� d'effectuer des recherches, les fonctions de remise � jour, et d'annotation. HTTP permet d'utiliser un ensemble non exhaustif de m�thodes pour d�finir l'objet d'une requ�te. Il s'appuie essentiellement sur la normalisation des Uniform Resource Identifier (URI) [2], soit sous forme de "site" (URL) [4] ou de noms (URN) [16], pour indiquer l'objet sur lequel porte la m�thode. Les messages sont transmis sous une forme similaire � celle de la messagerie �lectronique (Mail) [7] et des extensions Multipurpose Internet Mail Extensions (MIME) [5]. HTTP est aussi un protocole e communication g�n�rique entre des "utilisateurs" et des routeurs/proxies vers d'autres protocoles, tels que SMTP [12], NNTP [11], FTP [14], Gopher [1], et WAIS [8], permettant une acc�s de base � des ressources hyperm�dia, et simplifiant l'impl�mentation d'interfaces utilisateur.

1.2 Terminologie

Cette sp�cification utilise un certain nombre de termes pour d�signer les participants et les objets d'une communication HTTP.

Connexion

Un circuit virtuel s'appuyant sur une couche de transport pour la communication d'information entre deux applications.

Message

L'unit� de base d'une communication HTTP, consistant en une s�quence structur�e d'octets d�finie � la Section 4 et transmis via la connexion.

Requ�te

Un message de requ�te HTTP (d�fini en Section 5).

R�ponse

Un message de r�ponse HTTP (d�fini en Section 6).

Ressource

Un service ou objet du r�seau pouvant �tre identifi� par une URI (Section 3.2).

Entit�

Une repr�sentation particuli�re de donn�es, ou la r�ponse d'une ressource de type service, incluse dans une requ�te ou une r�ponse. Une entit� repr�sente une m�tainformation sous la forme d'une en-t�te et d'un contenu sous la forme d'un corps, ou "body".

Client

Un programme applicatif dont la fonction principale est d'�mettre des requ�tes.

Utilisateur

Le client qui a �mis la requ�te. Celui-ci peut �tre un navigateur, un �diteur, un "spiders" (robot d'exploration), ou autre utilitaire.

Utilisateur final

L'utilisateur humain pilotant le programme utilisateur.

Serveur

Un programme applicatif acceptant des connexions dans le but traiter des requ�tes en d�livrant une r�ponse.

Serveur origine

Le serveur dans laquelle se situe physiquement une ressource.

Proxy

Un programme interm�diaire qui cumule les fonctions de serveur et de client. Les requ�tes sont soit trait�es en interne ou r�percut�es, �ventuellement converties, sur d'autres serveurs. Un proxy doit interpr�ter, puis reconstituer un message avant de le r�emettre. Les proxies sont souvent utilis�s comme portes d'acc�s c�t� utilisateur � des r�seaux prot�g�s par un "firewall" ou comme interm�diaire pour convertir des protocoles non support�s par l'utilisateur.

Gateway ou routeur

Un serveur jouant le r�le d'interm�diaire pour d'autres serveurs. Contrairement � un Proxy, un routeur re�oit les requ�tes comme s'il �tait le serveur origine pour la ressource; le client n'�tant pas n�cessairement conscient de "communiquer" avec un routeur. Les routeurs sont souvent utilis�s comme porte d'acc�s c�t� serveur d'un r�seau prot�g� par "firewall" et comme convertisseur de protocole pour acc�der � es ressources h�berg�es sur des syst�mes non-HTTP.

Tunnel

Un tunnel est un programme applicatif servant de relais "transparent" entre deux connexions. Une fois actif, cet �l�ment n'est plus consid�r� comme faisant partie de la connexion HTTP, bien qu'il soi issu d'une requ�te HTTP. Le tunnel cesse d'exister lorsque les deux sens de la connexion ont �t� ferm�s. Les tunnels sont utilis�s lorsqu'une "porte" est n�cessaire et que l'interm�diaire ne peut, ou ne doit pouvoir interpr�ter la communication.

Cache

Un espace de stockage local destin� � enregistrer les r�ponses et le sous-syst�me contr�lant ces enregistrements, leur relecture et leur effacement. Un cache enregistre des r�ponses dans le but de diminuer le temps d'acc�s et la charge du r�seau lors de requ�tes identiques ult�rieures. Tout client ou serveur peut impl�menter un cache, bien que le serveur ne puisse exploiter ce cache, faisant office de tunnel.

Un programme pouvant aussi bien �tre serveur que client; l'utilisation que nous ferons de ces termes s'appliquera � la situation qu'� le programme vis � vis d'une connexion particuli�re, plut�t qu'� ses possibilit�s effectives. De m�me tout serveur peut �tre � la fois serveur origine, proxy, routeur, ou tunnel, changeant alors de comportement en fonction des requ�tes re�ues.

1.3 Fonctionnement global

Le protocole HTTP est bas� sur un paradigme requ�te/r�ponse. Un client �tablit une connexion vers un serveur et lui envoie une requ�te sous la forme d'une m�thode, d'une URI, du num�ro de version, suivi d'un message de type MIME contenant les modificateurs de la requ�te, les informations sur le client, et �ventuellement un corps. Le serveur r�pond par une ligne d'�tat, incluant la version de protocole et un message de succ�s ou d'erreur, suivi d'un message de type MIME contenant l'information sur le serveur, metainformation, et le corps �ventuel.

La plupart des communications HTTP sont initi�es par un utilisateur et consistent en une requ�te devant �tre appliqu�e (il s'agit d'une m�thode) � une ressource sur son serveur origine. Dans le cas le plus simple, ceci peut �tre r�alis� par une connexion simple (v) entre l'utilisateur (UA) et le serveur origine (O).

       Requ�te ------------------------>

    UA -------------------v------------------- O

       <----------------------- R�ponse

Une situation plus complexe peut appara�tre lorsque un ou plusieurs interm�diaires sont pr�sents dans la cha�ne de communication. On trouvera trois types d'interm�diaires: les proxy, les routeurs, et les tunnels. Un proxy est un agent actif, recevant les requ�tes destin�es � une URI dans sa forme absolue, recomposant tout ou partie du message, et r��mettant la requ�te transform�e � destination de l'URI. Un serveur est un agent actif, agissant en tant que "surcouche" par rapport � d'autres serveurs et si n�cessaire, traduisant le protocole � destination et en provenance du serveur vis�. Un tunnel est un agent passif ne servant que de relais entre deux parties d'une m�me connexion, et de ce fait sans modifier le message; les tunnels sont utilis�s lorsque le message doit traverser un interm�diaire (comme un "firewall") m�me si celui-ci ne peut interpr�ter le contenu des messages.
Requ�te -------------------------------------->

    UA -----v----- A -----v----- B -----v----- C -----v----- O

       <------------------------------------- R�ponse

La figure ci-dessus montre le cas de trois interm�diaires (A, B, et C) entre l'utilisateur et le serveur origine. Une requ�te ou r�ponse passant d'un bout � l'autre doit transiter par quatre connexions. Cette distinction est important car certaines options d'une communication HTTP peuvent ne s'appliquer qu'� la connexion la plus proche, sans m�me passage par un tunnel, et accessible uniquement des extr�mit�s, ou au contraire � toutes les connexions impliqu�es dans la cha�ne. Bien que ce sch�ma soit lin�aire, chaque participant peut �tre engag� dans plusieurs communications simultan�es. Par exemple, B peut �tre en train de recevoir de nombreuses requ�tes de clients autres que A, et �mettre des requ�tes vers d'autres serveurs que C, tout en interpr�tant les requ�tes issues de A.

Toute partie de communication n'�tant pas un tunnel doit poss�der un cache pour le stockage des requ�tes. L'int�r�t de cette pratique est que la cha�ne requ�te/r�ponse peut �tre consid�rablement raccourcie si l'un des interm�diaires dispose d�j� d'une instance de la ressource dans son cache. Le diagramme suivant montre le cas o� B dispose dans son cache d'une copie d'une r�ponse pr�c�demment envoy�e par O (via C) et r�pond � une requ�te identique de UA (� noter que dans cet exemple, ni UA ni A ne disposent de cette m�me r�ponse en cache).

       Requ�te ---------->

    UA -----v----- A -----v----- B - - - - - - C - - - - - - O

       <--------- R�ponse

Toutes les r�ponses ne peuvent �tre "cach�es", et certaines requ�tes peuvent utiliser des modificateurs induisant un comportement particulier du cache. Certaines applications HTTP/1.0 utilisent des heuristiques pour d�crire ce qui est ou non "cachable", mais ces r�gles ne sont pas standardis�es.

Sur Internet, les communications HTTP s'appuient principalement sur le protocole de connexion TCP/IP. Le port utilis� par d�faut est le port TCP 80 [15], d'autres ports pouvant �tre utilis�s. Ceci n'exclut pas que HTTP puisse �tre impl�ment� au dessus d'un autre protocole d'Internet, ou sur d'autres types de r�seau. HTTP n�cessite seulement un transport fiabilis�; tout protocole garantissant la s�curit� de transmission peut �tre utilis� pour supporter HTTP, la place qu'occupent les donn�es des requ�tes et r�ponses HTTP/1.0 dans les unit�s de transmission de ces protocoles restant en dehors du contexte de ce document.

Except� pour des applications exp�rimentales, la pratique courante sp�cifie qu'une connexion doit �tre initi�e par un client avant transmission de la requ�te, et referm�e par le serveur apr�s d�livrance de la r�ponse. Les deux c�t�s, client et serveur, doivent �tre pr�par�s � ce que la connexion soit coup�e pr�matur�ment, suite � une action de l'utilisateur, une temporisation automatique, ou une faute logicielle, et doivent apporter une r�ponse pr�visible � cette situation. Dans tous les cas, la fermeture d'une connexion qu'elle qu'en soit la raison est assimilable � la conclusion de la requ�te, quel que soit l'�tat.

1.4 HTTP et MIME

HTTP/1.0 exploite un grand nombre d'impl�mentation pr�vues pour les MIME, tels que d�finis dans la RFC 1521 [5]. L'appendice C d�crit comment HTTP l'utilisation des "Internet Media Types" typiquement utilis�s par la messagerie �lectronique, et indique les diff�rences de comportement.

2. Conventions de notation et Grammaire g�n�rique</font>

2.1 BNF �tendue

Tous les m�canismes �voqu�s sont d�crits en prose et sous forme Backus-Naur �tendue (BNF) similaire � celle utilis�e dans la RFC 822 [7]. Les d�veloppeurs devront �tre familiaris�s avec cette notation afin de comprendre cette sp�cification. La notation Backus-Naur comprend les all�gations suivantes :

nom = d�finition

Le nom d'une r�gle est le nom lui-m�me (sans "<" ni ">" englobants) et est s�par� de sa d�finition par le symbole "=". Le caract�re espace n'a de signification que lorsqu'un retrait indique qu'une d�finition s'�tend sur plusieurs lignes. Certaines r�gles de base sont en majuscules, comme SP, LWS, HT, CRLF, DIGIT, ALPHA, etc. Les ouvertures et fermetures "<" et ">" ne sont utilis�es que lorsqu'une discrimination des r�gles est indispensable � l'int�rieur d'une d�finition.

"literal"

Un texte litt�ral est entre doubles guillemets. Sauf mention contraire, la casse du texte n'est pas consid�r�e.

r�gle1 | r�gle2

Les �l�ments s�par�s par une barre ("I") constituent une alternative, ex., "oui | non" acceptera "oui" ou "non".

(r�gle1 r�gle2)

Les �l�ments � l'int�rieur de parenth�ses sont consid�r�s comme un seul �l�ment. Ainsi, "(elem (foo | bar) elem)" permet les s�quence "elem foo elem" et "elem bar elem".

*r�gle

Le caract�re "*" pr�c�dent un �l�ment indique sa r�p�tition. La forme compl�te de cette notation est "<n>* <m>element" indiquant au moins <n> et au plus <m> occurrences de "element". Les valeurs par d�faut sont 0 et "infini". la syntaxe "*(element)" signifie donc tout nombre d'occurrences y compris 0; "1*element" pr�cise au moins une occurrence; et "1*2element" pr�cise une ou deux occurrences.

[r�gle]

Les crochets pr�cisent un �l�ment optionnel; "[foo bar]" vaut pour "*1(foo bar)".

Nr�gle

R�p�tition pr�cise: "<n>(element)" est �quivalente � "<n>*<n>(element)"; c'est � dire, exactement <n> occurrences de (element). Ainsi 2DIGIT est un nombre de 2-digits, et 3ALPHA une cha�ne de 3 caract�res alphab�tiques.

#r�gle

Une syntaxe "#" est utilis�e, comme pour la syntaxe "*", pour d�finir des listes d'�l�ments. La forme compl�te en est "<n># <m>element" indiquant au moins <n> et au plus <m> elements, chacun s�par� par une ou plusieurs virgules (",") et des espaces optionnels (LWS). Ceci rend la forme des listes tr�s lisible; une r�gle du type "( *LWS element *( *LWS "," *LWS element ))" peut �tre vue comme "1#element". Lorsque cette construction est utilis�e, les �l�ments vides sont utilis�s, mais ne contribue pas au comptage des �l�ments pr�sents. De ce fait, "(element), , (element)" est permis, mais compte comme deux �l�ments. Toutefois, dans les cas ou un �l�ment au moins est requis, cet �l�ment doit �tre non nul. Les valeurs par d�faut sont 0 et "infini" et donc "#(element)" vaut pour tous les �l�ments y compris 0; "1#element" vaut pour au moins un; et "1#2element" permet un ou deux �l�ments.

; commentaire

Un point virgule, � distance d'un texte de r�gle instaure un d�but de commentaire qui va jusqu'au bout de la ligne. C'est un moyen pratique d'ins�rer des remarques ou annotations en cours de sp�cification.

*LWS implicite

La grammaire d�crite par cette sp�cification est bas�e sur le "mot". Sauf mention contraire, tout nombre d'espaces (LWS) peut �tre ins�r� entre deux mots adjacents ou "token", et entre un "token" et un d�limiteur (tspecials), sans changer l'interpr�tation. Il doit exister au moins un d�limiteur (tspecials) entre deux mots, au risque de les voir interpr�t�s comme un seul. Malgr� tout, les constructions HTTP tendront � utiliser la "forme commune", certaines impl�mentations ne savent traiter autre chose que cette forme. 

2.2 R�gles de base

Les r�gles de base suivantes seront utilis�es tout au long de ce document dans les s�quences de recherche. La table de caract�res ASCII-US est d�finie par [17].
OCTET       = [toute donn�e cod�e sur 8 bits]
CHAR        = [tout caract�re ASCII-US (0 � 127)>
UPALPHA     = [Tout caract�re alphab�tique ASCII-US majuscule "A".."Z"]
LOALPHA     = [Tout caract�re alphab�tique ASCII-US minuscule "a".."z"]
ALPHA       = UPALPHA | LOALPHA
DIGIT       = [tout digit ASCII-US "0".."9"]
CTL         = [Tous caract�re de contr�le ASCII-US (0 � 31) et DEL (127)]
CR          = [CR ASCII-US, retour chariot (13)]
LF          = [LF ASCII-US, saut de ligne (10)]
SP          = [SP ASCCII-US, espace (32)]
HT          = [HT ASCII-US, tabulation horizontale (9)]
<">         = [double guillemet ASCII-US (34)]

HTTP/1.0 d�finit la s�quence CR LF comme marqueur de fin de ligne pour tous les �l�ments except� le corps de l'entit� (voir Appendice B pour les tol�rances). La fin de ligne � l'int�rieur d'un corps d'entit� d�pend de son m�dia, comme d�crit en Section 3.6.
CRLF        = CR LF
Les en-t�tes HTTP/1.0 peuvent �tre r�parties su plusieurs lignes si chaque nouvelle ligne commence par un espace ou une tabulation horizontale. Une suite d'espace, m�me sur plusieurs lignes �quivaut � un espace simple.
LWS             =       [CRLF] 1*( SP | HT )
Cependant les en-t�tes multilignes ne sont pas accept�es par toutes les applications, et doivent de pr�f�rence �tre �vit�es lors d'un codage HTTP/1.0.

La r�gle TEXT est utilis�e pour d�crire des informations descriptives qui ne sont pas sens�es �tre interpr�t�es. Les mots d'un �l�ment *TEXT peuvent contenir d'autres caract�res que ceux de la table ASCII-US stricto sensu.

TEXT                  = [tout OCTET sauf CTL, hormis LWS qui reste autoris�]
Les r�cepteurs d'un �l�ment TEXT d'une en-t�te contenant des octets hors de la table ASCII-US supposeront qu'il s'agit de caract�res ISO-8859-1.

Les caract�res hexad�cimaux peuvent �tre utilis�s dans certaines applications.

HEX                   = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f" | DIGIT
De nombreux champs d'en-t�te HTTP/1.0 sont form�s de mots s�par�s par des espaces ou caract�res sp�ciaux. Ces caract�res doivent �tre entre guillemets lorsqu'ils sont utilis�s � l'int�rieur d'une valeur.
mot                   = token | cha�ne entre guillemets

token                 = 1*[tout CHAR except� CTLs ou tspecials]

tspecials             = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" 
                      | "\" | ["] | "/" | "[" | "]" | "?" | "=" | "{" 
                      | "}" | SP | HT

Les commentaires pourront �tre ins�r�s dans les en-t�tes HTTP en les entourant de parenth�ses. Les commentaires ne sont permis que dans les champs contenant le mot "comment" dans leur d�finition. Dans tous les autres champs, les parenth�ses sont interpr�t�es comme faisant partie de l'expression.
comment              = "(" *( ctext | comment ) ")"
ctext                = [tout TEXT except� "(" et  ")"]
Une cha�ne sera interpr�t�e comme un seul mot si elle est entre double guillemets.
quoted-string        = ( <"> *(qdtext) <"> )

qdtext               = [tout CHAR sauf <"> et CTL, hormis LWS qui est accept�]
L'utilisation du backslash ("\") comme s�quence d'�chappement d'un caract�re unique n'est pas permis par le protocole HTTP/1.0

3. Param�tres du protocole

3.1 Num�ro de Version

HTTP utilise un sch�ma de num�rotation "." pour indiquer la version du protocole. Cette technique permet � un �metteur d'envoyer une indication sur sa capacit� � comprendre une r�ponse, plut�t que les fonctionnalit�s qu'il permet. Les composants du message ne pourront alt�rer ce num�ro de version car ils n'affectent pas le comportement de la communication et ne font qu'�tendre les possibilit�s des champs qui les contiennent. Le nombre est incr�ment� lorsque les changements apport�s au protocole ajoutent des fonctionnalit�s ne modifiant pas la r�ponse de l'algorithme d'interpr�tation, mais qui peuvent ajouter des nouvelles syntaxes ou des nouvelles fonctionnalit�s c�t� �metteur. Le nombre \ est incr�ment� lorsque le format de message est chang�.

La version d'un message HTTP est indiqu� par un champ HTTP-Version dans la premi�re ligne du message. Si la version n'est pas sp�cifi�e, le r�cepteur prendra par d�faut la version la plus restrictive: HTTP/0.9.

HTTP-Version       = "HTTP" "/" 1*DIGIT "." 1*DIGIT
Notez que les nombres "sup�rieure" et "inf�rieure" doivent �tre pris comme deux entiers distincts et que chacun peut �tre amen� � prendre une valeur sup�rieure � un simple digit. Ainsi, HTTP/2.4 est une version plus basse que HTTP/2.13, � son tour plus basse que HTTP/12.3. Des z�ros mentionn�s en t�te de nombre doivent �tre ignor�s par le r�cepteur, et ne devraient pas �tre �mis par l'�metteur.

Ce document d�finit les versions 0.9 et 1.0 du protocole HTTP. Les applications envoyant des "requ�tes pleines" ou "r�ponses pleines", et d�finies dans cette sp�cification, doivent signaler une version HTTP-Version "HTTP/1.0".

Les serveurs HTTP/1.0 doivent:

Les clients HTTP/1.0 doivent: Les applications des Proxy et routeurs doivent prendre certaines pr�cautions lorsqu'ils retransmettent des requ�tes d'un format diff�rent que celui de l'application native. Comme la version de protocole indique les possibilit�s fonctionnelles de l'application de l'�metteur, un proxy/routeur ne doit jamais �mettre de requ�te de niveau sup�rieur � celui de sa propre application HTTP; si une telle requ�te lui parvient, le proxy/routeur doit d�grader le num�ro de version, ou renvoyer une erreur. Les requ�tes re�ues sur un niveau inf�rieur peuvent �tre relev�es au niveau de version de l'application native; la r�ponse de ces proxies/routeurs doivent n�anmoins suivre les r�gles �nonc�es ci-avant.

3.2 Uniform Resource Identifiers

Les URI sont connues sous de nombreux noms: adresses WWW, identificateur universel de document (Universal Document Identifiers), identificateur universel de ressource (Universal Resource Identifiers) [2], et finalement la combinaison d'une localisation uniforme de ressource (Uniform Resource Locators ou URL) [4] et d'un nom (Name - URN) [16]. Pour autant que le protocole HTTP est concern�, les Uniform Resource Identifiers sont simplement des cha�nes format�es identifiant --via un nom, une localisation, ou toute autre caract�ristiques -- une ressource r�seau.

3.2.1 Syntaxe g�n�rale

Les URI dans HTTP peuvent �tre repr�sent�es sous forme absolue, ou relativement � une autre URI connue [9], suivant le contexte. Les deux formes sont diff�renci�es par le fait qu'une URI absolue commence toujours par un sch�me contenant un nom suivi du caract�re ":".
URI               = (URIabsolue | URIrelative ) [ "#" fragment ]
URIabsolue        = scheme ":" *( uchar | reserve )
URIrelative       = chem_res | chem_abs | chem_rel

chem_res          = "//" loc_res [ chem_abs ]
chem_abs          = "/" chem_rel
chem_rel          = [ chemin ] [ ";" params ] [ "?" requete ]

chemin            = fsegment *( "/" segment )
fsegment          = 1*pchar
segment           = *pchar

params            = param *( ";" param )
param             = *( pchar | "/" )

scheme            = 1*( ALPHA | DIGIT | "+" | "-" | "." )
loc_res           = *( pchar | ";" | "?" )
requete           = *( uchar | reserve ) 
fragment          = *( uchar | reserve ) 

pchar             = uchar | ":" | "@" | "&" | "=" | "+"
uchar             = non_reserve | echap

non_r�serv�       = ALPHA | DIGIT | sur | extra | national

echap             = "%" HEX HEX
reserve           = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+"
extra             = "!" | "*" | "'" | "(
1000
" | ")" | ","
sur               = "$" | "-" | "_" | "."
non_sur           = CTL | SP | <"> | "#" | "%" | "<" | ">"
national          = 
Pour une information d�finitive sur la syntaxe des URL voir les RFC 1738 [4] et RFC 1808 [9]. La notation BNF inclue des caract�res nationaux non permis dans les URL valides telles que sp�cifi�es dans la RFC 1738, car les serveurs HTTP ne sont pas limit�s � l'ensemble de caract�res non r�serv�s pour le codage de la prtie relative du chemin d'acc�s, et les proxies HTTP peuvent recevoir des requ�tes � destinations d'URI autres que celles d�finies dans la RFC 1738.

3.2.2 URL http

Le sch�me "http" est utilis� pour localiser une ressource r�seau via le protocole HTTP. Cette section d�finit la syntaxe et la s�mantique des URL.
http_URL          = "http:" "//" host [ ":" port ] [ chem_abs ]

host              = [un nom Internet d'ordinateur valide ou une
                     adresse IP (sous forme num�rique),
                     comme d�finie en Section 2.1 de la RFC 1123]

port              = *DIGIT
Si le port est vide ou non sp�cifi�, le port 80 est pris par d�faut. La s�mantique pr�cise que cette ressource est localis�e sur le serveur acceptant les connexions TCP sur ce port et sur cet ordinateur, l'URI de requ�te de la ressource en est le chemin d'acc�s absolu chem_abs. Si chem_abs n'est pas pr�cis� dans l'URL, il doit �tre remplac� par un "/" lorsque l'URI de requ�te est utilis�e (Section 5.1.2).

Note: Bien que le protocole HTTP soit ind�pendant de la couche transport, l'URL http identifie la ressource par son adresse TCP, Les ressources non TCP devant �tre atteintes via un autre sch�me d'URI.

La forme canonique d'une URL "http" est obtenue en convertissant tous les caract�res UPALPHA dans la cha�ne "host" par leur �quivalent LOALPHA (les noms de host ne tiennent pas compte de la casse), en �ludant le descriptif [ ":" port ] si le port vaut 80, et en rempla�ant le chem_abs vide par un "/".

3.3 Formats de temps et de date

Les applications HTTP/1.0 ont historiquement reconnu trois formats distincts pour la d�finition de dates et d'unit�s temporelles:

Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, mis � jour par la RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, rendue obsol�te depuis la RFC 1036
Sun Nov 6 08:49:37 1994 ; Format asctime() du C ANSI

Le premier format est pr�f�r� pour Internet pour une raison li�e � la longueur fixe de ses sous-champs, d�finis par la RFC 1123 [6] (une mise � jour de la RFC 822 [7]). Le second format est d'usage commun, mais se base sur le format de date tel que d�fini par la RFC 850 [10] d�sormais obsol�te, et pr�sente l'inconv�nient d'un champ d'ann�e sur deux digits. Les clients et serveurs HTTP/1.0 doivent reconna�tre les trois formats, m�me s'ils ne doivent jamais g�n�rer le troisi�me (convention du C).

Note: Les r�cepteurs de valeurs de date doivent avoir une impl�mentation robuste et de ce fait �tre capables de reconna�tre des formats de date �manent d'applications non-HTTP, comme il peut leur en parvenir en postant ou r�cup�rant des messages via proxy/routeur de et vers SMTP ou NNTP.

Tout index temporel HTTP/1.0 doit �tre repr�sent� en temps universel (Universal Time - UT), connu aussi sous l'appellation Greenwich Mean Time (GMT), sans exception possible. Ceci est indiqu� dans les deux premiers formats par l'inclusion du mot "GMT", abr�viation en trois lettre du code de zone, et doit �tre suppos� comme vrai � la lecture d'un temps asctime().

HTTP-date            = rfc1123-date | rfc850-date | asctime-date

rfc1123-date         = jsem "," SP date1 SP temps SP "GMT"
rfc850-date          = joursem "," SP date2 SP temps SP "GMT"
asctime-date         = jsem SP date3 SP temps SP 4DIGIT

date1                = 2DIGIT SP mois SP 4DIGIT
                     ; jour mois an (e.g., 02 Jun 1982)
date2                = 2DIGIT "-" mois "-" 2DIGIT
                     ; jour-mois-an (e.g., 02-Jun-82)

date3                = mois SP ( 2DIGIT | ( SP 1DIGIT ))
                     ; mois jour (e.g., Jun  2) 

temps                = 2DIGIT ":" 2DIGIT ":" 2DIGIT
                     ; 00:00:00 - 23:59:59

jsem                 = "Mon" | "Tue" | "Wed"
                     | "Thu" | "Fri" | "Sat" | "Sun"

joursem              = "Monday" | "Tuesday" | "Wednesday"
                     | "Thursday" | "Friday" | "Saturday" | "Sunday"

mois                 = "Jan" | "Feb" | "Mar" | "Apr"
                     | "May" | "Jun" | "Jul" | "Aug"
                 &
1000
nbsp;   | "Sep" | "Oct" | "Nov" | "Dec"
Note: Les contraintes au niveau du format de date HTTP ne sont valables qu'� l'int�rieur du r�seau de transmission. Les clients et serveurs ne sont pas oblig�s de respecter cette pr�sentation pour l'affichage, la pr�sentation de requ�te, l'acc�s, etc.

3.4 Tables de caract�res

HTTP utilise la m�me d�finition du vocable "table de caract�res" que celle utilis�e par MIME: Note: Le terme "table de caract�res" est aussi commun�ment appel� "encodage". Cependant, comme HTTP et MIME partagent les m�mes d�finitions, il est important qu'ils partagent aussi la terminologie.

Les "tables de caract�res" HTTP sont d�finies par des mots sans distinction de casse. L'ensemble complet de ces tables constitue le "registre de tables de l'IANA" (Character Set registry [15]). Cependant, comme ce "registre" ne d�finit pas un nom unique et d�finitif pour chacune de ces tables, nous avons d�fini ici les noms les plus couramment utilis�s dans les entit�s HTTP. Ces "tables de caract�res" incluent celles d�finies dans la RFC 1521 [5] -- ASCII-US [17] et ISO-8859 [18] -- ainsi que celles sp�cifiquement d�finies pour usage dans les param�tres de caract�res MIME.

charset            = "US-ASCII" | "ISO-8859-1" | "ISO-8859-2" 
                   | "ISO-8859-3" | "ISO-8859-4" | "ISO-8859-5" 
                   | "ISO-8859-6" | "ISO-8859-7" | "ISO-8859-8" 
                   | "ISO-8859-9" | "ISO-2022-JP" | "ISO-2022-JP-2" 
                   | "ISO-2022-KR" | "UNICODE-1-1" | "UNICODE-1-1-UTF-7" 
                   | "UNICODE-1-1-UTF-8" | autre_nom
Bien qu'HTTP permette l'uti 1000 lisation de tout nom arbitraire pour d�signer une table de caract�res, tout nom d�signant d�j� une des tables du registre IANA doit indiquer cette table pr�cise. Il est conseill� que les applications s'en tiennent aux tables de caract�res d�finies dans ce registre.

La table de caract�re indiqu�e pour un corps d'entit� doit �tre le plus petit d�nominateur commun de l'ensemble des codes de caract�res utilis�s dans ce corps, sauf si l'on pr�f�re syst�matiquement s'en tenir aux tables de base ASCII-US ou ISO-8859-1.

3.5 Indication d'encodage du contenu

Les valeurs de "codage de contenu" indiquent la nature de la transformation qui a �t� appliqu�e � une ressource. Cette information a �t� initialement d�finie pour pouvoir garder la trace d'un type de ressource compress�e ou encrypt�e. Typiquement, la ressource est disponible sous forme encod�e, et ne sera d�cod�e qu'au moment de son utilisation.
content-coding        = "x-gzip" | "x-compress" | transformation
Note: Pour des raisons de compatibilit� future, les applications HTTP/1.0 doivent interpr�ter "gzip" et "compress" respectivement comme "x-gzip" et "x-compress".

Toute mention d'encodage est ind�pendante de la casse. L'HTTP/1.0 utilise les descripteurs d'encodage dans le champ Content-Encoding (Section 10.3) de l'en-t�te. Le plus important est que cette information indique quel est le type de d�codage que le r�cepteur devra utiliser pour exploiter la ressource. Notez qu'un m�me programme peut �tre capable de d�coder plusieurs types d'encodage. Les deux valeurs d�finies dans cette sp�cification sont:

x-gzip

x-compress Note: L'utilisation de noms de programmes pour nommer des formats d'encodage n'est pas souhaitable et sera d�conseill� dans le futur. Leur utilisation dans ce cas provient surtout d'une habitude historique, mais ce n'est pas une habitude � prendre.

3.6 Types de m�dia

HTTP exploite les d�finition de types de m�dia Internet Media Types [13] dans le champ Content-Type de l'en-t�te (Section 10.5) afin de proposer une m�thode de typage ouverte et �volutive.
media-type           = type "/" soustype *( ";" param�tre )
type                 = nom_type
soustype             = nom_soustype
Les param�tres suivent la description de type/soustype, sous la forme de paires attribut/valeur.
parametre               = attribut "=" valeur
attribut                = nom_attribut
valeur                  = nom_valeur | cha�ne entre guillemets
Le type, sous-type et les noms d'attributs sont insensibles � la casse. Les valeurs associ�es aux attributs peuvent l'�tre ou ne pas l'�tre, suivant la s�mantique du nom de l'attribut. les types et sous type ne peuvent �tre s�par� par un LWS. Ceci est valable pour les paires attribut/valeur Lorsqu'un r�cepteur re�oit un param�tre irrecevable pour le type de m�dia sp�cifi�, il devra traiter le descripteur comme si cette paire attribut/valeur n'existait pas..

Certaines anciennes applications HTTP ne reconnaissent pas le type de m�dia. Les applications HTTP/1.0 ne pourront d�finir le type que lorsque la sp�cification du contenu est indispensable.

Les valeurs admises de types de m�dia sont d�finies par la Internet Assigned Number Authority (IANA [15]). Le processus d'enregistrement d'un type de m�dia est sp�cifi� dans la RFC 1590 [13]. L'usage de types non enregistr�s est d�conseill�.

3.6.1 Canonisation et texte par d�faut

Les types de m�dia Internet sont enregistr�s sous une forme canonique. En principe, un corps d'entit� transf�r� par HTTP doit �tre repr�sent� dans sa forme canonique avant transmission. Si le corps a �t� encod� sous un codage sp�cifi� par un Content-Encoding, il devait �tre sous sa forme canonique avant encodage.

Les sous types du type "text" utilisent dans leur forme canonique la s�quence CRLF en tant que fin de ligne. Cependant, HTTP permet le transport de texte dans lequel un CR ou un LF seul repr�sente la fin de ligne, tant que l'on reste � l'int�rieur du corps de l'entit�. Les applications HTTP doivent accepter des fins de ligne repr�sent�es par la s�quence CRLF, par un CR seul, ou par un LF seul, d�s qu'il s'agit d'un m�dia "text".

De plus, si le m�dia texte utilise une table de caract�re dans laquelle les caract�res 13 et 10 ne correspondent pas aux caract�res CR et LF, comme c'est le cas pour certains codages multi-octets, HTTP permet l'usage de toute s�quence de caract�res d�sign�s comme �quivalents des CR et LF et faisant office de fins de ligne. Cette souplesse n'est permise par HTTP que dans le corps de l'entit�; Un CRLF "l�gal" ne devra pas �tre remplac� par un CR seul ou un LF seul dans aucune des structures de contr�le HTTP (telles que les champs d'en-t�tes ou les limites "multipart").

Le param�tre "charset" est utilis� avec certains types de m�dia pour d�finir la table de caract�res utilis�e (Section 3.4) dans les donn�es. Lorsque ce param�tre n'est pas explicitement renseign�, les sous-types du m�dia "text" prennent par d�faut la table de caract�res "ISO-8859-1". Des donn�es cod�es selon une autre table de caract�res que "ISO-8859-1" ou ses sous-ensembles devra n�cessairement entra�ner une sp�cification explicite de ce codage, sous peine d'�tre ininterpr�tables par le r�cepteur.

Note: De nombreux serveurs HTTP actuels diffusent des donn�es cod�es selon une table de caract�res autre que "ISO-8859-1" et sans explicitation correcte. Cette attitude r�duit l'interop�rabilit� propre du r�seau et est fortement d�conseill�e. Pour compenser de manque de rigueur, certains utilisateurs HTTP proposent une option permettant de changer la table de caract�res par d�faut utilis�e lorsque des donn�es sont re�ues sans explicitation de cette information.

3.6.2 Types multiples "multipart"

Le MIME d�finit un certain nombre de types "multipart" -- encapsulation de plusieurs entit�s dans un m�me corps d'entit�. Les types "multipart" enregistr�s par l'IANA [15] n'ont pas de signification particuli�re aux yeux d'HTTP/1.0, bien que les utilisateurs dussent �tre en mesure de pouvoir reconna�tre chaque sous type de fa�on � correctement interpr�ter chaque sous partie du corps. Un utilisateur HTTP suivra les m�mes r�gles de comportement qu'un utilisateur MIME dans le cas d'une r�ception de donn�es "multipart". Les serveurs HTTP ne sont pas sens� supposer que tous les clients HTTP puissent recevoir des donn�es ainsi pr�sent�es.

Tous les types "multipart" partagent la m�me syntaxe et doivent sp�cifier un param�tres de "limite" dans la d�finition du type. Le corps du message fait lui-m�me partie du protocole et doit s'en tenir � la s�quence CRLF pour repr�senter des sauts de lignes entre les parties. Chaque partie d'un document "multipart" peut elle m�me contenir des champs d'en-t�te HTTP significatifs pour son contenu.

3.7 Produits

La sp�cification de produit permet � deux application en communication de s'identifier l'une � l'autre par un simple nom, suivi d'un "slash" ('/') et d'un num�ro de version, tous deux optionnels. Les champs acceptant cette sp�cification permettent de lister des sous-�l�ments significatifs d'un produit, s�par�s par un espace. Par convention, les produits sont rang�s par ordre d'importance dans le processus d'identification.
produit             = nom_produit ["/" version]
version             = num�ro_de_version
Exemples:

User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Server: Apache/0.8.4

Les sp�cifications de produits doivent �tre concises et directes -- l'utilisation de ce champ � vocation publicitaire ou pour diffuser des informations non essentielles est strictement interdit. Le sous-champ de num�ro de version accepte tout caract�re valide pour des noms. Il est demand� de ne pas abuser de cette permissivit� et de conserver ce champ pour l'indication de laversion � l'exclusion de toute autre information.

4. Messages HTTP

4.1 Types de messages

Les messages HTTP consistent en des requ�tes �mises par un utilisateur � destination d'un serveur, ou d'une r�ponse d'un serveur au destinataire.
HTTP-message     = Requ�te_simple        ; HTTP/0.9 messages
                 | R�ponse_simple
                 | Requ�te_compl�te      ; HTTP/1.0 messages
                 | R�ponse_compl�te
Les requ�tes et r�ponses "compl�tes" utilisent le format de message d�fini dans la RFC 822 [7] concernant la transmission d'entit�s. Ces deux messages peuvent contenir une en-t�te optionnelle ainsi que le corps de l'entit�. Le corps et l'en-t�te de l'entit� sont s�par�s par une ligne vide (soit une s�quence CRLFCRLF).
Requ�te_compl�te   = Ligne_requ�te           ; Section 5.1
                   *( En-t�te_g�n�rale       ; Section 4.3
                   | En-t�te_requ�te         ; Section 5.2
                   | En-t�te_entit� )        ; Section 7.1
                   CRLF
                   [ Corps_entit� ]          ; Section 7.2
R�ponse_compl�te    = Lgne-�tat              ; Section 6.1
                    *( En-t�te_g�n�rale      ; Section 4.3
                    | En-t�te_r�ponse        ; Section 6.2
                    | En-t�te_entit� )       ; Section 7.1
                    CRLF
                    [ Corps_entit� ]         ; Section 7.2
Les requ�te et r�ponse simple ne transportent jamais d'en-t�te. Une seule requ�te est de ce type : GET.
Requ�te_simple       &n
1000
bsp; = "GET" SP URI-vis�e CRLF

R�ponse_simple         = [ Corps_entit� ]
L'usage des requ�tes simples reste d�conseill�, car il ne permet pas au serveur de d�finir le type de m�dia dans sa r�ponse.

4.2 En-t�tes de messages

Les champs d'en-t�tes HTTP, dont l'en-t�te_g�n�rale (Section 4.3), l'en-t�te_requ�te (Section 5.2), L'en-t�te_r�ponse (Section 6.2), et l'en-t�te_entit� (Section 7.1), ont tous le m�me format g�n�rique d�crit dans le paragraphe 3.1 de la RFC 822 [7]. Chaque champ d'en-t�te consiste en un nom suivi imm�diatement d'un deux-points (":"), un espace (SP), et la valeur du param�tre. Les noms de champs sont insensibles � la casse. Les champs d'en-t�te peuvent �tre �crits sur plusieurs lignes, � condition que le premier caract�res des lignes suivantes soit SP ou HT. Cette pratique reste cependant d�conseill�e.
HTTP-header        = nom ":" SP [ valeur ] CRLF

nom                = nom_de_champ
valeur             = *( contenu | LWS )

contenu            = [les OCTETs d�crivant la valeur, pouvant 
                     �tre un *TEXT ou combinaison de noms,
                     caract�res sp�ciaux, et cha�nes entre 
                     guillemets]
L'ordre dans lequel les champs d'en-t�te sont re�us n'a pas d'importance. Une "bonne habitude" consistera toutefois � envoyer les champs d'en-t�te_g�n�rale en premier, suivi des champs d'en-t�te_requ�te ou d'en-t�te_r�ponse, puis enfin les champs d'en-t�te_entit�.

Lorsque plusieurs champs de m�me nom doivent �tre d�finis avec des valeurs diff�rentes, celles-ci doivent appara�tre comme une liste s�par�e par des virgules [#(values)]. Il doit �tre possible de combiner cette d�finition multiple � partir des paires individuelles "nom: valeur", sans changer la s�mantique du message, en ajoutant chaque valeur � la suite de la premi�re, en utilisant une virgule comme s�parateur.

4.3 En t�te g�n�rale

Certains champs d'en-t�te ont une utilit� aussi bien dans des requ�tes que dans des r�ponses, en conservant la m�me signification. Les informations d�finies dans ces champs concernent le message lui-m�me, et non l'entit� qu'il transporte.
General-Header          = Date            ; Section 10.6
                        | Pragma      &nb
1000
sp;   ; Section 10.12
Des nouveaux noms de champs d'en-t�te_g�n�rale ne peuvent �tre introduits que dans le cadre d'un changement de version du protocole. Cependant, de nouveaux champs ou champs exp�rimentaux peuvent utiliser la s�mantique de champs d'en-t�te_g�n�rale, � partir du moment ou les deux extr�mit�s de la communication sont d'accord pour le faire. Tout champ non reconnu sera consid�r� comme un champ d'en-t�te_entit�.

5. Requ�tes

Une requ�te d'un client vers un serveur inclue, dans sa premi�re ligne, la m�thode appliqu�e � la ressource, l'identificateur de cette ressource, et la version de protocole courante. Afin d'assurer la compatibilit� descendante avec la version plus limit�e HTTP/0.9 du protocole, deux formats seront valides pour exprimer une requ�te:
Request               = Requ�te_simple | Requ�te_compl�te

Simple-Request        = "GET" SP URI-vis�e CRLF

Requ�te_compl�te      = Ligne-requ�te           ; Section 5.1
                      *( En-t�te_g�n�rale       ; Section 4.3
                      | En-t�te_requ�te         ; Section 5.2
                      | En-t�te_entit� )        ; Section 7.1
                        CRLF
                       [ Corps-entit� ]         ; Section 7.2
Si un serveur HTTP/1.0 re�oit une requ�te simple, il devra r�pondre par une r�ponse simple HTTP/0.9. Un client HTTP/1.0 capable de recevoir une r�ponse_compl�te ne doit jamais g�n�rer de requ�te_simple.

5.1 Ligne de requ�te

La ligne de requ�te commence par un nom de requ�te, suivie de l'URI vis�e, du num�ro de version de protocole, et termine enfin par CRLF. Ces �l�ments sont s�par�s par des espaces. Aucun CR ni LF n'est autoris� except� la s�quence finale CRLF.
Ligne_requ�te      = M�thode SP URI-vis�e SP Version-HTTP CRLF
Notez que la diff�rence entre une ligne de requ�te_simple et de requ�te_compl�te ne r�side que dans la pr�sence du num�ro de version HTTP, et dans la possibilit� d'appeler d'autres m�thodes que GET.

5.1.1 M�thodes

La m�thode indiqu�e en t�te de ligne est destin�e � �tre appliqu�e � l'URI cible. Son nom d�pend de la casse.
M�thode           = "GET"                    ; Section 8.1
                  | "HEAD"                   ; Section 8.2
                  | "POST"                   ; Section 8.3
                  | nom_de_m�thode
La liste de m�thodes que peut accepter une ressource est dynamique; Le client est avis� de la disponibilit� de la m�thode �mise par le code de retour du message de r�ponse. Les serveurs renverront le code 501 (non impl�ment�) si la m�thode est inconnue, ou non impl�ment�e.

Les m�thodes habituellement employ�es par les applications HTTP/1.0 sont d�crites en d�tail en Section 8.

5.1.2 URI-vis�e (Request-URI)

L'URI vis�e est l'URI identifiant la ressource r�seau � laquelle doit �tre appliqu�e la m�thode.
URI-vis�e      = URIabsolue | chem_abs
Ces deux options d�pendent de la m�thode appel�e.

Seule l'option URIabsolue est permise lorsque la requ�te est envoy�e � un proxy. Le proxy devra retransmettre la requ�te, et servir d'interm�diaire pour la r�ponse. Si la requ�te est GET ou HEAD et la r�ponse pr�sente dans le cache du proxy, celui-ci pourra utiliser cette r�ponse directement, si les conditions restrictives de "date d'expiration " dans l'en-t�te sont remplies. Notez que le proxy peut � son tour retransmettre la requ�te vers un autre proxy, ou directement vers le serveur origine. Afin d'�viter qu'une requ�te ne boucle, un proxy doit reconnaitre tous sesnoms de serveurs, y compris alias, variations locales, et les adresses IP num�riques. Voici un exemple de ligne de requ�te:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.0

La forme d'URI-vis�e la plus commune est celle qui identifie une ressource sur son serveur origine ou un routeur. Dans ce cas, seul le chemin absolu chem_abs est transmis (Cf. Section 3.2.1, chem_abs). Par exemple, un client souhaitant r�cup�rer la ressource ci-dessus directement � partir de son serveur origine cr�era une connexion TCP sur le port 80 du host "www.w3.org" et �mettra la ligne de commande:

GET /pub/WWW/TheProject.html HTTP/1.0

suivi du reste de la requ�te compl�te. Notez qe le chemin absolu ne peut �tre vide; si la ressource se trouve dans la racine (pas de chemin d'acc�s) le chemin sp�cifi� devra comporter au moins le caract�re slash("/").

L'URI-vis�e est transmise sous forme d'une cha�ne encod�e, dans laquelle certains caract�res appara�tront comme une s�quence d'�chappement "% HEX HEX" telle que d�finie par la RFC 1738 [4]. Le serveur origine devra d�coder cette cha�ne afin d'acc�der correctement � la ressource.

5.2 En-t�te de requ�te

Les champs d'en-t�te de requ�te permettent de la transmission d'informations compl�mentaires sur la requ�te, et le client lui-m�me. Ces champs agissent comme "modificateurs" de la requ�te, utilisant une s�mantique identique � celle des param�tres pass�s par un appel d'une m�thode de langage de programmation de haut niveau.
Request-Header          = Authorization                 ; Section 10.2
                        | From                          ; Section 10.8
                        | If-modified-since             ; Section 10.9
                        | Referer                       ; Section 10.13
                        | User-agent                    ; Section 10.15
Des nouveaux noms de champs d'en-t�te_requ�te ne peuvent �tre introduits que dans le cadre d'un changement de version du protocole. Cependant, de nouveaux champs ou champs exp�rimentaux peuvent utiliser la s�mantique de champs d'en-t�te_requ�te, � partir du moment ou les deux extr�mit�s de la communication sont d'accord pour le faire. Tout champ non reconnu sera consid�r� comme un champ d'en-t�te_entit�.

6. R�ponse

Une fois la requ�te re�ue et interpr�t�e, un serveur r�pond par un message HTTP de r�ponse.
R�ponse             = R�ponse_simple | R�ponse_compl�te

R�ponse_simple      = [ Corps_entit� ]

R�ponse_compl�te    = Ligne_�tat             ; Section 6.1
                    *( En-t�te_g�n�rale      ; Section 4.3
                    | En-t�te_r�ponse        ; Section 6.2
   &nbs
1000
p;                | En-t�te_entit� )       ; Section 7.1
                     CRLF
                    [ Corps_entit� ]         ; Section 7.2
Une r�ponse_simple ne peut �tre envoy� qu'en r�ponse d'une requ�te_simple HTTP/0.9 ou si le serveur ne supporte que la version limit�e de protocole HTTP/0.9. Si un client �met une requ�te_compl�te HTTP/1.0 et re�oit une r�ponse ne commen�ant pas par une ligne_�tat, il devra conclure qu'il s'agit d'une r�ponse_simple et l'interpr�tera en cons�quence. Notez qu'une r�ponse ne contient que le corps_entit�, et se termine par la fermeture de la connexion par le serveur.

6.1 Ligne d'�tat

La premi�re ligne d'un message de r�ponse_compl�te est la ligne d'�tat, constitu�e d'une indication du num�ro de version du protocole, suivi du code num�rique de la r�ponse, suivi enfin d'une explicitation textuelle de cette r�ponse, chaque �l�ment �tant s�par� par un espace. Aucun CR ni LF ne peuvent y appara�tre � l'exception de la s�quence CRLF finale.
Ligne_�tat        = Version_HTTP SP Code_�tat SP Raison CRLF
La ligne d'�tat d�butant toujours par ce num�ro de version et le code de r�ponse:

"HTTP/" 1*DIGIT "." 1*DIGIT SP 3DIGIT SP

(ex., "HTTP/1.0 200 "), la seule pr�sence de cette expression est suffisante pour diff�rentier une r�ponse_simple d'une r�ponse_compl�te �mise en retour d'une requ�te sousle protocole HTTP/1.0. Le format de r�ponse_simple n'interdit cependant pas qu'une telle expression soit plac�e en t�te du corps d'entit�, provoquant ainsi une erreur d'interpr�tation de la part du r�cepteur. Dans la pratique, la plupart des serveurs HTTP/0.9 ne peuvent g�n�rer que des r�ponses de type "text/html", ce qui en principe, �limine le risque d'une telle confusion.

6.1.1 Code d'�tat et raison explicite

L'�l�ment code_�tat est un nombre entier � 3 chiffres indiquant le succ�s ou la cause d'erreur de la transaction. L'�l�ment "raison" est un commentaire textuel destin� � identifier explicitement la cause d'erreur. Le code d'�tat sera en g�n�ral exploit� par des automates. La raison est � destination de notre intellect humain. Celle-ci n'est pas obligatoirement trait�e ni report�e par le client.

Le premier chiffre du code d'�tat indique la classe g�n�rale de la r�ponse. Les deux derniers n'ont pas de r�le de classification particulier. Le premier chiffre peut prendre 5 valeurs:
Code Classe< 1000 /font> Usage
1xx Information Non utilis�, pour usage futur
2xx Succ�s L'action a �t� correctement re�ue, interpr�t�e, et ex�cut�e.
3xx Redirection Une d�cision suppl�mentaire doit �tre prise pour terminer la requ�te
4xx Erreur Client La requ�te pr�sente une erreur de forme et ne peut �tre satisfaite
5xx Erreur Serveur La requ�te est valide, mais le serveur ne peut la satisfaire

Les valeurs actuellement reconnues sous HTTP/1.0, et les phrases types d'explicitation associ�es, sont pr�sent�es ci-dessous. Ces phrases ne sont que recommand�es -- elles peuvent �tre remplac�es par des variations locales sans affecter le protocole. Ces codes sont int�gralement list�s en section 9.

Code_�tat   = "200"   ; OK                      OK
            | "201"   ; Created                 Cr��
            | "202"   ; Accepted                Accept�
            | "204"   ; No Content              Pas de contenu
            | "301"   ; Moved Permanently       Changement d'adresse d�finitif
            | "302"   ; Moved Temporarily       Changement temporaire
            | "304"   ; Not Modified            Non modifi�
            | "400"   ; Bad Request             Requ�te incorrecte
            | "401"   ; Unauthorized            Non autoris�
            | "403"   ; Forbidden               Interdit
            | "404"   ; Not 
1000
Found               Non trouv�
            | "500"   ; Internal Server Error   Erreur interne serveur
            | "501"   ; Not Implemented         Non impl�ment�
            | "502"   ; Bad Gateway             Erreur de routeur
            | "503"   ; Service Unavailable     Indisponible
            | autres_codes
autres_codes = 3DIGIT

Raison  = *[TEXT, sauf CR, LF]
La liste des codes HTTP est extensible, mais seuls les codes ci-dessus sont utilis�s dans la pratique courante. Les applications HTTP n'ont pas n�cessairement � conna�tre la signification de tous les codes enregistr�s, bien que ce soit souhaitable pour des raisons �videntes. Au minimum, les applications devront pouvoir comprendre le premier chiffre de ce code, et comprendre tout num�ro de r�ponse non identifi� comme le num�ro x00 de la classe, indiquant ainsi la d�finition g�n�rique de la classe. Aucune r�ponse non identifi�e ne peut �tre enregistr�e en cache.

Par exemple, si un code "inconnu" 431 est re�u par le client, celui-ci peut interpr�ter sans doute possible qu'un probl�me est survenu, et peut r�agir comme s'il avait re�u le code 400. Dans de tels cas, il est fortement conseill� que l'application reporte le corps de l'entit� de r�ponse, dans la mesure o� il y a de fortes chances que celui-ci contienne des informations "en clair" sur la nature de l'erreur.

6.2 En-t�te de r�ponse

Les champs d'en-t�te de r�ponse v�hiculent certaines informations compl�mentaires concernant cette r�ponse, et qui ne peuvent �tre mentionn�es dans la ligne d'�tat. Ces champs donnent des informations sur le serveur lui-m�me, et sur les actions � mener par la suite pour acc�der � la ressource demand�e.
Response-Header    = Location            ; Section 10.11
                   | Server              ; Section 10.14
                   | WWW-Authentificate  ; Section 10.16
Des nouveaux noms de champs d'en-t�te_r�ponse ne peuvent �tre introduits que dans le cadre d'un changement de version du protocole. Cependant, de nouveaux champs ou champs exp�rimentaux peuvent utiliser la s�mantique de champs d'en-t�te_r�ponse, � partir du moment ou les deux extr�mit�s de la communication sont d'accord pour le faire. Tout champ non reconnu sera consid�r� comme un champ d'en-t�te_entit�.

7. Entit�s

Les messagesde requ�te et de r�ponses contiennent g�n�ralement une entit� dans laquelle est incluse des �l�ments de requ�te ou de r�ponse. Une entit� est d�finie par une en-t�te d'entit�, et dans la plupart des cas par un corps d'entit�. Dans ce qui suit "l'�metteur" et le "r�cepteur" se r�f�rent tant�t au client, tant�t au serveur, suivant l'agent qui �met le message.

7.1 En-t�te d'entit�

Les champs d'en-t�te d'entit� v�hiculent certaines m�tainformations concernant le corps d'entit�, ou, si celui-ci n'existe pas, la ressource vis�e par la requ�te.
En-t�te_entit�      = Allow                    ; Section 10.1
                    | Content-Encoding         ; Section 10.3
                    | Content-Length           ; Section 10.4
                    | Content-Type             ; Section 10.5
                    | Expires                  ; Section 10.7
                    | Last-Modified            ; Section 10.10
                    | champ_en-t�te

champ_en-t�te       = en-t�te_HTTP
Le m�canisme d'extension de l'en-t�te d'entit� permet la d�finition d'autres champs, ceux-ci n'�tant pas obligatoirement reconnus par le r�cepteur. Tout champ non identifi� doit �tre ignor�, ou, dans le cas d'un proxy, retransmis tel quel.

7.2 Corps d'entit�

Le corps d'entit� (s'il existe) envoy� dans un message de requ�te ou de r�ponse HTTP est dans un format et sous un encodage d�fini par les champs d'en-t�te d'entit�.
Corps_entit�          = *OCTET
Un corps d'entit� n'appara�t dans un message de requ�te que dans la mesure ou le type de requ�te le demande. La pr�sence de ce corps est signal�e par la pr�sence d'un champ Content-Length dans les champs d'en-t�te de la requ�te. Les requ�tes HTTP/1.0 contenant un corps doivent n�cessairement pr�senter un champ d'en-t�te Content-Length valide.

Dans les r�ponses, la pr�sence d'un corps d'entit� est fonction � la fois de la nature de la requ�te pr�alable, et du code d'�tat renvoy�. Toute r�ponse � une requ�te de type HEAD ne peut contenir de corps d'entit&eacute;, m�me si les champs d'en-t�te pr�sents pr�tendent le contraire. Les codes d'�tat 1xx (informations), 204 (pas de contenu), et 304 (non modifi�) supposent implicitement ou explicitement l'absence de tout corps d'entit�. Toutes les autres r�ponses peuvent contenir un corps d'entit�, ou � d�faut, un champ Content-Length sp�cifi� � z�ro (0).

7.2.1 Type

Lorsqu'un corps d'entit� est pr�sent dans le message, le type de donn�es incluses dans ce corps est pr�cis� par les champs d'en-t�te Content-Type et Content-Encoding. Ceux-ci d�finissent un mod�le d'encodage arborescent � deux niveaux:
Corps_entit�     = Content-Encoding( Content-Type( donn�es ) )
Le Content-Type le type de m�dia des donn�es de la ressource. Un champ Content-Encoding peut �tre utilis� pour sp�cifier un traitement ou encodage suppl�mentaire effectu� sur le type de donn�es, souvent dans un but de compression, et apparaissant comme une propri�t� de la ressource. Par d�faut, aucun encodage n'est appliqu� aux donn�es (la ressource est enregistr�e et directement accessible sous forme utilisable).

Tout message HTTP/1.0 contenant un corps d'entit� doit au moins faire appara�tre le champ Content-Type d�finissant la nature des donn�es de la ressource. Si et seulement si aucun type de m�dia n'est d�fini (uniquement dans le cas o� le champ Content-Type n'existe pas, comme dans le cas de r�ponses simples), le r�cepteur pourra �tre amen� � d�terminer ce type par lui-m�me, en inspectant le contenu des donn�es, ou en se basant sur l'extension utilis�e dans l'URL d�finissant l'acc�s � la ressource. Si le m�dia demeure non identifiable, le type par d�faut "application/octet-stream".

7.2.2 Longueur

Lorsqu'un corps d'entit� est pr�sent dans un message, la longueur de ce corps doit �tre explicit�e par l'un des deux moyens suivants. Si un champ Content-Length est pr�sent, sa valeur associ�e repr�sente la longueur en octets du corps d'entit�. Autrement, c'est la d�connexion par le serveur qui marque la fin du corps d'entit�.

Cette derni�re m�thode ne peut �tre utilis�e pour marquer la fin d'une requ�te, car la possibilit� doit �tre laiss�e au serveur d'envoyer une r�ponse. C'est pourquoi le protocole HTTP/1.0 pr�cise que toute requ�te contenant un corps d'entit� doit mentionner sa longueur dans un champ d'en-t�te Content-Length valide. Si tet est le cas, et que ce champ n'existe pas dans le message, et dans la mesure o� le serveur ne peut calculer ou d�terminer la longueur de ce corps, ce dernier r�pondra par un message de code 400 (erreur client).

Note: Certains anciens serveurs sp�cifient un champ Content-Length erron� lorsque la r�ponse contient des donn�es dynamiquement g�n�r�es par le serveur. Il est signal� ici que cet �tat de fait ne sera plus tol�rable dans les nouvelles versions d'HTTP.

8. D�finition des m�thodes

L'ensemble des m�thodes courantes d'HTTP/1.0 est d�fini ci-dessous. Bien que cet ensemble puisse �tre compl�t�, il est pr�cis� ici que des m�thodes additionnelles impl�ment�es par des clients ou serveurs distincts ne peuvent partager la m�me s�mantique que si leur fonction est identique.

8.1 GET

La m�thode GET signifie "r�cup�rer" le contenu quel qu'il soit de la ressource (sous forme d'une entit�) identifi�e par l'URI-vis�e. Si l'URI-vis�e identifie un processus g�n�rant dynamiquement des donn�es, ce sont les donn�es produites qui sont renvoy�es dans l'entit� au lieu du source de l'ex�cutable appel�, sauf si ce texte lui-m�me est la sortie du processus.

La s�mantique de la m�thode GET introduit une notion conditionnelle si la requ�te inclue le champ d'en-t�te If-Modified-Since. Une m�thode GET conditionnelle ne r�cup�re la ressource que si celle-ci a �t� modifi�e depuis la date associ�e au champ If-Modified-Since, comme indiqu� en Section 10.9. La m�thode GET conditionnelle est utilis�e pour r�duire la charge du r�seau en permettant � des ressources en cache d'�tre rafra�chies sans multiplier les requ�tes ou transf�rer des donn�es inutiles.

8.2 HEAD

La m�thode HEAD est identique � la m�thode GET, sauf qu'elle ne demande pas la transmission du corps d'entit� de la ressource en retour. Seule les m�tainformations constituant l'en-t�te HTTP de la ressource sont envoy�es. Cette m�thode permet de ne demander que les informations concernant la ressource (au sens d'HTTP). Elle est utilis�e � des fins de tests d'hyperliens, v�rification d'existence ou d'actualit� d'une ressource.

Il n'existe pas de m�thode HEAD conditionnelle comme pour la m�thode GET. Si un champ d'en-t�te If-Modified-Since est pr�sent dans une requ�te HEAD, il devra �tre ignor�.

8.3 POST

La m�thode POST est utilis�e pour indiquer au serveur de soumettre l'entit� contenue dans le message � la ressource identifi�e par l'URI-vis�e. POST est destin�e � fournir un moyen uniforme pour les op�rations suivantes: La fonction effective de la m�thode POST est d�finie par le serveur et d�pend de l'URI d�sign�e. L'entit� "post�e" est subordonn�e �cette URI dans le m�me sens qu'un fichier est subordonn� au r�pertoire qui le contient, un article est subordonn� au groupe de nouvelles � qui il a �t� post�, ou un enregistrement � une base de donn�es.

La r�solution d'une m�thode POST ne signifie pas forc�ment la cr�ation d'une entit� sur le serveur origine, ni une possibilit� d'acc�s futur � ces informations. En d'autres termes, le r�sultat d'un POST n'est pas n�cessairement une ressource associable � une URI. Dans ce cas, une r�ponse de code 200 (OK) ou 204 (pas de contenu) est la r�ponse la plus appropri�e, suivant que la r�ponse contient ou non une entit� pour d�crire le r�sultat.

Si une ressource a �t� cr��e sur le serveur origine, la r�ponse sera du type 201 (cr��) et contiendra l'entit� (de pr�f�rence du type "text/html") qui d�crira les informations sur la requ�te et contiendra une r�f�rence sur la nouvelle ressource.

Un champ Content-Length valide est demand� dans toute requ�te POST HTTP/1.0. Un serveur HTTP/1.0 r�pondra par un message 400 (requ�te incorrecte) s'il ne peut d�terminer la longueur du contenu du message.

Les applications ne peuvent enregistrer en cache les r�ponses � des requ�tes POST dans la mesure o� il n'est absolument pas certain qu'une r�ponse ult�rieure �mise dans les m�mes conditions produise le m�me r�sultat.

9. D�finition des codes d'�tat

Tous les codes d'�tat actuellement valides sont d�crits ci-dessous, en pr�cisant quelle m�thode peut en �tre l'origine, ainsi que les m�tainformations � fournir dans la r�ponse.

9.1 Information 1xx

Cette classe de r�ponse est actuellement r�serv�e pour de futures applications, et consiste en des messages avec une ligne d'�tat, des champs d'en-t�tes �ventuels, et termin�s par une ligne vide (CRLFCRLF).

HTTP/1.0 ne d�finit actuellement aucun de ces codes, lesquels ne constituent pas une r�ponse valide � des requ�tes HTTP/1.0. Il restent cependant exploitables � titre exp�rimental, d�passant le contexte de la pr�sente sp�cification.

9.2 Succ�s 2xx

Cette classe pr�cise que la requ�te du client a �t� correctement transmise, interpr�t�e, et ex�cut�e.

200 OK

La requ�te a abouti. L'information retourn�e en r�ponse d�pend de la requ�te �mise, comme suit:

GET

HEAD POST

201 Cr��

La requ�te a abouti, et une nouvelle ressource r�seau en r�sulte.

La nouvelle ressource cr��e est accessible par l'URI(s) renvoy�e dans l'entit� de la r�ponse. La ressource doit �tre cr��e avant que ce code ne soit envoy�. Si la cr�ation ne peut pas �tre op�r�e imm�diatement, le serveur devra indiquer dans la r�ponse quand la ressource deviendra disponible ou retourner un message de type 202 (accept�e).

Actuellement, seule la m�thode POST peut conduire � la cr�ation d'une ressource.

202 Accept�e

La requ�te a �t� re�ue et interpr�t�e correctement, mais son traitement n'est pas termin�. La requ�te peut ou ne peut �tre r��mise pendant le traitement, suivant que le serveur autorise ou n'autorise pas un arr�t du processus en cours. Il n'est pas possible de r��mettre un code d'�tat dans ce type d'op�ration asynchrone.

La r�ponse 202 est intentionnellement non bloquante. Son r�le est de permettre au serveur d'accepter une requ�te d'un autre processus (par exemple d'un automate se d�clenchant � dates fixes) sans que la connexion avec le client ne reste active pendant le d�roulement du traitement. L'entit� retourn�e par la r�ponse rendra compte de la requ�te, et devra fournir un pointeur sur un composant d'information (�tat courant du traitement), ou donner une estimation de la date de conclusion probable d�finitive.

204 Pas de contenu

La requ�te a abouti et le serveur n'a rien � envoyer en retour.

Un utilisateur recevant ce message n'aura pas � rafra�chir son affichage, et maintiendra celui qui aura conduit � l'�mission de la requ�te. Cette r�ponse a �t� instaur�e pour permettre � un utilisateur de d�rouler des scripts ou autres actions sans modifier l'affichage en cours. La r�ponse peut cependant contenir des m�tainformations dans des champs d'en-t�te, concernant le document affich� dans la fen�tre active de l'utilisateur.

9.3 Redirection 3xx

Cette classe de messages pr�cise que le client doit provoquer une action compl�mentaire pour que la requ�te puisse �tre conduite jusqu'� sa r�solution finale. L'action peut �tre d�clench�e par l'utilisateur final si et seulement si la m�thode invoqu�e �tait GET ou HEAD. Un client ne peut automatiquement rediriger une requ�te plus de 5 fois. Il est suppos�, si cela arrive, que la redirection s'effectue selon une boucle infinie.

300 Choix multiples

Ce code n'est pas utilis� directement par les applications HTTP/1.0 mais est d�fini pour servir de r�ponse par d�faut � des codes 3xx non reconnus.

Il signifie en principe que la ressource vis�e est disponible en un ou plusieurs autres points du r�seau. Sauf dans le cas d'une requ�te de type HEAD, la r�ponse doit contenir une entit� dans laquelle sont list�es les caract�ristiques et localisations de la ressource demand�e, � charge de l'utilisateur de choisir laquelle est la plus appropri�e. Si le serveur affiche une pr�f�rence de choix, il doit en inscrire l'URL dans un champ Location; Certains clients utiliseront ce champ pour activer une redirection automatique.

301 Changement d'adresse d�finitive

La ressource demand�e est d�sormais accessible via une autre URL, toute nouvelle requ�te lui �tant appliqu�e devant utiliser cette nouvelle URL. Les clients impl�mentant une fonction de redirection automatique l'activeront et r��mettront une requ�te avec l'URI correcte, lorsque c'est possible.

La nouvelle URL sera indiqu�e dans le champ d'en-t�te Location de la r�ponse. Sauf dans le cas d'une requ�te de type HEAD, le corps d'entit� de la r�ponse contiendra une note succincte avec un hyperlien vers la nouvelle URL.

Si le code d'�tat 301 est re�u en r�ponse � une requ�te POST, le client ne pourra rediriger automatiquement la requ�te sans en avoir demand� confirmation � l'utilisateur. En effet, il n'est pas dit que les conditions ayant �t� � l'origine de la requ�te n'aient pas chang�.

Note: Certains clients, lorsqu'ils redirigent une requ�te POST, transforment par erreur cette requ�te en une requ�te GET apr�s r�ception d'un code 301.

302 Changement d'adresse temporaire

La ressource demand�e est actuellement et temporairement accessible via une autre URL. La redirection n'�tant pas d�finitive, le client continuera d'utiliser l'URI-vis�e originale.

La nouvelle URL temporaire doit �tre sp�cifi�e en r�ponse dans un champ Location. Sauf dans le cas d'une requ�te de type HEAD, le corps d'entit� de la r�ponse contiendra une note succincte avec un hyperlien vers la nouvelle URI.

Si le code d'�tat 302 est re�u en r�ponse � une requ�te POST, le client ne pourra rediriger automatiquement la requ�te sans en avoir demand� confirmation � l'utilisateur. En effet, il n'est pas dit que les conditions ayant �t� � l'origine de la requ�te n'aient pas chang�.

Note: Certains clients, lorsqu'ils redirigent une requ�te POST, transforment par erreur cette requ�te en une requ�te GET apr�s r�ception d'un code 302.

304 Non modifi�

Ce message est &eacute;mis en retour d'une requ�te GET conditionnelle, lorsque l'acc�s � la ressource est permis, mais que celle-ci n'a pas �t� modifi�e depuis la date et l'heure pr�cis�e dans le champ If-Modified-Since de la requ�te. Le serveur n'�met aucune entit� li�e � ce message. L'en-t�te contiendra des informations � destination du gestionnaire de cache, ou ayant �t� modifi�es sans que cela n'intervienne sur la date de derni�re modification de la ressource elle-m�me. On y trouvera par exemple les champs: Date, Server, et Expires. Un syst�me de cache recevant ce message devra remettre � jour les entit�s qu'il g�re.

9.4 Erreur client 4xx

La classe 4xx de codes d'�tat est d�finie pour r�pondre au cas o� il semble que le client ait commis une erreur. Si le client n'a pas encore achev� la transmission de sa requ�te lorsqu'il re�oit le code 4xx, alors il doit cesser toute transmission. Except� lorsque ce code r�pond � une requ�te de type HEAD, le serveur pourra y inclure une entit� explicitant la nature de l'erreur, et indiquant s'il s'agit d'une condition d'erreur temporaire ou permanente. Ces codes sont valides pour tous les types de requ�te.

Note: Si le client �met des donn�es, les impl�mentations de TCP devront s'assurer que le client a bien �mis tous les accus�s de r�ception des paquets transportant la r�ponse avant de couper la connexion d'entr�e. Si le client continue d'envoyer des donn�es alors que le serveur a ferm� la liaison, le TCP serveur �mettra en retour un paquet RST (reset), qui risque de stimuler un effacement pr�matur� de toutes les donn�es re�ues dans les tampons interne du TCP client (y compris les donn�es concernant la r�ponse) avant que celles-ci n'aient pu �tre transmises � l'application HTTP.

400 Requ�te incorrecte

La requ�te n'a pu �tre reconnue par le serveur pour cause d'une syntaxe incorrecte.

Le client n'est pas sens� �mettre de nouveau cette requ�te sans l'avoir corrig�e au pr�alable.

401 Non autoris�

La requ�te demand�e n�cessite une authentification de la part de l'utilisateur. La r�ponse doit inclure un champ d'en-t�te WWW-Authenticate (Section 10.16) indiquant la demande d'authentification de la ressource. Le client est sens� r�p�ter la demande en sp�cifiant un champ d'en-t�te d'authentification correct (Section 10.2). Si la requ�te comportait d�j� des donn�es d'authentification, la r�ponse 401 indique les droits sont actuellement insuffisants pour cette authentification. Si la r�ponse 401 contient la m�me demande que la r�ponse pr�c�dente, et l'utilisateur a d�j� suivi le processus d'identification au moins une fois, l'entit� pr�sent�e dans la r�ponse doit �tre pr�sent�e � l'utilisateur, dans la mesure o� les informations qu'elle contient peuvent �tre de nature � expliquer la faute. L'authentification des acc�s HTTP est d�crite en d�tail en Section 11.

403 Interdit

Le serveur a compris la requ�te, mais refuse de la satisfaire.

Une d�marche d'authentification n'y fera rien et cette requ�te ne doit pas �tre renouvel�e. Si la m�thode invoqu�e est diff�rente de HEAD et le serveur souhaite rendre public la raison pour laquelle il refuse le traitement, il le fera dans l'entit� li�e � cette r�ponse. Ce code d'�tat est souvent utilis� lorsque le serveur ne souhaite pas s'�tendre sur les raisons pour lesquelles il refuse un acc�s, ou parce que c'est la seule r�ponse qui convienne.

404 Non trouv�

Le serveur n'a trouv� aucune ressource correspondant � l'URI-vis�e. Aucune indication n'est donn�e pour savoir si l'erreur est temporaire ou permanente. Si le serveur ne d�sire pas donner les raisons de l'�chec dans ce cas, il peut utiliser le message de code 403 � la place de celui-ci.

9.5 Erreur serveur 5xx

Les r�ponses de code d'�tat d�butant par un "5" indiquent une situation dans laquelle le serveur sait qu'il est la cause de l'erreur, ou est incapable de fournir le service demand�, bien que la requ�te ait �t� correctement formul�e. Si le client re�oit cette r�ponse alors qu'il n'a pas encore termin� d'envoyer des donn�es, il doit cesser imm�diatement toute �mission vers le serveur. Except� lorsque la requ�te invoqu�e est de type HEAD, le serveur peut inclure une entit� d�crivant les causes de l'erreur, et s'il s'agit d'une condition permanente ou temporaire. Ces r�ponses s'appliquent quelque soit la requ�te, et ne n�cessitent pas de champs d'en-t�te particuliers.

500 Erreur serveur interne

Le serveur a �t� en pr�sence d'un �v�nement inattendu, qui l'a emp�ch� de traiter la requ�te correctement.

501 Non impl�ment�

Le serveur ne supporte pas les fonctionnalit�s requises pour satisfaire la requ�te. Ceci est typique du cas o� malgr� une syntaxe conforme, le serveur ne reconna�t pas la m�thode invoqu�e, et ne peut l'appliquer sur aucune ressource.

502 Erreur de routeur

Ce serveur, agissant en tant que proxy ou routeur, a re�u une r�ponse invalide de la part du serveur amont contact� pour satisfaire la requ�te.

503 Service indisponible

Les serveur ne peut momentan�ment traiter la requ�te, pour cause de surcharge ou de maintenance. Ceci implique une condition de faute temporaire, qui peut dispara�tre apr�s un certain laps de temps .

Note: L'existence de ce code d'�tat 503 n'implique pas que le serveur l'utilise d�s qu'il est surcharg�. Certains serveurs dans cette situation refuseront tout bonnement la connexion.

10. D�finition des champs d'en-t�te

Cette section d�crit la syntaxe et la s�mantique des champs d'en-t�te essentiels utilis�s dans le cadre d'HTTP/1.0. Pour les champs g�n�raux et d'entit�, l'�metteur et le r�cepteur peuvent tour � tour d�signer le client ou le serveur, suivant celui qui est � l'origine de la transaction.

10.1 Allow

Le champ Allow (entit�) liste l'ensemble des m�thodes support�es par la ressource d�sign�e par l'URI-vis�e. La fonction de ce champ est simplement d'informer le r�cepteur sur les m�thodes qu'il peut utiliser sur la ressource. Ce champ n'est pas autoris� dans un requ�te de type POST, et doit �tre ignor� s'il appara�t dans ce dernier cas.
Allow          = "Allow" ":" 1#m�thode
Exemple:

Allow: GET, HEAD

Ce champ ne pourra pr�venir le client de tenter d'appliquer d'autres m�thodes que celles accept�es par la ressource. Il n'est l� qu'� titre informatif. Les m�thodes accept�es sont d�finies par le serveur origine pour chaque requ�te re�ue.

Un proxy ne doit pas modifier le champ d'en-t�te Allow m�me s'il ne conna�t pas toutes les m�thodes sp�cifi�es, car l'utilisateur peut avoir � sa disposition d'autres moyens de communiquer avec le serveur origine.

Le champ d'en-t�te Allow n'indique pas si les m�thodes indiqu�es sont impl�ment�es par le serveur (seulement si elles sont � priori acceptables par la ressource).

10.2 Authorization

Un utilisateur d�sireux de s'identifier aupr�s d'un serveur-en g�n�ral, mais pas n�cessairement, apr�s r�ception d'une r�ponse 401-peut le faire en incluant un champ d'en-t�te Authorization dans sa nouvelle requ�te. Ce champ contiendra les donn�es d'autentification de l'utilisateur pour la ressource consid�r�e.
Authorization        = "Authorization" ":" donn�es_identification
L'authentification de connexions HTTP est d�crite en Section 11. Si la requ�te est authentifi�e, et un domaine d'acc�s attribu�, les m�mes param�tres d'authentification seront reconnus pour toute autre ressource appartenant � ce domaine.

Les r�ponses � une requ�te contenant des donn�es d'identification ne peut �tre enregistr�e en cache.

10.3 Content-Encoding

Le champ Content-Encoding (entit�) est utilis� pour compl�ter l'information de type de m�dia. Lorsqu'il est pr�sent, il indique sous quel codage la ressource est enregistr�e, et par voie de cons�quence, quel traitement doit �tre op�r� sur l'entit� pour pouvoir exploiter celle ci sous son type de m�dia original, d�fini dans le champ d'en-t�te Content-Type. Le champ Content-Encoding a �t� � l'origine intaur� pour permettre la mise � disposition de ressource sous forme compress�es, de sorte qu'il soit possible d'en conna�tre le type de m�dia d'origine.
Content-Encoding        = "Content-Encoding" ":" type_codage
Les valeurs actuellement reconnues sont d�crites en Section 3.5. Exemple:

Content-Encoding: x-gzip

Le type d'encodage est une caract�ristique de la ressource identifi�e par l'URI-vis�e. Typiquement, la ressource est enregistr�e encod�e, et le d�codage ne se fera qu'� l'utilisation finale de celle-ci.

10.4 Content-Length

Le champ d'en-t�te Content-Length (entit�) indique la taille du corps d'entit�, sous la forme d'un nombre d'octets exprim� en d�cimal, envoy� au r�cepteur. Dans le cas d'une requ�te de type HEAD, il renvoie la taille du corps d'entit� que le serveur aurait renvoy� si la ressource avait fait l'objet d'une requ�te GET.
Content-Length        = "Content-Length" ":" 1*DIGIT
Exemple:

Content-Length: 3495

Les applications utiliseront ce champ pour transmettre la taille de l'entit� jointe, ind�pendamment du type de m�dia de l'entit�. Un champ Content-Length avec une valeur valide est obligatoire dans toute requ�te HTTP/1.0 contenant un corps d'entit�.

Toute valeur num�rique sup�rieure ou �gale � z�ro est valide. La section 7.2.2 d�crit comment �valuer la taille d'un corps d'entit� de r�ponse, si ce champ est omis.

Note: La signification de ce champ est l�g�rement diff�rente de celle de son �quivalent MIME, lequel est un champ optionnel d�fini � l'int�rieur du type "message/external-body". Pour HTTP, il doit �tre pr�cis� m�me si la longueur du corps d'entit� peut �tre connu avant la transmission.

10.5 Content-Type

Le champ d'en-t�te Content-Type (entit�) indique le type de m�dia envoy� au r�cepteur dans le corps d'entit�, ou, si la m�thode invoqu�e est HEAD, le type de m�dia du corps d'entit� qui aurait �t� envoy� si la ressource avait fait l'objet d'une requ�te de type GET.
Content-Type        = "Content-Type" ":" type_de_m�dia
Les types de m�dia sont d�finis en Section 3.6. Exemple:

Content-Type: text/html

Une pr�sentation d'autres m�thodes pour identifier le type de m�dia est donn�e en Section 7.2.1.

10.6 Date

Le champ d'en-t�te Date (g�n�ral) donne la date et l'heure � laquelle le message a �t� "r�dig�", et utilise la s�mantique de dates de la RFC 822. La valeur de ce champ est une date dans un des formats HTTP d�crits � la Section 3.3.
Date          = "Date" ":" date_HTTP
Exemple:

Date: Tue, 15 Nov 1994 08:12:31 GMT

Si un message est re�u en direct du client (pour les requ�tes) ou du serveur origine (pour les r�ponses), on peut affirmer qu'il s'agit aussi de la date d'arriv�e au r�cepteur. En outre, dans la mesure o� la date - d�livr�e par l'origine - est un param�tre important pour tout ce qui touche � la gestion des caches, il est vivement conseill� que les serveurs origine renseignent syst�matiquement ce champ � la constitution de tout message. Les clients peuvent se limiter � l'envoi d'une date lorsque la requ�te contient un corps d'entit�, comme dans le cas d'une requ�te POST, et encore cette pratique n'est pas obligatoire. Un message re�u et non dat� se verra assigner une date par le r�cepteur si ce message doit �tre enregistr� en cache ou rerout� via un protocole qui exige une Date.

En th�orie, la date doit repr�senter l'instant juste avant l'�mission. En pratique, c'est � la constitution du message que la date est inscrite.

10.7 Expires

Le champ d'en-t�te Expires (entit�) indique la date et l'heure � partir de laquelle le message doit �tre consid�r� comme obsol�te. Ceci permet de sugg�rer la notion de "validit� temporaire" de l'information. Les applications ne doivent pas enregistrer ces entit�s dans leur cache apr�s la date sp�cifi�e. Le pr�sence d'un champ Expires ne signifie pas que la ressource originale n'a pas chang� ou n'existe plus � cette date, avant, ou apr�s cette date. Cependant, tout serveur sachant, ou pouvant supposer que cette ressource aura chang� � une certaine date devra de pr�f�rence inclure un champ Expires avec cette date. Le format de la date mentionn�e est une date absolue telle que d�finie � la Section 3.3.
Expires         = "Expires" ":" date-HTTP
Exemple:

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Si la date indiqu�e dans ce champ est �gale ou ant�rieure � la date mentionn�e dans le champ date du m�me en-t�te, le serveur ou routeur, ou application ne devra pas enregistrer cette ressource dans son cache. Si la ressource est dynamique par nature, comme c'est le cas pour des r�sultats de processus g�n�rateurs de donn�es, les entit�s produites se verront attribu�es un champ Expires renseign� d'une fa�on correspondante � ce "dynamisme".

Le champ Expires ne peut pas �tre utilis� pour forcer un client � rafra�chir ou recharger une ressource. Sa s�mantique ne concerne que les m�canismes de gestion du cache, lesquels n'utilisent ce param�tre que pour savoir si le serveur peut encore utiliser l'instance cach�e lorsqu'une requ�te destin�e � ce document est � nouveau pr�sent�e.

Les clients HTTP disposent souvent d'un m�canisme d'historique, impl�ment� sous forme d'un bouton "Back" et/ou d'une liste de "documents pr�c�dents", utilis�s pour recharger un document pr�c�demment charg� pendant la session courante. Par d�faut, le champ Expires n'influe pas sur ces m�canismes. Si l'entit� est stock�e par un tel m�canisme, elle pourra �tre recharg�e m�me si sa date d'expiration est pass�e, sauf si l'utilisateur a explicitement configur� le client pour r�g�n�rer les documents ayant expir�.

Note: Il est encourag� que les applications fassent preuve d'une certaine tol�rance quant � des impl�mentations erron�es ou incompl�tes du champ Expires. Une valeur z�ro (0) ou une date pr�sent�e sous un mauvais format signifient "expiration imm�diate". Bien que ces valeurs ne soient pas valides dans le cadre d'HTTP/1.0, une impl�mentation tol�rante est toujours souhaitable.

10.8 From

Le champ d'en-t�te From (requ�te), si pr�sent, devra contenir l'adresse e-mail Internet de l'utilisateur "humain" contr�lant le client �metteur de la requ�te. Cette adresse doit �tre cod�e sous une forme utilisable par les machines, telle que d�finie dans la RFC 822 [7] (et RFC 1123 [6]):
From        = "From" ":" adresse_mail
Exemple:

From: webmaster@w3.org

Ce champ est exploit� � des fins de statistiques, et pour identifier la source de requ�tes non valides ou non autoris�es. Il ne doit cependant pas �tre utilis� dans un contexte de s�curisation d'acc�s. Il doit �tre interpr�t� comme l'identification de la personne ayant formul� la requ�te, et qui accepte la responsabilit� de la m�thode employ�e. En particulier, les robots devront renseigner ce champ afin que son responsable d'exploitation puisse �tre contact� en cas de dysfonctionnement � l'autre extr�mit�.

L'adresse e-mail Internet dans ce champ doit �tre s�par� de la mention du nom de l'ordinateur d'o� a �t� �mis la requ�te. Par exemple, lorsque la requ�te a transit� par l'interm�diaire d'un proxy, l'adresse de la source originale doit y �tre mentionn�e.

Note: Le client ne peut donner de valeur pour ce champ Form sans l'autorisation de l'utilisateur, car cette information rentre dans le cadre de la protection des donn�es priv�es et des droits individuels. Il est fortement recommand� que le client laisse le choix � l'utilisateur de pouvoir activer, d�sactiver, et modifier la valeur �mise dans ce champ avant �mission de toute requ�te.

10.9 If-Modified-Since

Le champ d'en-t�te If-Modified-Since (requ�te) est utilis� lors d'une requ�te de type GET pour en �mettre une forme conditionnelle: Si la ressource vis�e n'a pas �t� modifi�e depuis la date mentionn�e dans ce champ, la copie de la ressource ne sera pas renvoy�e par le serveur; En lieu et place, une r�ponse de type 304 (non modifi�) sera renvoy�e sans aucun corps d'entit� associ�.
If-Modified-Since        = "If-Modified-Since" ":" date_HTTP
Exemple:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

Une m�thode GET conditionnelle requiert la transmission d'une ressource uniquement si celle-ci a �t� modifi�e apr�s la date indiqu�e dans le champ If-Modified-Since. L'algorithme utilis� pour d�terminer cette condition prend en compte les cas suivants:

Le but de cette impl�mentation est de permettre une remise � jour efficace des informations en cache, en r�duisant au maximum les transactions r�seau.

10.10 Last-Modified

Le champ d'en-t�te Last-Modified (entit�) indique la date et l'heure � laquelle le serveur pense que la ressource vis�e a �t� modifi�e pour la derni�re fois. La s�mantique exacte de ce champ d�pend fortement de la mani�re dont le r�cepteur va le comprendre: Si le r�cepteur dispose d'une copie de cette ressource d'une date inf�rieure � celle mentionn�e dans le champ Last-Modified, cette copie devra �tre consid�r�e comme obsol�te.
Last-Modified        = "Last-Modified" ":" date_HTTP
Exemple:

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

La signification exacte de cette information d�pend de l'impl�mentation de l'�metteur et de la ressource � laquelle elle s'applique. Pour des fichiers, il s'agira de la date de derni�re modification donn�e par le gestionnaire de fichier du syst�me d'exploitation. Pour des entit�s incluant des parties g�n�r�es dynamiquement, cette date peut �tre plus r�cente que les dates de derni�re modification de chacune de ses parties. Pour des routeurs vers des bases de donn�es, il pourra s'agir de la derni�re �tiquette de date associ�e � l'enregistrement. Pour des objets virtuels, il pourra s'agir de la derni�re date � laquelle l'�tat interne de l'objet a chang�.

Un serveur origine ne doit pas envoyer de date Last-Modified post�rieure � la date d'�mission du message (date locale du serveur). Dans une telle �ventualit�, o� la date � inscrire pointerait vers un instant futur, c'est la date d'�mission du message qui doit �tre inscrite.

10.11 Location

Le champ d'en-t�te Location (r�ponse) renvoie la localisation exacte de la ressource identifi�e par l'URI-vis�e de la requ�te. Pour des r�ponses 3xx, ce champ indique l'URL "de pr�f�rence" donn�e par le serveur pour la fonction de redirection automatique. Une seule URI absolue peut �tre mentionn�e � la fois.
Location        = "Location" ":" URI_absolue
Exemple:

Location: http://www.w3.org/hypertext/WWW/NewLocation.html

10.12 Pragma

Le champ d'en-t�te Pragma (g�n�rale) est utilis� pour transmettre des directives d�pendantes de l'impl�mentation � tous les agents de la cha�ne de requ�te/r�ponse. Toutes les directives Pragma sp�cifient un comportement particulier optionnel de la part des agents vis � vis du protocole; cependant, certains syst�mes ne pourront r�pondre � toutes les directives.
Pragma            = "Pragma" ":" 1#directive_pragma

directive_pragma  = "no-cache" | pragma
pragma            = nom_de_pragma [ "=" mot ]
Lorsque la directive "no-cache" est pr�sente dans un message de requ�te, les applications doivent r�percuter la requ�te jusqu'au serveur origine, m�me si elles disposent d'une copie de la ressource en cache. Ceci permet au client de forcer la r�cup�ration d'une "premi�re copie" d'une ressource. Ceci permet de plus de demander au client une remise � jour de copies cach�es, dans le cas o� ces copies se sont av�r�es d�fectueuses, ou obsol�tes.

Les directives Pragma doivent �tre r��mises par les routeurs ou proxies, quelle que soit leur signification � l'�gard des applications, dans la mesure o� ces directives concernent toutes les applications de la cha�ne de requ�te/r�ponse. Il n'est pas possible de d�finir un pragma ne concernant qu'un interm�diaire donn� dans la cha�ne; Cependant, toute directive non reconnue par l'un des r�cepteurs sera ignor�e. <h3> 10.13 RefererLe champ d'en-t�te Referer (requ�te) permet au client d'indiquer, � l'usage du serveur, l'adresse (URI) de la ressource dans laquelle l'URI-vis�e a �t� trouv�e. Ceci permet au serveur de g�n�rer et entretenir des listes de "r�tro-liens" destin�es � renseigner les clients futurs sur des "sites int�ressants", ou � but d'archivage et d'analyse, optimisation de cache, etc. Il permet aussi l'analyse de liens obsol�tes ou de type incorrect � but de maintenance. Le champ Referer ne doit pas �tre inscrit si la source de l'URI-vis�e provient d'une entit� n'ayant pas d'URI propre, comme l'entr�e de l'adresse via un clavier.

Referer        = "Referer" ":" ( URI_absolue | URI_relative )
Exemple:

Referer: http://www.w3.org/hypertext/DataSources/Overview.html

Si une URI partielle est donn�e, elle se r�f�rera relativement � l'URI-vis�e. L'URI donn�e en r�f�rence ne doit pas inclure de fragment.

Note: Dans la mesure o� la r�f�rence d'un lien est une information qui peut avoir un caract�re priv�, ou �tre amen�e � r�v�ler une information priv�e, il est recommand� de laisser le choix � l'utilisateur final de renseigner ou non ce champ. Par exemple, un navigateur pourra disposer d'un commutateur qui permettra une navigation ouverte ou anonyme, qui simultan�ment peut activer ou d�sactiver l'�mission des champs Referer et Form.

10.14 Server

Le champ d'en-t�te Server (r�ponse) contient des informations sur le logiciel utilis� par le serveur origine pour traiter la requ�te. Ce champ peut contenir plusieurs noms de produits diff�rents (Section 3.7) ainsi que des commentaires identifiant le serveur et des "sous-composants" des applications. Par convention, les noms sont list�s par ordre d'importance, eu �gard � l'identification du produit utilis�.
Server       = "Server" ":" 1*( produit | commentaire )
Exemple:

Server: CERN/3.0 libwww/2.17

Si la r�ponse est transmise via un proxy, ce dernier ne doit pas ajouter ses propres commentaires � la liste.

Note: La r�v�lation du nom et de la version du logiciel serveur peut pr�senter le risque de permettre des attaques ext�rieures contre telle ou telle application dont les "portes d�rob�es" sont connues. Les d�veloppeurs de serveurs auront tout int�r�t � laisser l'�mission de cette information optionnelle.

10.15 User-Agent

Le champ d'en-t�te User-Agent (requ�te) contient des informations sur l'utilisateur �metteur de la requ�te. Cetteinformation est utilis�e � des fins statistiques, pour tracer des violations de protocole, et � des fins de reconnaissance automatique d'utilisateur permettant de formater la r�ponse de la mani�re la plus adapt�e. L'usage de ce champ, bien que non indispensable, est cependant conseill�. Le champ User-Agent peut mentionner plusieurs noms de produits (Section 7) ainsi que des commentaires identifiant le programme ou des sous-composants de ce programme dans la mesure o� ceux-ci peuvent �tre significatifs pour le serveur. Par convention, ces informations sont list�es par ordre d'importance.
User-Agent        = "User-Agent" ":" 1*( produit | commentaires )
Exemple:

User-Agent: CERN-LineMode/2.15 libwww/2.17b3

Note: Certains proxies ajoutent leur propre information � ce champ. Ceci est d�conseill�, dans la mesure o� le contenu final de ce champ peut alors devenir ambigu, voire confus.

10.16 WWW-Authenticate

Le champ d'en-t�te WWW-Authenticate (r�ponse) doit �tre inclus dans des r�ponses de type 401 (non autoris�). La valeur du champ consiste en un ou plusieurs "mod�les" d'identification pour l'URI-vis�e.
WWW-Authenticate       = "WWW-Authenticate" ":" 1#mod�le
Le processus d'identification et d'authentification d'acc�s HTTP est d�crit en Section 11. Les applications utilisatrices doivent interpr�ter avec circonspection la valeur d'un champ WWW-Authenticate lorsqu'il pr�sente plus d'un mod�le d'authentification, ou si plusieurs champs WWW-Authenticate apparaissent dans l'en-t�te, le contenu d'un mod�le pouvant lui m�me appara�tre comme une liste de param�tres s�par�s par une virgule.

11. Authentification d'acc�s sous HTTP

HTTP propose un m�canisme simple de "mod�le-accr�ditif" pour permettre � un serveur de fournir un mod�le d'identification et d'authentification � un client, et � un client de s'authentifier pour une requ�te particuli�re. Ce m�canisme utilise un syst�me de noms extensible et ind�pendant de la casse, dans le but d'identifier le sch�ma d'authentification, suivie d'une liste de paires "attribut/valeur" s�par�es par des virgules, destin�es � transmettre les param�tres n�cessaires pour achever l'authentification.
Scheme-auth        = nom_de_scheme

param-auth         = nom_param "=" cha�ne entre guillemets
Le message de r�ponse 401 (non autoris�) est utilis� par un serveur origine pour soumettre le "mod�le" d'authentification � un client. Cette r�ponse doit comporter un champ d'en-t�te WWW-Authenticate proposant au moins un mod�le valide pour la ressource � atteindre.
Mod�le           = scheme-auth 1*SP domaine_valide *( "," pa
1000
ram_auth )

domaine_valide   = "realm" "=" espace_domaine
espace-domaine   = cha�ne entre guillemets
L'attribut de domaine (ind�pendant de la casse) est requis dans tous les sch�mes d'authentification qui soumettent un mod�le. L'espace de domaine (ind�pendant de la casse), combin� � l'URL canonique du serveur origine, d�finit l'espace prot�g�. Cette technique permet de partitionner un serveur prot�g� en plusieurs sous ensembles, prot�g�s individuellement, chacun avec leur propre mod�le et leurs propres param�tres d'autorisation li�es ou non � une base de donn�e d'authentification. Le domaine accessible est exprim� sous forme de cha�ne de caract�res, en g�n�ral donn�e par le serveur origine, avec �ventuellement une s�mantique suppl�mentaire d�pendant du mod�le d'authentification.

Un utilisateur d�sireux de s'authentifier aupr�s d'un serveur - en g�n�ral, mais pas n�cessairement, apr�s avoir re�u une r�ponse 401-peut le faire en sp�cifiant un champ Authorization dans l'en-t�te de sa requ�te. La valeur dans le champ Authorization consiste contient l'accr�ditif n�cessaire � l'acc�s au domaine autoris� pour la ressource vis�e.

accr�ditif         = accr�ditif_de_base | ( mod�le_authentification#param�tres )
Le domaine accessible par un utilisateur utilisant cet accr�ditif est d�termin� par les donn�es de protection du serveur. Si une requ�te pr�c�dente � abouti � une autorisation d'acc�s, le m�me accr�ditif donnera acc�s au m�me domaine accessible durant un temps d�termin� par le le mod�le d'authentification, ses param�tres, et/ou les pr�f�rences utilisateur. Sauf mention explicite dans le mod�le, un espace prot�g� ne peut sortir du cadre du serveur qui le g�re.

Si le serveur refuse l'acc�s � une requ�te, il d�livrera en retour une r�ponse 403 (acc�s interdit).

Le protocole HTTP n'exclut pas l'utilisation de sch�mas de protection additionnels, venant compl�ter ou remplacer le paradigme "mod�le-accr�ditif". D'autres m�canismes, tels que le cryptage au niveau "transport" ou l'encapsulation de messages, peuvent �tre utilis�s avec des champs d'en-t�te additionnels v�hiculant les informations d'authentification. Ces m�canismes ne sont toutefois pas d�crits dans cette sp�cification.

Les proxies doivent �tre compl�tement transparents vis � vis du m�canisme d'authentification. C'est � dire qu'ils doivent retransmettre les champs WWW-Authenticate et Authorization tels que, et ne doivent pas enregistrer une r�ponse � un message contenant le champ Authorization dans leur cache. HTTP/1.0 ne fournit aucun moyen � un client de s'identifier vis � vis d'un proxy.

11.1 Mod�le d'authentification de base

Le mod�le dit "de base" demande � un utilisateur de s'authentifier par un user-ID et un mot de passe pour chaque "domaine d'acc�s". La donn�e d'authentification doit repr�senter comme une cha�ne non visible, pouvant seulement �tre compar�e � d'autres accr�ditifs de r�f�rence par le serveur concern�. Le serveur n'autorisera l'acc�s que si et l'user-ID, et le mot de passe correspondent � un sch�me d'authentification d�fini pour le domaine auquel appartient l'URI-vis�e. Il n'y a pas de param�tres optionnels pour ce mod�le.

Sur toute r�ception d'une requ�te non autoris�e visant une URI dans l'espace prot�g�, le serveur doit renvoyer une demande d'identification de forme:

WWW-Authenticate: Basic realm="WallyWorld"

dans laquelle "WallyWorld" est le nom symbolique de l'espace contenant l'URI-vis�e, attribu� par le serveur.

Pour obtenir l'autorisation d'acc�s, le client enverra l'user-ID et le mot de passe, s�parat�s par un "deux-points" (":"), le tout encod� en base64 [5].

Accr�ditif_de_base    = "Basic" SP cookie-basique

cookie-basique        = ["userID-mot_de_passe" encod� base64 [5],
                        limit� � 76 char/line]

userID-mot_de_passe   = [ nom_ID ] ":" *TEXT
Si le client voulait utiliser l'user-ID "Aladdin" et le mot de passe "open sesame", il sp�cifierait le champ ainsi:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Le mod�le de base ci-d�fini est une m�thode non s�curis�e de filtrage d'acc�s � des ressources donn�es sur un serveur HTTP. Il suppose en effet que la connexion entre l'utilisateur et le serveur est un lien digne de confiance. Ceci n'est pas le cas sur des r�seaux ouverts, et ce mod�le doit �tre utilis� en connaissance de cause. Malgr� cette faiblesse, les clients devront impl�menter ce mod�le afin de pouvoir communiquer avec les serveurs qui l'utilisent.

12. S�curit�

Cette section est une information � destination des d�veloppeurs d'applications, h�bergeurs de donn�es, et des utilisateurs, concernant les limites de s�curisation atteintes par HTTP/1.0 tel que d�crit dans ce document. La discussion suivante ne pr�tend pas apporter de solution op�rationnelle aux d�fauts qui y sont r�v�l�s, bien que quelques suggestions y soient faites pour r�duire le risque informatique.

12.1 Authentification des clients

Comme le mentionne la Section 11.1, le mod�le d'authentification "de base" n'est pas une m�thode infaillible pour pr�venir des acc�s non autoris�s. Il ne peut non plus emp�cher la transmission du corps d'entit� "en clair" sur le r�seau physique utilis� comme porteuse. HTTP/1.0 n'interdit aucunement l'emploi d'autres mod�les, ou autres m�canismes de protection afin d'accro�tre la s�curit� de transmission.

12.2 M�thodes s�res

Les �diteurs de logiciels clients doivent garder � l'esprit que leur application repr�sente l'utilisateur dans ses interactions avec Internet, et doivent de ce fait s'assurer que l'utilisateur sera averti de toute action que l'application peut entamer, et susceptible d'avoir un r�sultat inattendu, tant pour eux que pour les tiers.

En particulier, il a �t� �tabli par convention que les m�thodes GET et HEAD ne peuvent signifier autre chose qu'une demande de r�cup�ration de ressource. Ces m�thodes peuvent �tre consid�r�es comme "s�res". Ceci laisse la possibilit� aux clients d'impl�menter d'autres m�thodes (ex. POST) sous une forme sp�cifique, mais toujours � condition que l'utilisateur puisse �tre averti qu'une action peu s�re ou potentiellement non conforme est requise.

Naturellement, il n'est pas possible de garantir que le serveur n'aura pas "d'effets de bord" lorsqu'il traite une requ�te GET; en fait, certaines ressources dynamiques tirent avantage de cette possibilit�. La seule distinction de taille est que l'utilisateur qui �met une requ�te s�re de type GET n'a pas "dans l'intention" de provoquer ces effets de bord. Il ne peut donc en �tre tenu pour responsable.

12.3 Abus de l'information Server Log Information

Un serveur a toute possibilit� de stocker des donn�es personnelles contenues dans les requ�tes telles qu'adresses et mod�les d'acc�s ou en d�duire et archiver des conclusions personnelles sur les go�ts, les tendances ou les centres d'int�r�t des utilisateurs. Ces informations sont par nature typiquement confidentielles et peuvent tomber sous le coup de la loi dans certains pays (NdT: typiquement dans le cadre de la loi "informatique et libert�s", dans la mesure o� un archivage syst�matique et une interpr�tation "sociologique" nominative sont r�alis�s). Les personnes utilisant le protocole HTTP pour diffuser des donn�es ont la responsabilit� de s'assurer que toute information re�ue pouvant identifier et classifier les visiteurs ne puissent �tre communiqu�e sans l'accord de ces derniers.

12.4 Transfert d'information sensible

Comme tout protocole de transmission de donn�e de base, HTTP ne peut contr�ler la nature des informations transmises. Il n'est pas non plus possible � priori de d�terminer la "sensibilit�" de certaines portions de donn�es transmises dans le cadre d'une requ�te quelle qu'elle soit. C'est pourquoi les applications devront prendre en charge la plus grande part du contr�le de ces informations en lieu et place du diffuseur. Trois champs d'en-t�te sont particuli�rement concern�s par cette notion: Server, Referer et From.

R�v�ler la version exacte du logiciel serveur peut rendre celui-ci vuln�rable aux attaques si le logiciel est r�put� avoir des faiblesses en termes de s�curit�. Le renseignement du champ Server doit de ce fait rester optionnel, et ne doit pas forc�ment �tre syst�matique.

Le champ Referer autorise 1000 l'�tude d'un certain nombre d'informations � propos de la requ�te et permet de "remonter" une cha�ne de liens. Bien que cette fonction soit tr�s utile, il est possible n�anmoins d'en abuser si les informations sur l'utilisateur ne sont pas dissoci�es de celles contenues dans le Referer. M�me lorsque ces informations "personnelles" sont enlev�es, le champ Referer peut parfois indiquer l'URI d'un document priv� dont la publication n'est pas souhaitable.

L'information �mise dans le champ From peut entrer en conflit avec la d�fense des droits priv�s, ou peut diminuer le degr� de s�curit� du serveur dans lequel la ressource est �mise de ce fait, toute impl�mentation devra laisser la possibilit� � l'utilisateur d'�mettre, ne pas �mettre, ou modifier les donn�es dans ce champ. L'utilisateur devra �tre en mesure de configurer une valeur "par d�faut" ou une "pr�f�rence utilisateur" pour les donn�es dans ce champ.

Nous sugg�rons, mais n'imposons pas, qu'un interrupteur graphique soit impl�ment� sur l'interface utilisateur pour permettre ou interdire l'envoi des informations From et Referer.

12.5 Attaques sur les Fichiers et R�pertoires

Les impl�mentations des serveurs origine HTTP devront veiller � restreindre la transmission des documents demand�s par une requ�te HTTP aux seuls documents autoris�s par l'administration syst�me. Si un serveur HTTP traduit les URI HTTP directement en appels syst�me de fichiers, le serveur devra veiller � ne pas livrer de documents destin�s � autre chose qu'un client HTTP. Par exemple, Unix, Microsoft Windows, et d'autres syst�mes d'exploitation utilisent ".." comme acc�s symbolique au r�pertoire de niveau sup�rieur. Sur un tel syst�me, un serveur HTTP doit refuser une telle construction dans l'URI-vis�e, interdisant ainsi l'acc�s potentiel � des donn�es qui ne sont pas sens�es �tre diffus�es par un serveur HTTP. De m�me, tous les fichiers � usage interne au serveur (fichiers de contr�le d'acc�s, de configuration, et codes script) doivent �tre prot�g�s contre toute diffusion, dans la mesure o� ils peuvent contenir des informations essentielles et confidentielles. L'exp�rience a montr� que des imperfections mineures du logiciel serveur ont pu conduire � un r�el risque en terme de s�curit�.

13. Cr�dits

Cette sp�cification utilise abondamment le format BNF �tendu et les constructions g�n�riques d�finies par David H. Crocker pour la RFC 822 [7]. De plus, elle r�utilise de nombreuses d�finitions �tablies par Nathaniel Borenstein et Ned Freed pour la d�finition des MIME [5]. Nous esp�rons que cette utilisation permettra de lever les confusions entre la s�mantique HTTP/1.0 et les formats de message du service "courrier �lectronique".

Le HTTP protocole a �volu� consid�rablement ces quatre derni�res ann�es. Il a b�n�fici� de la r�flexion d'une large et dynamique communaut� de d�veloppeurs - les nombreuses personnes qui ont particip� aux groupes de travail du WWW - laquelle a �t� largement responsable du d�veloppement fulgurant d'HTTP et du World-Wide Web en g�n�ral. Nous d�cernons � Marc Andreessen, Robert Cailliau, Daniel W. Connolly, Bob Denny, Jean-Francois Groff, Phillip M. Hallam-Baker, H�kon W. Lie, Ari Luotonen, Rob McCool, Lou Montulli, Dave Raggett, Tony Sanders, et Marc VanHeyningen une mention d'honneur pour la reconnaissance de leur efforts dans la d�finition des toutes premi�res sp�cifications ayant servi de base � la pr�sente.

Paul Hoffman aura contribu� aux sections informatives de ce document et aux Appendices C et D.

Ce document a b�n�fici� des nombreuses remarques et objections de la grande majorit� des participants au HTTP-WG. Outre les personnes d�j� mentionn�es, les personnes suivantes ont collabor� � l'ach�vement de cette sp�cification:

Gary Adams Harald Tveit Alvestrand Keith Ball Brian Behlendorf
Paul Burchard Maurizio Codogno Mike Cowlishaw Roman Czyborra
Michael A. Dolan John Franks Jim Gettys Marc Hedlund
Koen Holtman Alex Hopmann Bob Jernigan Shel Kaphan
Martijn Koster Dave Kristol Daniel LaLiberte Paul Leach
Albert Lunde John C. Mallery Larry Masinter Mitra
Jeffrey Mogul Gavin Nicol Bill Perry Jeffrey Perry
Owen Rees Luigi Rizzo David Robinson Marc Salomon
Rich Salz Jim Seidman Chuck Shotton Eric W. Sink
Simon E. Spero Robert S. Thau Fran�ois Yergeau Mary Ellen Zurko
Jean-Philippe Martin-Flatin

14. Bibliographie

  1. Anklesaria, F., McCahill, M., Lindner, P., Johnson, D., Torrey, D., et B. Alberti, "The Internet Gopher Protocol: A distributed document search and retrieval protocol", RFC 1436, University of Minnesota, March 1993.
  2. Berners-Lee, T., "Universal Resource Identifiers in WWW: A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web", RFC 1630, CERN, June 1994.
  3. Berners-Lee, T., and D. Connolly, "Hypertext Markup Language - 2.0", RFC 1866, MIT/W3C, November 1995.
  4. Berners-Lee, T., Masinter, L., and M. McCahill, "Uniform Resource Locators (URL)", RFC 1738, CERN, Xerox PARC, University of Minnesota, December 1994.
  5. Borenstein, N., and N. Freed, "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies", RFC 1521, Bellcore, Innosoft, September 1993.
  6. Braden, R., "Requirements for Internet hosts - application and support", STD 3, RFC 1123, IETF, October 1989.
  7. Crocker, D., "Standard for the Format of ARPA Internet Text Messages", STD 11, RFC 822, UDEL, August 1982.
  8. F. Davis, B. Kahle, H. Morris, J. Salem, T. Shen, R. Wang, J. Sui, and M. Grinbaum. "WAIS Interface Protocol Prototype Functional Specification." (v1.5), Thinking Machines Corporation, April 1990.
  9. Fielding, R., "Relative Uniform Resource Locators", RFC 1808, UC Irvine, June 1995.
  10. Horton, M., and R. Adams, "Standard for interchange of USENET messages", RFC 1036 (Obsoletes RFC 850), AT&T Bell Laboratories, Center for Seismic Studies, December 1987.
  11. Kantor, B., and P. Lapsley, "Network News Transfer Protocol: A Proposed Standard for the Stream-Based Transmission of News", RFC 977, UC San Diego, UC Berkeley, February 1986.
  12. Postel, J., "Simple Mail Transfer Protocol", STD 10, RFC 821, USC/ISI, August 1982.
  13. Postel, J., "Media Type Registration Procedure", RFC 1590, USC/ISI, March 1994. [14] Postel, J., and J. Reynolds, "File Transfer Protocol (FTP)", STD 9, RFC 959, USC/ISI, October 1985.
  14. Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, USC/ISI, October 1994.
  15. Sollins, K., and L. Masinter, "Functional Requirements for Uniform Resource Names." RFC 1737, MIT/LCS, Xerox Corporation, December 1994.
  16. US-ASCII. Coded Character S 1000 et - 7-Bit American Standard Code for Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986.
  17. ISO-8859. International Standard -- Information Processing -- 8-bit Single-Byte Coded Graphic Character Sets

15. Adresses des auteurs

Tim Berners-Lee
Director, W3 Consortium MIT Laboratory for Computer Science
545 Technology Square
Cambridge, MA 02139, U.S.A.

Fax: +1 (617) 258 8682
EMail: timbl@w3.org

Roy T. Fielding
Department of Information and Computer Science
University of California
Irvine, CA 92717-3425, U.S.A.

Fax: +1 (714) 824-4056
EMail: fielding@ics.uci.edu

Henrik Frystyk Nielsen
W3 Consortium
MIT Laboratory for Computer Science
545 Technology Square
Cambridge, MA 02139, U.S.A.

Fax: +1 (617) 258 8682
EMail: frystyk@w3.org

Appendices

Ces appendices ont �t� ajout�s par souci d'information - Ils ne forment pas partie int�grante de la sp�cification HTTP/1.0. 

A. Internet Media Type message/http

Outre la d�finition du protocole HTTP/1.0, ce document sert � la sp�cification de l'Internet Media Type "message/http". La sp�cification suivante est enregistr�e aupr�s de l'IANA [13].
       Media Type :      
1000
           message

       Media subtype :              http

       Param�tres obligatoires:     none

       Param�tres optionnels:       version, msgtype
version: version du protocole HTTP utilis� pour le message courant (e.g., "1.0"). Si ce param�tre est absent, la version peut �tre d�duite par analyse de la premi�re ligne du corps.
msgtype: Le type de message -- "request" ou "response". Si ce param�tre est absent, la version peut �tre d�duite par analyse de la premi�re ligne du corps.
Consid�rations d'encodage: seulement "7bits", "8bits", ou "binary" permis
Consid�rations en termes de s�curit�: aucune

B. Applications tol�rantes

Bien que ce document donne toutes les sp�cifications pour la g�n�ration de messages HTTP/1.0, toutes les applications ne pr�senteront pas une impl�mentation correcte. Nous recommandons de ce fait que les applications op�rationnelles puissent tol�rer certaines d�viation de ce protocole, dans la mesure o� celles-ci gardent un caract�re univoque.

Les clients devront faire preuve de tol�rance dans l'interpr�tation de la ligne d'�tat. Les serveurs devront � leur tour se montrer ouverts dans l'interpr�tation de la ligne de Requ�te. En particulier, ils devront accepter tout nombre d'espaces ou de tabulations entre les champs, m�me lorsqu'un espace simple est requis.

La fin de ligne dans les en-t�tes HTTP est marqu�e par la s�quence CRLF. Cependant, nous conseillons aux applications interpr�tant de telles en-t�tes de reconna�tre une fin de ligne sur LF simple en ignorant le CR de t�te. 

C. Relations avec les MIME

HTTP/1.0 utilise de nombreuses syntaxes d�j� employ�es pour le Mail Internet (RFC 822 [7]) et entre autres les Multipurpose Internet Mail Extensions (MIME [5]) permettant aux entit�s d'�tre transmises sous une grande quantit� de formes tout en respectant le principe d'�volutivit�. Cependant, la RFC 1521 concerne le mail, et HTTP impl�mente certaines fonctions d'une fa�on diff�rente de la RFC 1521. Ces diff�rences ont �t� soigneusement contr�l�es afin d'optimiser la transmission en mode binaire, pour ouvrir le champ d'application offert par des nouveaux types de m�dia, pour faciliter la comparaison de dates, tout en restant compatibles avec des serveurs et clients HTTP ant�rieurs.

A cette heure, nous esp�rons une r�vision de la RFC 1521. Cetter�vision pourrait int�gr� quelques unes des pratiques utilis�es par HTTP/1.0 mais ne faisant pas partie de la RFC 1521.

Cet appendice d�crit les points sp�cifiques pour lesquels HTTP et la RFC 1521 diff�rent. Les proxies et routeurs dirigeant des messages HTTP vers un environnement MIME strict devront conna�tre ces diff�rences et propose une conversion appropri�e si n�cessaire. A l'inverse Les proxies et routeurs acc�dant � un environnement HTTP � partir d'un environnement MIME strict, devront de m�me se charger de la conversion, et donc conna�tre ces diff�rences.

C.1 Conversion vers la forme canonique

La RFC 1521 impose qu'une entit� Internet Mail soit convertie dans sa forme canonique avant d'�tre transmise, (Appendice G de la RFC 1521 [5]). La Section 3.6.1 de ce document d�crit toutes les formes admises du sous-type "texte" transmis sous HTTP.

La RFC 1521 impose que le contenu d'un message dont le Content-Type est "text" repr�sente les fins de ligne par la s�quence CRLF et interdise l'usage de CR ou de LF en dehors de ce contexte de fin de ligne. HTTP permet l'usage de s�quences CRLF, de CR et LF seuls pour marquer la fin de ligne du texte dans le corps du document envoy� sous HTTP.

L� o� c'est possible, un proxy ou un routeur du HTTP vers un environnement strictement RFC 1521 devra traduire toutes les fins de ligne du texte contenu dans ces documents concern�s par la Section 3.6.1 dans ce document en forme canonique selon la RFC 1521: une s�quence CRLF. Notez, cependant, que cette r�gle peut se compliquer dans le cas o� un champ Content-Encoding est pr�sent et par le fait qu'HTTP permettent l'utilisation de tables de caract�res tant que le caract�re 13 et 10 continuent � repr�senter les �quivalents de CR et LF (comme c'est le cas pour certaines tables utilisant plusieurs octets par caract�re).

C.2 Conversion de formats de dates

HTTP/1.0 utilise un ensemble de formats de date restreint (Section 3.3) pour simplifier l'impl�mentation des comparaisons de date. Les proxies et routeurs agissant � partir d'autres protocoles devront s'assurer que tout champ d'en-t�te de Date dans un message reste conforme � l'un des formats reconnus par HTTP/1.0, et r��criront les dates si n�cessaire.

C.3 Introduction du champ Content-Encoding

La RFC 1521 n'introduit aucun concept �quivalent au champ d'en-t�te Content-Encoding d�fini par HTTP/1.0. Comme celui-ci fait fonction de modificateur du type de m�dia, les proxies et routeurs depuis HTTP vers des protocoles compatibles MIME doivent soit changer la valeur indiqu�e dans le champ Content-Type, soit analyser le corps d'entit� avant de faire suivre le message. (Certaines impl�mentations exp�rimentales du champ Content-Type pour la messagerie Internet ont utilis� une valeur ";conversions=" pour obtenir une fonction similaire � celle procur�e par le champ Content-Encoding. Ce param�tre n'est pas officiel dans la RFC 1521.)

C.4 Pas de champ Content-Transfer-Encoding

HTTP n'exploite pas le champ Content-Transfer-Encoding (CTE) utilis&eacute; par la RFC 1521. Les proxies et routeurs depuis un protocole MIME vers un protocole HTTP devront supprimer tout CTE � l'exclusion �ventuellement du CTE "identity" ("quoted-printable" ou "base64") avant de faire suivre le message vers un client HTTP client.

Les proxies et routeurs depuis HTTP vers un protocole compatible MIME ont la responsabilit� de s'assurer que le message envoy� est au format correct pour un transfert en toute s�curit� sous ce protocole, cette s�curit� �tant naturellement limit�e aux limitations propres du protocole utilis�. Un tel proxy ou routeur devra ajouter un Content-Transfer-Encoding appropri�, de fa�on � pr�senter les donn�es conform�ment aux attentes de ce protocole.

C.5 Champs d'en-t�te HTTP dans des parties de corps Multipart

Sous RFC 1521, la plupart des champs d'en-t�te plac�s dans les sous-parties d'un corps Multipart sont en g�n�ral ignor�s sauf si le nom du champ d�bute par "Content-". En HTTP/1.0, les sous-parties de corps Multipart peuvent contenir tout champ d'en-t�te HTTP dont la signification est pertinente pour cette partie de message. 

D. Fonctions suppl�mentaires

Cet appendice liste quelques �l�ments de protocole parfois employ�s dans certaines impl�mentations HTTP, mais qui ne sont pas consid�r�es comme "l�gitimes" par la plupart des applications HTTP/1.0. Les d�veloppeurs ont un int�r�t � conna�tre ces fonctions, mais ne peuvent �tre s�rs de leur pr�sence effective, ni de leur impl�mentation par d'autres applications HTTP/1.0.

D.1 M�thodes de requ�tes suppl�mentaires

D.1.1 PUT

La m�thode PUT demande � ce que l'entit� jointe soit enregistr�e par le serveur sous l'URI-vis�e. Si cette URI pointe vers une ressource d�j� existante, l'entit� jointe sera consid�r�e comme une nouvelle version de celle jusqu'alors pr�sente sur le serveur origine. Si l'URI-vis�e pointe sur une ressource inexistante, et � la condition que cette URI puisse �tre d�finie en tant que nouvelle ressource du serveur, ce dernier cr�era une nouvelle ressource sous cette URI.

La diff�rence fondamentale entre les m�thodes POST et PUT r�side dans la signification donn�e � l'URI-vis�e. Celle-ci, pour une m�thode POST d�signe la ressource "active" � laquelle l'entit� doit �tre confi�e dans le but d'un traitement. Cette ressource peut �tre un programme, un routeur ou un autre protocole, ou encore une entit� acceptant des annotations. Par contre, L'URI pr�cis�e dans une m�thode PUT nomme l'entit� incluse dans la requ�te - Le client sait parfaitement de quelle URI il s'agit et le serveur n'applique la m�thode � aucune autre ressource.

D.1.2 DELETE

La m�thode DELETE demande au serveur de supprimer la ressource point�e par l'URI-vis�e.

D.1.3 LINK

La m�thode LINK �tablit une ou plusieurs liaisons entre la ressource existante d�finie par l'URI-vis�e et d'autres ressources.

D.1.4 UNLINK

A contrario, cette m�thode supprime des liaisons entre la ressource d�finie par l'URI-vis�e, et d'autres ressources qui lui sont li�es.

D.2 D�finitions d'autres champs d'en-t�te

D.2.1 Accept

Le champ d'en-t�te Accept (requ�te) peut �tre utilis� pour d�finir une liste de types de m�dia accept�s en r�ponse � la requ�te. L'ast�risque "*" est utilis�e pour grouper des types de m�dia par classe, "*/*" indiquant tous les types de m�dia, et "type/*" indiquant tous les sous-types du type "type". La gamme de types signal�e par le client sert essentiellement � limiter les documents � des types acceptables par le client dans le contexte de la requ�te formul�e.

D.2.2 Accept-Charset

Le champ d'en-t�te Accept-Charset (requ�te) peut �tre utilis� pour former une liste de tables de caract�res pr�f�rentielles, autres que les tables US-ASCII et ISO-8859-1 utilis�es par d�faut. Ce champ permet � un client de signaler � un serveur qu'il sait accepter d'autres repr�sentations de texte que les repr�sentations par d�faut, et est donc en mesure d'exploiter des documents encod�s avec ces tables, si le serveur sait les transmettre.

D.2.3 Accept-Encoding

Le champ d'en-t�te Accept-Encoding (requ�te) est similaire au champ Accept, mais restreint la gamme de valeurs Content-Coding attendues dans une r�ponse.

D.2.4 Accept-Language Le champ d'en-t�te Accept-Encoding (requ�te) est similaire au champ Accept, mais restreint la gamme de langues attendues dans une r�ponse.

D.2.5 Content-Language

Le champ d'en-t�te Content-Language (entit�) d�crit la ou les langues naturelles des destinataires potentiels du corps d'entit�. Notez que ceci n'a aucun lien avec les langues utilis�es dans l'ensemble de l'entit�.

D.2.6 Link

Le champ d'en-t�te Link (entit�) permet de d�crire les liaisons entre l'entit� jointe et d'autres ressources. Une entit� peut se voir attribuer plusieurs valeurs pour le champ Link. Un champ Link, au niveau m�tainformation, indique typiquement des relations du type d�pendance hi�rarchique ou des chemins d'acc�s.

D.2.7 MIME-Version

Les messages HTTP peuvent inclure un champ unique d'en-t�te g�n�rale indiquant quelle version du protocole MIME a �t� employ� pour construire le message. L'utilisation de ce champ MIME-Version, tel que d�crit par la RFC 1521 [5], peut indiquer si le message est compatible MIME. Malheureusement, certaines premi�res impl�mentations de serveurs HTTP/1.0 &e 578 acute;mettent ce champ sans r�serve. Il est conseill� de l'ignorer.

D.2.8 Retry-After

Le champ d'en-t�te Retry-After (r�ponse) peut �tre utilis� dans une r�ponse 503 (service indisponible) dans le but d'indiquer pendant combien de temps (estim�) le service restera indisponible aux requ�tes du client. La valeur de ce champ peut �tre une date HTTP ou un nombre entier de secondes (en d�cimal) � partir de l'heure de la r�ponse.

D.2.9 Title

Le champ d'en-t�te Title est purement informatif et donne le titre de l'entit�.

D.2.10 URI

Le champ d'en-t�te URI (entit�) peut contenir toute ou partie des Uniform Resource Identifiers (Section 3.2) par laquelle la ressource d�finie par l'URI-vis�e peut �tre identifi�e. Aucune garantie n'est cependant donn�e que la ressource soit effectivement accessible par l'une des URI sp�cifi�es.0