Académique Documents
Professionnel Documents
Culture Documents
Berners-Lee, MIT/LCS
Request for Comments: 1945 R. Fielding, UC Irvine
Category: Informational H. Frystyk, MIT/LCS
May 1996
INTERNET
STANDARDS & OFFICIAL DOCUMENTS
Standard 8
Informational 4
Proposal 8
RFC 1945 - HTTP 1.0 / FR / VE:DOC OR:05/96 - FR:10/97
Note du Traducteur :
Le texte suivant est la traduction intgrale de la spcification HTTP 1.0, telle qu'dite par
les auteurs originaux du protocole, sans ajouts, commentaires, ni omissions. Ce document
a valeur informative, selon la procdure courante d'enregistrement des documents au sein
du W3C. Il n'a de ce fait pas valeur de "norme", et, s'il peut tre considr comme
document de rfrence, il ne peut par contre octroyer une lgitimit quelconque un
quelconque dveloppement, ni servir de preuve ni de garant d'une conformit quelle
qu'elle soit.
Statut de ce mmo
Ce mmo est une information destination de la communaut Internet. Il ne peut tre
considr comme une spcification officielle d'aucun protocole Internet. Sa distribution
n'est pas limite.
Note IESG:
L'IESG espre que ce document sera rapidement remplac par une norme officielle.
Contexte
L'Hypertext Transfer Protocol (HTTP) est un protocole de niveau application
suffisamment lger et rapide, pour la transmission de documents distribus et multimdia
travers un systme d'information multi-utilisateurs. Il s'agit d'un protocole gnrique,
orient objet, pouvant tre utilis pour de nombreuses tches, dans les serveurs de nom
et la gestion d'objets distribus par l'extension de ses mthodes de requte
(commandes). Une caractristique d'HTTP est son typage des reprsentations de
donnes, permettant la mise en oeuvre de systmes indpendants des donnes y tant
transfres.
HTTP a t utilis l'initiative du World-Wide Web depuis 1990. Cette spcification
dcrit le protocole de base rfrenc sous l'appellation "HTTP/1.0".
1. Introduction .............................................................................................................................6
1.1 Objectif ..............................................................................................................................6
1.2 Terminologie ......................................................................................................................6
1.3 Fonctionnement global........................................................................................................8
1.4 HTTP et MIME .................................................................................................................9
2. Conventions de notation et Grammaire gnrique ...................................................................10
2.1 BNF tendue ....................................................................................................................10
2.2 Rgles de base..................................................................................................................11
3. Paramtres du protocole.........................................................................................................14
3.1 Numro de Version ..........................................................................................................14
3.2 Uniform Resource Identifiers............................................................................................15
3.2.1 General Syntax ..........................................................................................................15
3.2.2 URL http ...................................................................................................................16
3.3 Formats de temps et de date .............................................................................................16
3.4 Tables de caractres .........................................................................................................17
3.5 Indication d'encodage du contenu .....................................................................................18
3.6 Types de mdia.................................................................................................................19
3.6.1 Canonisation et texte par dfaut.................................................................................20
3.6.2 Types multiples "multipart"........................................................................................20
3.7 Produits............................................................................................................................21
4. Messages HTTP.....................................................................................................................22
4.1 Types de messages ...........................................................................................................22
4.2 En-ttes de messages........................................................................................................23
4.3 En tte gnrale................................................................................................................23
5. Request..................................................................................................................................24
5.1 Request-Line ....................................................................................................................24
5.1.1 Mthodes...................................................................................................................24
5.1.2 Request-URI .............................................................................................................25
5. En-tte de requte ..............................................................................................................26
6. Rponse .................................................................................................................................27
6.1 Ligne d'tat.......................................................................................................................27
6.1.1 Code d'tat et raison explicite ....................................................................................28
6.2 En-tte de rponse............................................................................................................29
7. Entits....................................................................................................................................30
7.1 En-tte d'entit .................................................................................................................30
7.2 Corps d'entit ...................................................................................................................30
7.2.1 Type..........................................................................................................................31
7.2.2 Longueur...................................................................................................................31
8. Dfinition des mthodes .........................................................................................................32
8.1 GET .................................................................................................................................32
8.2 HEAD..............................................................................................................................32
8.3 POST ...............................................................................................................................32
9. Dfinition des codes d'tat......................................................................................................34
9.1 Information 1xx................................................................................................................34
9.2 Succs 2xx .......................................................................................................................34
200 OK ..............................................................................................................................34
201 Cr ............................................................................................................................34
202 Accepte .....................................................................................................................35
204 Pas de contenu.............................................................................................................35
9.3 Redirection 3xx ................................................................................................................35
300 Choix multiples............................................................................................................35
301 Changement d'adresse dfinitive...................................................................................35
302 Changement d'adresse temporaire ................................................................................36
304 Non modifi.................................................................................................................36
9.4 Erreur client 4xx...............................................................................................................36
400 Requte incorrecte.......................................................................................................37
401 Non autoris................................................................................................................37
403 Interdit ........................................................................................................................37
404 Non trouv ..................................................................................................................37
9.5 Erreur serveur 5xx............................................................................................................37
500 Erreur serveur interne ..................................................................................................38
501 Non implment...........................................................................................................38
502 Erreur de routeur.........................................................................................................38
503 Service indisponible .....................................................................................................38
10. Dfinition des champs d'en-tte ............................................................................................39
10.1 Allow .............................................................................................................................39
10.2 Authorization .................................................................................................................39
10.3 Content-Encoding ..........................................................................................................40
10.4 Content-Length ..............................................................................................................40
10.5 Content-Type .................................................................................................................41
10.6 Date ...............................................................................................................................41
10.7 Expires ...........................................................................................................................41
10.8 From ..............................................................................................................................42
10.9 If-Modified-Since ...........................................................................................................43
10.10 Last-Modified...............................................................................................................43
10.11 Location .......................................................................................................................44
10.12 Pragma .........................................................................................................................44
10.13 Referer .........................................................................................................................45
10.14 Server...........................................................................................................................45
10.15 User-Agent...................................................................................................................46
10.16 WWW-Authenticate .....................................................................................................46
11. Authentification d'accs sous HTTP..................................................................................47
11.1 Modle d'authentification de base ...................................................................................48
12. Scurit................................................................................................................................50
12.1 Authentification des clients .............................................................................................50
12.2 Mthodes sres...............................................................................................................50
12.3 Abus de l'information Server Log Information ................................................................50
12.4 Transfert d'information sensible ......................................................................................51
12.5 Attaques sur les Fichiers et Rpertoires...........................................................................51
13. Crdits .................................................................................................................................53
14. Bibliographie........................................................................................................................55
15. Adresses des auteurs ............................................................................................................57
Appendices ................................................................................................................................58
A. Internet Media Type message/http .....................................................................................58
B. Applications tolrantes.......................................................................................................58
1. Introduction
1.1 Objectif
L'Hypertext Transfer Protocol (HTTP) est un protocole de niveau application
suffisamment lger et rapide, pour la transmission de documents distribus et multimdia
travers un systme d'information multi-utilisateurs. HTTP t utilis l'initiative du
Word-Wide Web ds 1990. Cette spcification dcrit les fonctionnalits le plus souvent
rencontres dans les implmentation "client/serveur HTTP/1.0". Elle est divise en deux
section. Les fonctions usuellement exploites de HTTP sont dcrites dans le corps de ce
document. Les autres fonctions, moins utilises sont listes dans l'annexe D.
Les systmes d'information pratiques ncessitent des fonctions plus volues que la
simple rcupration de donnes, 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 mthodes pour dfinir l'objet d'une requte. 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
mthode. 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 de communication gnrique 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 accs de base des
ressources hypermdia, et simplifiant l'implmentation d'interfaces utilisateur.
1.2 Terminologie
Cette spcification utilise un certain nombre de termes pour dsigner 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 squence structure
d'octets dfinie la Section 4 et transmis via la connexion.
Requte
Un message de requte HTTP (dfini en Section 5).
Rponse
Un message de rponse HTTP (dfini en Section 6).
Ressource
Un service ou objet du rseau pouvant tre identifi par une URI (Section 3.2).
Entit
Une reprsentation particulire de donnes, ou la rponse d'une ressource de type
service, incluse dans une requte ou une rponse. Une entit reprsente une
mtainformation sous la forme d'une en-tte et d'un contenu sous la forme d'un corps, ou
"body".
Client
Un programme applicatif dont la fonction principale est d'mettre des requtes.
Utilisateur
Le client qui a mis la requte. Celui-ci peut tre un navigateur, un diteur, un
"spiders" (robot d'exploration), ou autre utilitaire.
Serveur
Un programme applicatif acceptant des connexions dans le but traiter des requtes en
dlivrant une rponse.
Serveur origine
Le serveur dans laquelle se situe physiquement une ressource.
Proxy
Un programme intermdiaire qui cumule les fonctions de serveur et de client. Les
requtes sont soit traites en interne ou rpercutes, ventuellement converties, sur
d'autres serveurs. Un proxy doit interprter, puis reconstituer un message avant de le
remettre. Les proxies sont souvent utiliss comme portes d'accs ct utilisateur des
rseaux protgs par un "firewall" ou comme intermdiaire pour convertir des protocoles
non supports par l'utilisateur.
Gateway ou routeur
Un serveur jouant le rle d'intermdiaire pour d'autres serveurs. Contrairement un
Proxy, un routeur reoit les requtes comme s'il tait le serveur origine pour la ressource;
le client n'tant pas ncessairement conscient de "communiquer" avec un routeur. Les
routeurs sont souvent utiliss comme porte d'accs ct serveur d'un rseau protg par
"firewall" et comme convertisseur de protocole pour accder es ressources hberges
sur des systmes non-HTTP.
Tunnel
Un tunnel est un programme applicatif servant de relais "transparent" entre deux
connexions. Une fois actif, cet lment n'est plus considr comme faisant partie de la
connexion HTTP, bien qu'il soi issu d'une requte HTTP. Le tunnel cesse d'exister
lorsque les deux sens de la connexion ont t ferms. Les tunnels sont utiliss lorsqu'une
"porte" est ncessaire et que l'intermdiaire ne peut, ou ne doit pouvoir interprter la
communication.
Cache
Un espace de stockage local destin enregistrer les rponses et le sous-systme
contrlant ces enregistrements, leur relecture et leur effacement. Un cache enregistre des
rponses dans le but de diminuer le temps d'accs et la charge du rseau lors de
requtes identiques ultrieures. Tout client ou serveur peut implmenter 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
particulire, plutt qu' ses possibilits effectives. De mme tout serveur peut tre la
fois serveur origine, proxy, routeur, ou tunnel, changeant alors de comportement en
fonction des requtes reues.
Requte ------------------------>
UA -------------------v------------------- O
<----------------------- Rponse
Requte -------------------------------------->
UA -----v----- A -----v----- B -----v----- C -----v----- O
<------------------------------------- Rponse
Toute partie de communication n'tant pas un tunnel doit possder un cache pour le
stockage des requtes. L'intrt de cette pratique est que la chane requte/rponse peut
tre considrablement raccourcie si l'un des intermdiaires dispose dj 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 rponse prcdemment envoye par O (via C) et rpond
une requte identique de UA ( noter que dans cet exemple, ni UA ni A ne disposent de
cette mme rponse en cache).
Requte ---------->
UA -----v----- A -----v----- B - - - - - - C - - - - - - O
<--------- Rponse
Toutes les rponses ne peuvent tre "caches", et certaines requtes peuvent utiliser
des modificateurs induisant un comportement particulier du cache. Certaines applications
HTTP/1.0 utilisent des heuristiques pour dcrire ce qui est ou non "cachable", mais ces
rgles ne sont pas standardises.
Sur Internet, les communications HTTP s'appuient principalement sur le protocole de
connexion TCP/IP. Le port utilis par dfaut est le port TCP 80 [15], d'autres ports
pouvant tre utiliss. Ceci n'exclut pas que HTTP puisse tre implment au dessus d'un
autre protocole d'Internet, ou sur d'autres types de rseau. HTTP ncessite seulement un
transport fiabilis; tout protocole garantissant la scurit de transmission peut tre utilis
pour supporter HTTP, la place qu'occupent les donnes des requtes et rponses
HTTP/1.0 dans les units de transmission de ces protocoles restant en dehors du
contexte de ce document.
Except pour des applications exprimentales, la pratique courante spcifie qu'une
connexion doit tre initie par un client avant transmission de la requte, et referme par
le serveur aprs dlivrance de la rponse. Les deux cts, client et serveur, doivent tre
prpars ce que la connexion soit coupe prmaturment, suite une action de
l'utilisateur, une temporisation automatique, ou une faute logicielle, et doivent apporter
une rponse prvisible cette situation. Dans tous les cas, la fermeture d'une connexion
qu'elle qu'en soit la raison est assimilable la conclusion de la requte, quel que soit
l'tat.
Nrgle
Rptition prcise: "<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 chane de 3 caractres alphabtiques.
#rgle
Une syntaxe "#" est utilise, comme pour la syntaxe "*", pour dfinir des listes
d'lments. La forme complte en est "<n>#<m>element" indiquant au moins <n> et au
plus <m> elements, chacun spar par une ou plusieurs virgules (",") et des espaces
optionnels (LWS). Ceci rend la forme des listes trs lisible; une rgle du type "( *LWS
element *( *LWS "," *LWS element ))" peut tre vue comme "1#element". Lorsque cette
construction est utilise, les lments vides sont utiliss, mais ne contribue pas au
comptage des lments prsents. De ce fait, "(element), , (element)" est permis, mais
compte comme deux lments. Toutefois, dans les cas ou un lment au moins est
requis, cet lment doit tre non nul. Les valeurs par dfaut sont 0 et "infini" et donc
"#(element)" vaut pour tous les lments y compris 0; "1#element" vaut pour au moins un;
et "1#2element" permet un ou deux lments.
; commentaire
Un point virgule, distance d'un texte de rgle instaure un dbut de commentaire qui
va jusqu'au bout de la ligne. C'est un moyen pratique d'insrer des remarques ou
annotations en cours de spcification.
*LWS implicite
La grammaire dcrite par cette spcification est base sur le "mot". Sauf mention
contraire, tout nombre d'espaces (LWS) peut tre insr entre deux mots adjacents ou
"token", et entre un "token" et un dlimiteur (tspecials), sans changer l'interprtation. Il
doit exister au moins un dlimiteur (tspecials) entre deux mots, au risque de les voir
interprts comme un seul. Malgr tout, les constructions HTTP tendront utiliser la
"forme commune", certaines implmentations ne savent traiter autre chose que cette
forme.
HTTP/1.0 dfinit la squence CR LF comme marqueur de fin de ligne pour tous les
lments except le corps de l'entit (voir Appendice B pour les tolrances). La fin de
ligne l'intrieur d'un corps d'entit dpend de son mdia, comme dcrit en Section 3.6.
CRLF = CR LF
Les en-ttes HTTP/1.0 peuvent tre rparties su plusieurs lignes si chaque nouvelle
ligne commence par un espace ou une tabulation horizontale. Une suite d'espace, mme
sur plusieurs lignes quivaut un espace simple.
Cependant les en-ttes multilignes ne sont pas acceptes par toutes les applications,
et doivent de prfrence tre vites lors d'un codage HTTP/1.0.
La rgle TEXT est utilise pour dcrire des informations descriptives qui ne sont pas
senses tre interprtes. Les mots d'un lment *TEXT peuvent contenir d'autres
caractres que ceux de la table ASCII-US stricto sensu.
Les rcepteurs d'un lment TEXT d'une en-tte contenant des octets hors de la table
ASCII-US supposeront qu'il s'agit de caractres ISO-8859-1.
Les caractres hexadcimaux peuvent tre utiliss dans certaines applications.
De nombreux champs d'en-tte HTTP/1.0 sont forms de mots spars par des
espaces ou caractres spciaux. Ces caractres doivent tre entre guillemets lorsqu'ils
sont utiliss l'intrieur d'une valeur.
Les commentaires pourront tre insrs dans les en-ttes HTTP en les entourant de
parenthses. Les commentaires ne sont permis que dans les champs contenant le mot
"comment" dans leur dfinition. Dans tous les autres champs, les parenthses sont
interprtes comme faisant partie de l'expression.
Une chane sera interprte comme un seul mot si elle est entre double guillemets.
qdtext = <tout CHAR sauf <"> et CTL, hormis LWS qui est
accept>
3. Paramtres du protocole
Notez que les nombres "suprieure" et "infrieure" doivent tre pris comme deux
entiers distincts et que chacun peut tre amen prendre une valeur suprieure 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 zros mentionns en tte de nombre doivent tre ignors par
le rcepteur, et ne devraient pas tre mis par l'metteur.
Ce document dfinit les versions 0.9 et 1.0 du protocole HTTP. Les applications
envoyant des "requtes pleines" ou "rponses pleines", et dfinies dans cette
spcification, doivent signaler une version HTTP-Version "HTTP/1.0".
Les serveurs HTTP/1.0 doivent:
Les applications des Proxy et routeurs doivent prendre certaines prcautions lorsqu'ils
retransmettent des requtes d'un format diffrent que celui de l'application native. Comme
la version de protocole indique les possibilits fonctionnelles de l'application de
l'metteur, un proxy/routeur ne doit jamais mettre de requte de niveau suprieur celui
de sa propre application HTTP; si une telle requte lui parvient, le proxy/routeur doit
dgrader le numro de version, ou renvoyer une erreur. Les requtes reues sur un
niveau infrieur peuvent tre releves au niveau de version de l'application native; la
rponse de ces proxies/routeurs doivent nanmoins suivre les rgles nonces ci-avant.
Pour une information dfinitive sur la syntaxe des URL voir les RFC 1738 [4] et
RFC 1808 [9]. La notation BNF inclue des caractres nationaux non permis dans les URL
valides telles que spcifies dans la RFC 1738, car les serveurs HTTP ne sont pas limits
l'ensemble de caractres non rservs pour le codage de la prtie relative du chemin
d'accs, et les proxies HTTP peuvent recevoir des requtes destinations d'URI autres
que celles dfinies dans la RFC 1738.
port = *DIGIT
Si le port est vide ou non spcifi, le port 80 est pris par dfaut. La smantique prcise
que cette ressource est localise sur le serveur acceptant les connexions TCP sur ce port
et sur cet ordinateur, l'URI de requte de la ressource en est le chemin d'accs absolu
chem_abs. Si chem_abs n'est pas prcis dans l'URL, il doit tre remplac par un "/"
lorsque l'URI de requte est utilise (Section 5.1.2).
Note : Bien que le protocole HTTP soit indpendant de la couche transport, l'URL http
identifie la ressource par son adresse TCP, Les ressources non TCP devant tre
atteintes via un autre schme d'URI.
La forme canonique d'une URL "http" est obtenue en convertissant tous les caractres
UPALPHA dans la chane "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 remplaant le chem_abs vide par un "/".
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, obsolte depuis la RFC 1036
Sun Nov 6 08:49:37 1994 ; Format asctime() du C ANSI
Le premier format est prfr pour Internet pour une raison lie la longueur fixe de
ses sous-champs, dfinis 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 dfini par
la RFC 850 [10] dsormais obsolte, et prsente l'inconvnient d'un champ d'anne sur
deux digits. Les clients et serveurs HTTP/1.0 doivent reconnatre les trois formats, mme
s'ils ne doivent jamais gnrer le troisime (convention du C).
Note : Les rcepteurs de valeurs de date doivent avoir une implmentation robuste et de ce
fait tre capables de reconnatre des formats de date manent d'applications non-
HTTP, comme il peut leur en parvenir en postant ou rcuprant des messages via
proxy/routeur de et vers SMTP ou NNTP.
Tout index temporel HTTP/1.0 doit tre reprsent 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",
abrviation en trois lettre du code de zone, et doit tre suppos comme vrai la lecture
d'un temps asctime().
Note : Les contraintes au niveau du format de date HTTP ne sont valables qu' l'intrieur du
rseau de transmission. Les clients et serveurs ne sont pas obligs de respecter cette
prsentation pour l'affichage, la prsentation de requte, l'accs, etc.
Note : Le terme "table de caractres" est aussi communment appel "encodage". Cependant,
comme HTTP et MIME partagent les mmes dfinitions, il est important qu'ils
partagent aussi la terminologie.
Les "tables de caractres" HTTP sont dfinies 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 dfinit pas un nom unique et
dfinitif pour chacune de ces tables, nous avons dfini ici les noms les plus couramment
utiliss dans les entits HTTP. Ces "tables de caractres" incluent celles dfinies dans la
RFC 1521 [5] -- ASCII-US [17] et ISO-8859 [18] -- ainsi que celles spcifiquement dfinies
pour usage dans les paramtres de caractres MIME.
Bien qu'HTTP permette l'utilisation de tout nom arbitraire pour dsigner une table de
caractres, tout nom dsignant dj une des tables du registre IANA doit indiquer cette
table prcise. Il est conseill que les applications s'en tiennent aux tables de caractres
dfinies dans ce registre.
La table de caractre indique pour un corps d'entit doit tre le plus petit
dnominateur commun de l'ensemble des codes de caractres utiliss dans ce corps,
sauf si l'on prfre systmatiquement s'en tenir aux tables de base ASCII-US ou ISO-
8859-1.
Note : Pour des raisons de compatibilit future, les applications HTTP/1.0 doivent
interprter "gzip" et "compress" respectivement comme "x-gzip" et "x-compress".
Note : L'utilisation de noms de programmes pour nommer des formats d'encodage n'est pas
souhaitable et sera dconseill dans le futur. Leur utilisation dans ce cas provient
surtout d'une habitude historique, mais ce n'est pas une habitude prendre.
Le type, sous-type et les noms d'attributs sont insensibles la casse. Les valeurs
associes aux attributs peuvent l'tre ou ne pas l'tre, suivant la smantique du nom de
l'attribut. les types et sous type ne peuvent tre spar par un LWS. Ceci est valable pour
les paires attribut/valeur Lorsqu'un rcepteur reoit un paramtre irrecevable pour le type
de mdia spcifi, il devra traiter le descripteur comme si cette paire attribut/valeur
n'existait pas..
Certaines anciennes applications HTTP ne reconnaissent pas le type de mdia. Les
applications HTTP/1.0 ne pourront dfinir le type que lorsque la spcification du contenu
est indispensable.
Les valeurs admises de types de mdia sont dfinies par la Internet Assigned Number
Authority (IANA [15]). Le processus d'enregistrement d'un type de mdia est spcifi dans
la RFC 1590 [13]. L'usage de types non enregistrs est dconseill.
Note : De nombreux serveurs HTTP actuels diffusent des donnes codes selon une table de
caractres autre que "ISO-8859-1" et sans explicitation correcte. Cette attitude rduit
l'interoprabilit propre du rseau et est fortement dconseille. Pour compenser de
manque de rigueur, certains utilisateurs HTTP proposent une option permettant de
changer la table de caractres par dfaut utilise lorsque des donnes sont reues sans
explicitation de cette information.
lignes entre les parties. Chaque partie d'un document "multipart" peut elle mme contenir
des champs d'en-tte HTTP significatifs pour son contenu.
3.7 Produits
La spcification 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 numro de version, tous
deux optionnels. Les champs acceptant cette spcification permettent de lister des sous-
lments significatifs d'un produit, spars par un espace. Par convention, les produits
sont rangs par ordre d'importance dans le processus d'identification.
Exemples:
Server: Apache/0.8.4
4. Messages HTTP
Les requte et rponse simple ne transportent jamais d'en-tte. Une seule requte est
de ce type : GET.
Rponse_simple = [ Corps_entit ]
L'usage des requtes simples reste dconseill, car il ne permet pas au serveur de
dfinir le type de mdia dans sa rponse.
nom = nom_de_champ
valeur = *( contenu | LWS )
L'ordre dans lequel les champs d'en-tte sont reus n'a pas d'importance. Une "bonne
habitude" consistera toutefois envoyer les champs d'en-tte_gnrale en premier, suivi
des champs d'en-tte_requte ou d'en-tte_rponse, puis enfin les champs d'en-
tte_entit.
Lorsque plusieurs champs de mme nom doivent tre dfinis avec des valeurs
diffrentes, celles-ci doivent apparatre comme une liste spare par des virgules
[#(values)]. Il doit tre possible de combiner cette dfinition multiple partir des paires
individuelles "nom: valeur", sans changer la smantique du message, en ajoutant chaque
valeur la suite de la premire, en utilisant une virgule comme sparateur.
5. Requtes
Une requte d'un client vers un serveur inclue, dans sa premire ligne, la mthode
applique la ressource, l'identificateur de cette ressource, et la version de protocole
courante. Afin d'assurer la compatibilit descendante avec la version plus limite
HTTP/0.9 du protocole, deux formats seront valides pour exprimer une requte:
Si un serveur HTTP/1.0 reoit une requte simple, il devra rpondre par une rponse
simple HTTP/0.9. Un client HTTP/1.0 capable de recevoir une rponse_complte ne doit
jamais gnrer de requte_simple.
5.1.1 Mthodes
La mthode indique en tte de ligne est destine tre applique l'URI cible. Son
nom dpend de la casse.
La liste de mthodes que peut accepter une ressource est dynamique; Le client est
avis de la disponibilit de la mthode mise par le code de retour du message de
rponse. Les serveurs renverront le code 501 (non implment) si la mthode est
inconnue, ou non implmente.
Les mthodes habituellement employes par les applications HTTP/1.0 sont dcrites
en dtail en Section 8.
La forme d'URI-vise 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 rcuprer la ressource
ci-dessus directement partir de son serveur origine crera une connexion TCP sur le
port 80 du host "www.w3.org" et mettra la ligne de commande:
suivi du reste de la requte complte. Notez qe le chemin absolu ne peut tre vide; si la
ressource se trouve dans la racine (pas de chemin d'accs) le chemin spcifi devra
comporter au moins le caractre slash ("/").
L'URI-vise est transmise sous forme d'une chane encode, dans laquelle certains
caractres apparatront comme une squence d'chappement "% HEX HEX" telle que
dfinie par la RFC 1738 [4]. Le serveur origine devra dcoder cette chane afin d'accder
correctement la ressource.
Des nouveaux noms de champs d'en-tte_requte ne peuvent tre introduits que dans
le cadre d'un changement de version du protocole. Cependant, de nouveaux champs ou
champs exprimentaux peuvent utiliser la smantique de champs d'en-tte_requte,
partir du moment ou les deux extrmits de la communication sont d'accord pour le faire.
Tout champ non reconnu sera considr comme un champ d'en-tte_entit.
6. Rponse
Une fois la requte reue et interprte, un serveur rpond par un message HTTP de
rponse.
Rponse_simple = [ Corps_entit ]
(ex., "HTTP/1.0 200 "), la seule prsence de cette expression est suffisante pour
diffrentier une rponse_simple d'une rponse_complte mise en retour d'une requte
Les valeurs actuellement reconnues sous HTTP/1.0, et les phrases types d'explicitation
associes, sont prsentes ci-dessous. Ces phrases ne sont que recommandes -- elles
peuvent tre remplaces par des variations locales sans affecter le protocole. Ces codes
sont intgralement lists en section 9.
Code_tat = "200" ; OK OK
| "201" ; Created Cr
| "202" ; Accepted Accept
| "204" ; No Content Pas de contenu
| "301" ; Moved Permanently Changement dfinitif
| "302" ; Moved Temporarily Changement temporaire
| "304" ; Not Modified Non modifi
| "400" ; Bad Request Requte incorrecte
| "401" ; Unauthorized Non autoris
| "403" ; Forbidden Interdit
| "404" ; Not Found Non trouv
| "500" ; Internal Server Error Erreur interne serveur
| "501" ; Not Implemented Non implment
| "502" ; Bad Gateway Erreur de routeur
| "503" ; Service Unavailable Indisponible
| autres_codes
autres_codes = 3DIGIT
La liste des codes HTTP est extensible, mais seuls les codes ci-dessus sont utiliss
dans la pratique courante. Les applications HTTP n'ont pas ncessairement connatre
la signification de tous les codes enregistrs, 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 numro de rponse non identifi comme le numro
x00 de la classe, indiquant ainsi la dfinition gnrique de la classe. Aucune rponse non
identifie ne peut tre enregistre en cache.
Par exemple, si un code "inconnu" 431 est reu par le client, celui-ci peut interprter sans
doute possible qu'un problme est survenu, et peut ragir comme s'il avait reu le code
400. Dans de tels cas, il est fortement conseill que l'application reporte le corps de
l'entit de rponse, dans la mesure o il y a de fortes chances que celui-ci contienne des
informations "en clair" sur la nature de l'erreur.
Des nouveaux noms de champs d'en-tte_rponse ne peuvent tre introduits que dans
le cadre d'un changement de version du protocole. Cependant, de nouveaux champs ou
champs exprimentaux peuvent utiliser la smantique de champs d'en-tte_rponse,
partir du moment ou les deux extrmits de la communication sont d'accord pour le faire.
Tout champ non reconnu sera considr comme un champ d'en-tte_entit.
7. Entits
champ_en-tte = en-tte_HTTP
Corps_entit = *OCTET
Dans les rponses, la prsence d'un corps d'entit est fonction la fois de la nature de
la requte pralable, et du code d'tat renvoy. Toute rponse une requte de type
HEAD ne peut contenir de corps d'entit, mme si les champs d'en-tte prsents
prtendent 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 rponses peuvent contenir un corps d'entit, ou dfaut, un champ
Content-Length spcifi zro (0).
7.2.1 Type
Lorsqu'un corps d'entit est prsent dans le message, le type de donnes incluses
dans ce corps est prcis par les champs d'en-tte Content-Type et Content-Encoding.
Ceux-ci dfinissent un modle d'encodage arborescent deux niveaux:
7.2.2 Longueur
Lorsqu'un corps d'entit est prsent dans un message, la longueur de ce corps doit
tre explicite par l'un des deux moyens suivants. Si un champ Content-Length est
prsent, sa valeur associe reprsente la longueur en octets du corps d'entit.
Autrement, c'est la dconnexion par le serveur qui marque la fin du corps d'entit.
Cette dernire mthode ne peut tre utilise pour marquer la fin d'une requte, car la
possibilit doit tre laisse au serveur d'envoyer une rponse. C'est pourquoi le protocole
HTTP/1.0 prcise que toute requte contenant un corps d'entit doit mentionner sa
longueur dans un champ d'en-tte 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
dterminer la longueur de ce corps, ce dernier rpondra par un message de code 400
(erreur client).
L'ensemble des mthodes courantes d'HTTP/1.0 est dfini ci-dessous. Bien que cet
ensemble puisse tre complt, il est prcis ici que des mthodes additionnelles
implmentes par des clients ou serveurs distincts ne peuvent partager la mme
smantique que si leur fonction est identique.
8.1 GET
La mthode GET signifie "rcuprer" le contenu quel qu'il soit de la ressource (sous
forme d'une entit) identifie par l'URI-vise. Si l'URI-vise identifie un processus
gnrant dynamiquement des donnes, ce sont les donnes produites qui sont renvoyes
dans l'entit au lieu du source de l'excutable appel, sauf si ce texte lui-mme est la
sortie du processus.
La smantique de la mthode GET introduit une notion conditionnelle si la requte
inclue le champ d'en-tte If-Modified-Since. Une mthode GET conditionnelle ne rcupre
la ressource que si celle-ci a t modifie depuis la date associe au champ If-Modified-
Since, comme indiqu en Section 10.9. La mthode GET conditionnelle est utilise pour
rduire la charge du rseau en permettant des ressources en cache d'tre rafrachies
sans multiplier les requtes ou transfrer des donnes inutiles.
8.2 HEAD
La mthode HEAD est identique la mthode GET, sauf qu'elle ne demande pas la
transmission du corps d'entit de la ressource en retour. Seule les mtainformations
constituant l'en-tte HTTP de la ressource sont envoyes. Cette mthode permet de ne
demander que les informations concernant la ressource (au sens d'HTTP). Elle est
utilise des fins de tests d'hyperliens, vrification d'existence ou d'actualit d'une
ressource.
Il n'existe pas de mthode HEAD conditionnelle comme pour la mthode GET. Si un
champ d'en-tte If-Modified-Since est prsent dans une requte HEAD, il devra tre
ignor.
8.3 POST
La mthode POST est utilise pour indiquer au serveur de soumettre l'entit contenue
dans le message la ressource identifie par l'URI-vise. POST est destine fournir un
moyen uniforme pour les oprations suivantes:
La fonction effective de la mthode POST est dfinie par le serveur et dpend de l'URI
dsigne. L'entit "poste" est subordonne cette URI dans le mme sens qu'un fichier
est subordonn au rpertoire qui le contient, un article est subordonn au groupe de
nouvelles qui il a t post, ou un enregistrement une base de donnes.
La rsolution d'une mthode POST ne signifie pas forcment la cration d'une entit
sur le serveur origine, ni une possibilit d'accs futur ces informations. En d'autres
termes, le rsultat d'un POST n'est pas ncessairement une ressource associable une
URI. Dans ce cas, une rponse de code 200 (OK) ou 204 (pas de contenu) est la rponse
la plus approprie, suivant que la rponse contient ou non une entit pour dcrire le
rsultat.
Si une ressource a t cre sur le serveur origine, la rponse sera du type
201 (cr) et contiendra l'entit (de prfrence du type "text/html") qui dcrira les
informations sur la requte et contiendra une rfrence sur la nouvelle ressource.
Un champ Content-Length valide est demand dans toute requte POST HTTP/1.0. Un
serveur HTTP/1.0 rpondra par un message 400 (requte incorrecte) s'il ne peut
dterminer la longueur du contenu du message.
Les applications ne peuvent enregistrer en cache les rponses des requtes POST
dans la mesure o il n'est absolument pas certain qu'une rponse ultrieure mise dans
les mmes conditions produise le mme rsultat.
Tous les codes d'tat actuellement valides sont dcrits ci-dessous, en prcisant quelle
mthode peut en tre l'origine, ainsi que les mtainformations fournir dans la rponse.
200 OK
La requte a abouti. L'information retourne en rponse dpend de la requte mise,
comme suit:
GET
Une entit correspondant l'URI vise par la requte est renvoye au client;
HEAD
La rponse au client ne doit contenir que les champs d'en-tte l'xclusion de tout
corps d'entit;
POST
Une entit dcrivant le rsultat de l'action entreprise.
201 Cr
La requte a abouti, et une nouvelle ressource rseau en rsulte.
La nouvelle ressource cre est accessible par l'URI(s) renvoye dans l'entit de la
rponse. La ressource doit tre cre avant que ce code ne soit envoy. Si la cration ne
peut pas tre opre immdiatement, le serveur devra indiquer dans la rponse quand la
ressource deviendra disponible ou retourner un message de type 202 (accepte).
Actuellement, seule la mthode POST peut conduire la cration d'une ressource.
202 Accepte
La requte a t reue et interprte correctement, mais son traitement n'est pas
termin. La requte peut ou ne peut tre rmise pendant le traitement, suivant que le
serveur autorise ou n'autorise pas un arrt du processus en cours. Il n'est pas possible de
rmettre un code d'tat dans ce type d'opration asynchrone.
La rponse 202 est intentionnellement non bloquante. Son rle est de permettre au
serveur d'accepter une requte d'un autre processus (par exemple d'un automate se
dclenchant dates fixes) sans que la connexion avec le client ne reste active pendant le
droulement du traitement. L'entit retourne par la rponse rendra compte de la requte,
et devra fournir un pointeur sur un composant d'information (tat courant du traitement),
ou donner une estimation de la date de conclusion probable dfinitive.
une fonction de redirection automatique l'activeront et rmettront une requte avec l'URI
correcte, lorsque c'est possible.
La nouvelle URL sera indique dans le champ d'en-tte Location de la rponse. Sauf
dans le cas d'une requte de type HEAD, le corps d'entit de la rponse contiendra une
note succincte avec un hyperlien vers la nouvelle URL.
Si le code d'tat 301 est reu en rponse une requte POST, le client ne pourra
rediriger automatiquement la requte sans en avoir demand confirmation l'utilisateur.
En effet, il n'est pas dit que les conditions ayant t l'origine de la requte n'aient pas
chang.
Note: Certains clients, lorsqu'ils redirigent une requte POST, transforment par erreur cette
requte en une requte GET aprs rception d'un code 301.
Note : Certains clients, lorsqu'ils redirigent une requte POST, transforment par erreur cette
requte en une requte GET aprs rception d'un code 302.
Note : Si le client met des donnes, les implmentations de TCP devront s'assurer que le
client a bien mis tous les accuss de rception des paquets transportant la rponse
avant de couper la connexion d'entre. Si le client continue d'envoyer des donnes
alors que le serveur a ferm la liaison, le TCP serveur mettra en retour un paquet RST
(reset), qui risque de stimuler un effacement prmatur de toutes les donnes reues
dans les tampons interne du TCP client (y compris les donnes concernant la rponse)
avant que celles-ci n'aient pu tre transmises l'application HTTP.
403 Interdit
Le serveur a compris la requte, mais refuse de la satisfaire.
Une dmarche d'authentification n'y fera rien et cette requte ne doit pas tre
renouvele. Si la mthode invoque est diffrente de HEAD et le serveur souhaite rendre
public la raison pour laquelle il refuse le traitement, il le fera dans l'entit lie cette
rponse. Ce code d'tat est souvent utilis lorsque le serveur ne souhaite pas s'tendre
sur les raisons pour lesquelles il refuse un accs, ou parce que c'est la seule rponse qui
convienne.
s'agit d'une condition permanente ou temporaire. Ces rponses s'appliquent quelque soit
la requte, et ne ncessitent pas de champs d'en-tte particuliers.
Note : L'existence de ce code d'tat 503 n'implique pas que le serveur l'utilise ds qu'il est
surcharg. Certains serveurs dans cette situation refuseront tout bonnement la
connexion.
10.1 Allow
Le champ Allow (entit) liste l'ensemble des mthodes supportes par la ressource
dsigne par l'URI-vise. La fonction de ce champ est simplement d'informer le rcepteur
sur les mthodes qu'il peut utiliser sur la ressource. Ce champ n'est pas autoris dans un
requte de type POST, et doit tre ignor s'il apparat dans ce dernier cas.
Exemple:
10.2 Authorization
Un utilisateur dsireux de s'identifier auprs d'un serveuren gnral, mais pas
ncessairement, aprs rception d'une rponse 401peut le faire en incluant un champ
d'en-tte Authorization dans sa nouvelle requte. Ce champ contiendra les donnes
d'autentification de l'utilisateur pour la ressource considre.
10.3 Content-Encoding
Le champ Content-Encoding (entit) est utilis pour complter l'information de type de
mdia. Lorsqu'il est prsent, il indique sous quel codage la ressource est enregistre, et
par voie de consquence, quel traitement doit tre opr sur l'entit pour pouvoir exploiter
celle ci sous son type de mdia original, dfini dans le champ d'en-tte Content-Type. Le
champ Content-Encoding a t l'origine intaur pour permettre la mise disposition de
ressource sous forme compresses, de sorte qu'il soit possible d'en connatre le type de
mdia d'origine.
Content-Encoding: x-gzip
10.4 Content-Length
Le champ d'en-tte Content-Length (entit) indique la taille du corps d'entit, sous la
forme d'un nombre d'octets exprim en dcimal, envoy au rcepteur. Dans le cas d'une
requte 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 requte GET.
Exemple:
Content-Length: 3495
Note: La signification de ce champ est lgrement diffrente de celle de son quivalent MIME,
lequel est un champ optionnel dfini l'intrieur du type "message/external-body".
Pour HTTP, il doit tre prcis mme si la longueur du corps d'entit peut tre connu
avant la transmission.
10.5 Content-Type
Le champ d'en-tte Content-Type (entit) indique le type de mdia envoy au
rcepteur dans le corps d'entit, ou, si la mthode invoque est HEAD, le type de mdia
du corps d'entit qui aurait t envoy si la ressource avait fait l'objet d'une requte de
type GET.
Content-Type: text/html
Une prsentation d'autres mthodes pour identifier le type de mdia est donne en
Section 7.2.1.
10.6 Date
Le champ d'en-tte Date (gnral) donne la date et l'heure laquelle le message a t
"rdig", et utilise la smantique de dates de la RFC 822. La valeur de ce champ est une
date dans un des formats HTTP dcrits la Section 3.3.
Exemple:
Si un message est reu en direct du client (pour les requtes) ou du serveur origine
(pour les rponses), on peut affirmer qu'il s'agit aussi de la date d'arrive au rcepteur.
En outre, dans la mesure o la date dlivre par l'origine est un paramtre
important pour tout ce qui touche la gestion des caches, il est vivement conseill que
les serveurs origine renseignent systmatiquement ce champ la constitution de tout
message. Les clients peuvent se limiter l'envoi d'une date lorsque la requte contient un
corps d'entit, comme dans le cas d'une requte POST, et encore cette pratique n'est pas
obligatoire. Un message reu et non dat se verra assigner une date par le rcepteur si
ce message doit tre enregistr en cache ou rerout via un protocole qui exige une Date.
En thorie, la date doit reprsenter 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-tte Expires (entit) indique la date et l'heure partir de laquelle le
message doit tre considr comme obsolte. Ceci permet de suggrer la notion de
"validit temporaire" de l'information. Les applications ne doivent pas enregistrer ces
entits dans leur cache aprs la date spcifie. Le prsence d'un champ Expires ne
signifie pas que la ressource originale n'a pas chang ou n'existe plus cette date, avant,
ou aprs cette date. Cependant, tout serveur sachant, ou pouvant supposer que cette
ressource aura chang une certaine date devra de prfrence inclure un champ Expires
avec cette date. Le format de la date mentionne est une date absolue telle que dfinie
la Section 3.3.
Exemple:
Si la date indique dans ce champ est gale ou antrieure la date mentionne dans
le champ date du mme en-tte, 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 rsultats de processus gnrateurs de donnes, les entits
produites se verront attribues un champ Expires renseign d'une faon correspondante
ce "dynamisme".
Le champ Expires ne peut pas tre utilis pour forcer un client rafrachir ou recharger
une ressource. Sa smantique ne concerne que les mcanismes de gestion du cache,
lesquels n'utilisent ce paramtre que pour savoir si le serveur peut encore utiliser
l'instance cache lorsqu'une requte destine ce document est nouveau prsente.
Les clients HTTP disposent souvent d'un mcanisme d'historique, implment sous
forme d'un bouton "Back" et/ou d'une liste de "documents prcdents", utiliss pour
recharger un document prcdemment charg pendant la session courante. Par dfaut, le
champ Expires n'influe pas sur ces mcanismes. Si l'entit est stocke par un tel
mcanisme, elle pourra tre recharge mme si sa date d'expiration est passe, sauf si
l'utilisateur a explicitement configur le client pour rgnrer les documents ayant expir.
Note : Il est encourag que les applications fassent preuve d'une certaine tolrance quant
des implmentations errones ou incompltes du champ Expires. Une valeur zro (0)
ou une date prsente sous un mauvais format signifient "expiration immdiate". Bien
que ces valeurs ne soient pas valides dans le cadre d'HTTP/1.0, une implmentation
tolrante est toujours souhaitable.
10.8 From
Le champ d'en-tte From (requte), si prsent, devra contenir l'adresse e-mail Internet
de l'utilisateur "humain" contrlant le client metteur de la requte. Cette adresse doit tre
code sous une forme utilisable par les machines, telle que dfinie dans la RFC 822 [7]
(et RFC 1123 [6]):
Exemple:
From: webmaster@w3.org
employe. En particulier, les robots devront renseigner ce champ afin que son
responsable d'exploitation puisse tre contact en cas de dysfonctionnement l'autre
extrmit.
L'adresse e-mail Internet dans ce champ doit tre spar de la mention du nom de
l'ordinateur d'o a t mis la requte. Par exemple, lorsque la requte a transit par
l'intermdiaire d'un proxy, l'adresse de la source originale doit y tre mentionne.
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 donnes
prives et des droits individuels. Il est fortement recommand que le client laisse le
choix l'utilisateur de pouvoir activer, dsactiver, et modifier la valeur mise dans ce
champ avant mission de toute requte.
10.9 If-Modified-Since
Le champ d'en-tte If-Modified-Since (requte) est utilis lors d'une requte de type
GET pour en mettre une forme conditionnelle: Si la ressource vise n'a pas t modifie
depuis la date mentionne dans ce champ, la copie de la ressource ne sera pas renvoye
par le serveur; En lieu et place, une rponse de type 304 (non modifi) sera renvoye
sans aucun corps d'entit associ.
Exemple:
a) Si la rsolution de la requte conduit une rponse autre que 200 (OK), ou si la date
passe par le champ If-Modified-Since n'est pas valide, la rponse sera alors donne
comme si la mthode invoque tait un GET standard. Une date postrieure la date
courante du serveur est non valide.
b) Si la ressource a t modifie aprs la date If-Modified-Since, la rponse sera donne
comme dans le cas d'une mthode GET standard.
c) Si la ressource n'a pas t modifie depuis la date If-Modified-Since, et cette date est
valide, le serveur renverra une rponse 304 (non modifi).
Le but de cette implmentation est de permettre une remise jour efficace des
informations en cache, en rduisant au maximum les transactions rseau.
10.10 Last-Modified
Le champ d'en-tte Last-Modified (entit) indique la date et l'heure laquelle le
serveur pense que la ressource vise a t modifie pour la dernire fois. La smantique
exacte de ce champ dpend fortement de la manire dont le rcepteur va le comprendre:
Si le rcepteur dispose d'une copie de cette ressource d'une date infrieure celle
mentionne dans le champ Last-Modified, cette copie devra tre considre comme
obsolte.
Exemple:
10.11 Location
Le champ d'en-tte Location (rponse) renvoie la localisation exacte de la ressource
identifie par l'URI-vise de la requte. Pour des rponses 3xx, ce champ indique l'URL
"de prfrence" donne par le serveur pour la fonction de redirection automatique. Une
seule URI absolue peut tre mentionne la fois.
Exemple:
Location: http://www.w3.org/hypertext/WWW/NewLocation.html
10.12 Pragma
Le champ d'en-tte Pragma (gnrale) est utilis pour transmettre des directives
dpendantes de l'implmentation tous les agents de la chane de requte/rponse.
Toutes les directives Pragma spcifient un comportement particulier optionnel de la part
des agents vis vis du protocole; cependant, certains systmes ne pourront rpondre
toutes les directives.
10.13 Referer
Le champ d'en-tte Referer (requte) permet au client d'indiquer, l'usage du serveur,
l'adresse (URI) de la ressource dans laquelle l'URI-vise a t trouve. Ceci permet au
serveur de gnrer et entretenir des listes de "rtro-liens" destines renseigner les
clients futurs sur des "sites intressants", ou but d'archivage et d'analyse, optimisation
de cache, etc. Il permet aussi l'analyse de liens obsoltes ou de type incorrect but de
maintenance. Le champ Referer ne doit pas tre inscrit si la source de l'URI-vise
provient d'une entit n'ayant pas d'URI propre, comme l'entre de l'adresse via un clavier.
Exemple:
Referer: http://www.w3.org/hypertext/DataSources/Overview.html
Si une URI partielle est donne, elle se rfrera relativement l'URI-vise. L'URI donne
en rfrence ne doit pas inclure de fragment.
Note : Dans la mesure o la rfrence d'un lien est une information qui peut avoir un
caractre priv, ou tre amene rvler une information prive, 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 simultanment peut activer ou dsactiver l'mission des champs
Referer et Form.
10.14 Server
Le champ d'en-tte Server (rponse) contient des informations sur le logiciel utilis par
le serveur origine pour traiter la requte. Ce champ peut contenir plusieurs noms de
produits diffrents (Section 3.7) ainsi que des commentaires identifiant le serveur et des
"sous-composants" des applications. Par convention, les noms sont lists par ordre
d'importance, eu gard l'identification du produit utilis.
Exemple:
Si la rponse est transmise via un proxy, ce dernier ne doit pas ajouter ses propres
commentaires la liste.
10.15 User-Agent
Le champ d'en-tte User-Agent (requte) contient des informations sur l'utilisateur
metteur de la requte. Cette information est utilise des fins statistiques, pour tracer
des violations de protocole, et des fins de reconnaissance automatique d'utilisateur
permettant de formater la rponse de la manire la plus adapte. L'usage de ce champ,
bien que non indispensable, est cependant conseill. Le champ User-Agent peut
mentionner plusieurs noms de produits (Section 3.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
listes par ordre d'importance.
Exemple:
Note : Certains proxies ajoutent leur propre information ce champ. Ceci est dconseill,
dans la mesure o le contenu final de ce champ peut alors devenir ambigu, voire
confus.
10.16 WWW-Authenticate
Le champ d'en-tte WWW-Authenticate (rponse) doit tre inclus dans des rponses
de type 401 (non autoris). La valeur du champ consiste en un ou plusieurs "modles"
d'identification pour l'URI-vise.
Scheme-auth = nom_de_scheme
Le message de rponse 401 (non autoris) est utilis par un serveur origine pour
soumettre le "modle" d'authentification un client. Cette rponse doit comporter un
champ d'en-tte WWW-Authenticate proposant au moins un modle valide pour la
ressource atteindre.
L'attribut de domaine (indpendant de la casse) est requis dans tous les schmes
d'authentification qui soumettent un modle. L'espace de domaine (indpendant de la
casse), combin l'URL canonique du serveur origine, dfinit l'espace protg. Cette
technique permet de partitionner un serveur protg en plusieurs sous ensembles,
protgs individuellement, chacun avec leur propre modle et leurs propres paramtres
d'autorisation lies ou non une base de donne d'authentification. Le domaine
accessible est exprim sous forme de chane de caractres, en gnral donne par le
serveur origine, avec ventuellement une smantique supplmentaire dpendant du
modle d'authentification.
Un utilisateur dsireux de s'authentifier auprs d'un serveur en gnral, mais pas
ncessairement, aprs avoir reu une rponse 401peut le faire en spcifiant un champ
Authorization dans l'en-tte de sa requte. La valeur dans le champ Authorization
consiste contient l'accrditif ncessaire l'accs au domaine autoris pour la ressource
vise.
Le domaine accessible par un utilisateur utilisant cet accrditif est dtermin par les
donnes de protection du serveur. Si une requte prcdente abouti une autorisation
d'accs, le mme accrditif donnera accs au mme domaine accessible durant un temps
dtermin par le modle d'authentification, ses paramtres, et/ou les prfrences
utilisateur. Sauf mention explicite dans le modle, un espace protg ne peut sortir du
cadre du serveur qui le gre.
Si le serveur refuse l'accs une requte, il dlivrera en retour une rponse 403
(accs interdit).
Le protocole HTTP n'exclut pas l'utilisation de schmas de protection additionnels,
venant complter ou remplacer le paradigme "modle-accrditif". D'autres mcanismes,
tels que le cryptage au niveau "transport" ou l'encapsulation de messages, peuvent tre
utiliss avec des champs d'en-tte additionnels vhiculant les informations
d'authentification. Ces mcanismes ne sont toutefois pas dcrits dans cette spcification.
Les proxies doivent tre compltement transparents vis vis du mcanisme
d'authentification. C'est dire qu'ils doivent retransmettre les champs WWW-Authenticate
et Authorization tels que, et ne doivent pas enregistrer une rponse 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.
Sur toute rception d'une requte non autorise visant une URI dans l'espace protg,
le serveur doit renvoyer une demande d'identification de forme:
Le modle de base ci-dfini est une mthode non scurise de filtrage d'accs des
ressources donnes 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
rseaux ouverts, et ce modle doit tre utilis en connaissance de cause. Malgr cette
faiblesse, les clients devront implmenter ce modle afin de pouvoir communiquer avec
les serveurs qui l'utilisent.
12. Scurit
personnelles sur les gots, les tendances ou les centres d'intrt 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
liberts", dans la mesure o un archivage systmatique et une interprtation
"sociologique" nominative sont raliss). Les personnes utilisant le protocole HTTP pour
diffuser des donnes ont la responsabilit de s'assurer que toute information reue
pouvant identifier et classifier les visiteurs ne puissent tre communique sans l'accord
de ces derniers.
tre protgs contre toute diffusion, dans la mesure o ils peuvent contenir des
informations essentielles et confidentielles. L'exprience a montr que des imperfections
mineures du logiciel serveur ont pu conduire un rel risque en terme de scurit.
13. Crdits
14. Bibliographie
[1] Anklesaria, F., McCahill, M., Lindner, P., Johnson, D., Torrey, D., and
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.
[15]
Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700,
USC/ISI, October 1994.
[16]
Sollins, K., and L. Masinter, "Functional Requirements for Uniform
Resource Names." RFC 1737, MIT/LCS, Xerox Corporation, December 1994.
[17]
US-ASCII. Coded Character Set - 7-Bit American Standard Code for
Information Interchange. Standard ANSI X3.4-1986, ANSI, 1986.
[18]
ISO-8859. International Standard -- Information Processing --
8-bit Single-Byte Coded Graphic Character Sets --
Part 1: Latin alphabet No. 1, ISO 8859-1:1987.
Part 2: Latin alphabet No. 2, ISO 8859-2, 1987.
Part 3: Latin alphabet No. 3, ISO 8859-3, 1988.
Part 4: Latin alphabet No. 4, ISO 8859-4, 1988.
Part 5: Latin/Cyrillic alphabet, ISO 8859-5, 1988.
Part 6: Latin/Arabic alphabet, ISO 8859-6, 1987.
Part 7: Latin/Greek alphabet, ISO 8859-7, 1987.
Part 8: Latin/Hebrew alphabet, ISO 8859-8, 1988.
Part 9: Latin alphabet No. 5, ISO 8859-9, 1990.
Tim Berners-Lee
Director, W3 Consortium
MIT Laboratory for Computer Science
545 Technology Square
Cambridge, MA 02139, U.S.A.
Roy T. Fielding
Department of Information and Computer Science
University of California
Irvine, CA 92717-3425, U.S.A.
Appendices
Ces appendices ont t ajouts par souci d'information Ils ne forment pas partie
intgrante de la spcification HTTP/1.0.
version: Version du protocole HTTP utilis pour le message courant (e.g., "1.0"). Si ce
paramtre est absent, la version peut tre dduite par analyse de la premire ligne du
corps.
B. Applications tolrantes
Bien que ce document donne toutes les spcifications pour la gnration de messages
HTTP/1.0, toutes les applications ne prsenteront pas une implmentation correcte. Nous
recommandons de ce fait que les applications oprationnelles puissent tolrer certaines
dviation de ce protocole, dans la mesure o celles-ci gardent un caractre univoque.
Les clients devront faire preuve de tolrance dans l'interprtation de la ligne d'tat. Les
serveurs devront leur tour se montrer ouverts dans l'interprtation de la ligne de
reste conforme l'un des formats reconnus par HTTP/1.0, et rcriront les dates si
ncessaire.
D. Fonctions supplmentaires
Cet appendice liste quelques lments de protocole parfois employs dans certaines
implmentations HTTP, mais qui ne sont pas considres comme "lgitimes" par la
plupart des applications HTTP/1.0. Les dveloppeurs ont un intrt connatre ces
fonctions, mais ne peuvent tre srs de leur prsence effective, ni de leur implmentation
par d'autres applications HTTP/1.0.
D.1.1 PUT
La mthode PUT demande ce que l'entit jointe soit enregistre par le serveur sous
l'URI-vise. Si cette URI pointe vers une ressource dj existante, l'entit jointe sera
considre comme une nouvelle version de celle jusqu'alors prsente sur le serveur
origine. Si l'URI-vise pointe sur une ressource inexistante, et la condition que cette
URI puisse tre dfinie en tant que nouvelle ressource du serveur, ce dernier crera une
nouvelle ressource sous cette URI.
D.1.2 DELETE
La mthode DELETE demande au serveur de supprimer la ressource pointe par l'URI-
vise.
D.1.3 LINK
La mthode LINK tablit une ou plusieurs liaisons entre la ressource existante dfinie
par l'URI-vise et d'autres ressources.
D.1.4 UNLINK
A contrario, cette mthode supprime des liaisons entre la ressource dfinie par l'URI-
vise, et d'autres ressources qui lui sont lies.
D.2.1 Accept
Le champ d'en-tte Accept (requte) peut tre utilis pour dfinir une liste de types de
mdia accepts en rponse la requte. L'astrisque "*" est utilise pour grouper des
types de mdia par classe, "*/*" indiquant tous les types de mdia, et "type/*" indiquant
tous les sous-types du type "type". La gamme de types signale par le client sert
essentiellement limiter les documents des types acceptables par le client dans le
contexte de la requte formule.
D.2.2 Accept-Charset
Le champ d'en-tte Accept-Charset (requte) peut tre utilis pour former une liste de
tables de caractres prfrentielles, autres que les tables US-ASCII et ISO-8859-1
utilises par dfaut. Ce champ permet un client de signaler un serveur qu'il sait
accepter d'autres reprsentations de texte que les reprsentations par dfaut, et est donc
en mesure d'exploiter des documents encods avec ces tables, si le serveur sait les
transmettre.
D.2.3 Accept-Encoding
Le champ d'en-tte Accept-Encoding (requte) est similaire au champ Accept, mais
restreint la gamme de valeurs Content-Coding attendues dans une rponse.
D.2.4 Accept-Language
Le champ d'en-tte Accept-Encoding (requte) est similaire au champ Accept, mais
restreint la gamme de langues attendues dans une rponse.
D.2.5 Content-Language
D.2.6 Link
Le champ d'en-tte Link (entit) permet de dcrire 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 mtainformation, indique typiquement des relations du
type dpendance hirarchique ou des chemins d'accs.
D.2.7 MIME-Version
Les messages HTTP peuvent inclure un champ unique d'en-tte gnrale indiquant
quelle version du protocole MIME a t employ pour construire le message. L'utilisation
de ce champ MIME-Version, tel que dcrit par la RFC 1521 [5], peut indiquer si le
message est compatible MIME. Malheureusement, certaines premires implmentations
de serveurs HTTP/1.0 mettent ce champ sans rserve. Il est conseill de l'ignorer.
D.2.8 Retry-After
Le champ d'en-tte Retry-After (rponse) peut tre utilis dans une rponse 503
(service indisponible) dans le but d'indiquer pendant combien de temps (estim) le
service restera indisponible aux requtes du client. La valeur de ce champ peut tre une
date HTTP ou un nombre entier de secondes (en dcimal) partir de l'heure de la
rponse.
D.2.9 Title
Le champ d'en-tte Title est purement informatif et donne le titre de l'entit.
D.2.10 URI
Le champ d'en-tte URI (entit) peut contenir toute ou partie des Uniform Resource
Identifiers (Section 3.2) par laquelle la ressource dfinie par l'URI-vise peut tre
identifie. Aucune garantie n'est cependant donne que la ressource soit effectivement
accessible par l'une des URI spcifies.