XMLHttpRequest
Copyright � 2007 W3C� (MIT, ERCIM, Keio),Tous droits r�serv�s. Les r�gles du W3C pour les responsabilit�, nom de marque et usage du document sont applicables.
La sp�cification de l'objet XMLHttpRequest
d�finit une API (Interface d'application) qui procure au script client
des fonctionnalit�s pour transf�rer des donn�es entre un client et un
serveur.
Cette section d�crit le statut de ce document au moment de sa publication. D'autres documents peuvent remplacer ce document. Une liste des publications W3C en cours et la derni�re r�vision de ce compte-rendu technique peuvent �tre trouv�s dans l' index des compte-rendus techniques W3C � https://www.w3.org/TR/.
C'est la version du 15 Avril 2008 du Document de Travail de la
sp�cification de l'objet XMLHttpRequest
.
Envoyez s'il vous pla�t vos commentaires � [email protected]
(archives)
avec soit [XHR] ou [XMLHttpRequest]
au d�but de la ligne du sujet avant le 2 juin 2008.
Ce document est produit par le groupe de travail API Web (Web APIs Working Group), qui fait partie de l'activit� clients web riches (Rich Web Clients Activity) dans le domaine d'interaction (Interaction Domain) W3C. Les modifications faites sur ce document peuvent �tre trouv�e sur le serveur CVS public du W3C.
La publication en tant que Document de Travail n'implique pas l'approbation par les membres du W3C. C'est un document de travail et il peut �tre mis � jour, remplac� ou rendu obsol�te par d'autres documents � tout moment. Il serait inappropri� de citer ce document autrement que comme un travail en cours.
Ce document a �t� produit par un groupe op�rant sous la politique
de brevet du W3C du 5 f�vrier 2004. Le W3C maintient une liste publique de toutes divulgations de
brevet faites en relation avec les productions du groupe;
cette page inclut �galement les instructions pour divulguer un brevet.
Une personne ayant connaissance d'un brevet dont il croit qu'il
contient des Revendications Essentielles vis �
vis de cette sp�cification doit divulguer cette information, comme le
demande la section
6 de politique de brevet du W3C.
XMLHttpRequest
Cette section n'est pas normative.
L'objet XMLHttpRequest
impl�mente une interface mise � disposition par un interpr�teur de
scripts qui permet aux scripts d'accomplir les fonctionnalit�s de
client HTTP,
telles que soumettre des donn�es de formulaire ou le chargement de
donn�es � partir d'un serveur.
Le nom de l'objet est XMLHttpRequest
pour la compatibilit� avec le Web, bien que chaque composant du nom
puisse induire en erreur. Premi�rement, l'objet supporte tout format
bas� sur du texte, incluant XML. Deuxi�mement, il peut �tre utilis� �
la fois pour faire des requ�tes sous HTTP ou HTTPS (quelques
impl�mentations supportent des protocoles en plus de HTTP et HTTPS,
mais cette fonctionnalit� n'est pas couverte par cette sp�cification).
Finalement, il permet des "requ�tes" au sens large du terme, puisqu'il
concerne HTTP; nomm�ment toute activit� en rapport avec les requ�tes
HTTP ou r�ponses pour les m�thodes HTTP d�finies.
Un simple code pour faire quelque chose avec les donn�es d'un document XML r�cup�r� sur le r�seau:
function test(data) {
// prendre en compte les donn�es
}
function handler() {
if(this.readyState == 4 && this.status == 200) {
// jusque l� cela va
if(this.responseXML != null && this.responseXML.getElementById('test').firstChild.data)
// succ�s!
test(this.responseXML.getElementById('test').firstChild.data);
else
test(null);
} else if (this.readyState == 4 && this.status != 200) {
// demand� la mauvaise page ou probl�me de r�seau...
test(null);
}
}
var client = new XMLHttpRequest();
client.onreadystatechange = handler;
client.open("GET", "test.xml");
client.send();
Si vous voulez juste passer un message au serveur:
function log(message) {
var client = new XMLHttpRequest();
client.open("POST", "/log");
client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
client.send(message);
}
Ou si vous voulez tester le statut d'un document sur le serveur:
function fetchStatus(address) {
var client = new XMLHttpRequest();
client.onreadystatechange = function() {
// en cas d'erreur du r�seau les r�sultats obtenus ne seraient pas fiables
if(this.readyState == 4)
returnStatus(this.status);
}
client.open("HEAD", address);
client.send();
}
Tout dans cette sp�cification est normatif, � l'exception des diagrammes, exemples, notes et des sections not�es comme n'�tant pas normatives.
Les mots cl�s doit, ne doit pas, requis, va, ne va pas, devrait, ne devrait pas, recommand�, peut et optionnel dans le document doivent �tre interpr�t�s comme d�crit en RFC 2119. [RFC2119]
Cette sp�cification d�finit les classes de produits suivantes:
Un agent utilisateur doit se comporter tel que d�crit dans cette sp�cification pour �tre consid�r� comme conforme.
Si l'agent utilisateur n'est pas un agent utilisateur XML
conforme le corps
d'entit� de r�ponse XML doit
(toujours ) �tre null
.
Les agents utilisateurs peuvent impl�menter tout algorithme donn� dans cette sp�cification de la fa�on qui leur convient, du moment que le r�sultat final ne peut se distinguer du r�sultat qui aurait �t� obtenu par les algorithmes de la sp�cification.
Cette sp�cification utilise � la fois les termes "agent(s) utilisateur(s) conforme(s)" et "agent(s) utilisateur(s)" pour se r�f�rer � cette classe de produits.
Un agent utilisateur qui est � la fois un agent utilisateur conforme et un processeur XML qui rapporte les violations de formation dans les espaces de noms. [XML] [XMLNS]
Cette sp�cification d�pend de plusieurs autres sp�cifications sous-jacentes.
Un agent utilisateur conforme doit reconna�tre quelque sous-ensemble des fonctionnalit�s d�finies dans DOM Events (Ev�nements DOM) et DOM Core (coeur de DOM) parce que cette sp�cification se base l� dessus. [DOM3Events] [DOM3Core]
Cette sp�cification d�pends de HTML�5 pour
definir l'objet Window
et trouver l'encodage
de caract�res d'une ressource text/html
. Un agent utilisateur conforme
doit supporter ces
caract�ristiques. [HTML5]
L'�bauche de Window
Object 1.0 n'est pas r�f�renc�e normativement puisqu'il
semble qu'elle ne soit plus mise � jour et HTML�5 d�finit
l'objet Window
avec plus de details. Cette
sp�cification d�pends d�j� de HTML�5 pour d'autres raisons
aussi ceci n'occasionne pas de surco�t.
Un agent utilisateur
conforme doit
reconna�tre quelque version du protocole HTTP. Il doit reconna�tre
toute m�thode HTTP qui corresponde � la production
de M�thode
et doit au moins
supporter les m�thodes suivantes:
GET
POST
HEAD
PUT
DELETE
OPTIONS
Il y a une correspondance insensible � la casse des cha�nes s1 et s2 si apr�s mise en majuscules des deux cha�nes (en faisant correspondre a-z � A-Z) elles s'av�rent identique.
Deux URIs sont de m�me m�me-origine si apr�s que l'on ait accompli une normalisation bas�e sur les sch�mas des deux URIs comme d�crit dans la section 5.3.3 de la RFC 3987, les sch�mas, les composants ihost et port sont identiques. Si une des URIs n'a pas de composant ihost les URIs ne doitvent pas �tre consid�r�es de m�me origine. [RFC3987]
Les extensions de l'API d�finie dans cette sp�cification sont fortement d�courag�es. Les agents utilisateurs, Groupes de Travail et autres parties int�ress�es devraient discuter d'extensions sur un forum public concern�, de pr�f�rence sur [email protected].
Outre les pr�-requis pour la s�curit� donn�s dans cette sp�cification, les impl�mentations peuvent, � leur discr�tion, ne pas pr�senter certains en-t�tes, tels les cookies HttpOnly.
XMLHttpRequest
L'objet XMLHttpRequest
peut �tre utilis� pour permettre aux scripts de se connecter selon leur
programmation � leur serveur d'origine par HTTP.
Les objets impl�mentant l'interface XMLHttpRequest
doivent aussi impl�menter
l'interface EventTarget
[DOM2Events].
Les objets impl�mentant l'interface Window
doivent fournir un constructeur XMLHttpRequest()
. [HTML5]
En ECMAScript cela peut �tre utilis�
de la fa�on suivante :
var client = new XMLHttpRequest();
Quand le constructeur XMLHttpRequest()
est invoqu�, un pointeur persistant associ� � l'objet Document
est stock� sur l'objet nouvellement cr��. C'est le pointeur
Document
.
L'objet Document
associ� est celui qui est
retourn� par l'attribut document
de l'objet
sur lequel le constructeur XMLHttpRequest
a �t� invoqu� (un objet Window
). Le pointer
peut devenir "null" si l'objet a �t� supprim�.
Puisque du fait des crit�res de conformit� les impl�mentations sont libres d'impl�menter ceci de la fa�on qu'elle veulent pourvu que les r�sultats finaux soient identiques � ceux donn�s par la prose Fran�aise.
Si iframe
est
un objet Window
le client
aura un pointeur sur iframe.document
dans l'exemple suivant:
var client = new iframe.XMLHttpRequest()
interface XMLHttpRequest {
attribut EventListener onreadystatechange;
// �tat
const unsigned short UNSENT = 0;
const unsigned short OPENED = 1;
const unsigned short HEADERS_RECEIVED = 2;
const unsigned short LOADING = 3;
const unsigned short DONE = 4;
attribut lectureseule unsigned short readyState;
// requ�te
void open(en m�thode DOMString, en url DOMString);
void open(en m�thode DOMString, en url DOMString, en boolean async);
void open(en m�thode DOMString, en url DOMString, en boolean async, en utilisateur DOMString);
void open(en m�thode DOMString, en url DOMString, en boolean async, en utilisateur DOMString, mot-de-passe DOMString);
void setRequestHeader(en en-t�te DOMString, en valeur DOMString));
void send();
void send(en donn�e DOMString);
void send(en donn�e Document);
void abort();
//r�ponse
DOMString getAllResponseHeaders();
DOMString getResponseHeader(en en-t�te DOMString);
attribut lectureseule DOMString responseText;
attribut lectureseule Document responseXML;
attribut lectureseule unsigned short status;
attribut lectureseule DOMString statusText;
};
L'objet XMLHttpRequest
peut avoir cinq �tats: UNSENT, OPENED,
HEADERS_RECEIVED, LOADING
et DONE.
L'�tat courant est donn� par l'attribut readyState
.
Les d�finitions de m�thodes ci-dessous d�finissent quand une transition
d'�tat est op�r�e.
Lorsqu'il est construit, l'objet XMLHttpRequest
doit �tre dans l'�tat UNSENT.
Cet �tat est repr�sent� par la constante UNSENT
,
dont la valeur est 0
.
L'�tat OPENED est l'�tat de l'objet lorsque la m�thode open()
a �t�
invoqu�e avec succ�s. Durant cet �tat les en-t�tes de requ�tes peuvent
�tre assign�s par l'utilisation de setRequestHeader()
et la requ�te peut �tre faite en utilisant send()
. Cet �tat est
repr�sent� par la constante OPENED
,
dont la valeur est 1
.
L'�tat OPENED a un drapeau
send()
associ� qui peut valoir soit "true" ou "false" (vrai ou faux). La
valeur initiale du drapeau send()
est "false".
L'�tat HEADERS_RECEIVED est l'�tat de l'objet quand tous les
en-t�tes de r�ponse ont �t� re�us. Cet �tat est repr�sent� par la
constante HEADERS_RECEIVED
,
dont la valeur est 2
.
L'�tat LOADING est l'�tat de l'objet quand le corps de
l'entit� r�ponse a en cours de r�ception. L'�tat est repr�sent� par la
constante LOADING
,
dont la valeur est 3
.
L'�tat DONE est l'�tat de l'objet quand soit le transfert des
donn�es s'est termin� ou quelquechose n'a pas fonctionn� durant le
transfert (redirections infinies par exemple). L'�tat est repr�sent�
par la constante DONE
,
dont la valeur est 4
.
L'�tat DONE a �t� associ� avec le drapeau error qui peut �tre soir "true" ou "false". La valeur initale du drapeau error est "false".
Le corps d'entit� response est le fragment du corps d'entit� re�u jusque l� (�tat LOADING) ou le corps d'entit� complet (�tat DONE). S'il n'y a pas de corps d'entit� le corps d'entit� response entity body vaut "null".
Le corps
d'entit� response text est soit une DOMString
repr�sentant le corps
d'entit� response ou null
. La
valeur du corps d'entit� response text doit
�tre d�termin� en ex�cutant l'algorithme suivant:
Si le corps d'entit� response est "null" retourner null
et terminer ces �tapes.
Faire que le charset soit "null".
S'il n'y a pas d'en-t�te Content-Type
ou s'il y a un en-t�te Content-Type
qui
contient un type MIME qui est text/xml
, application/xml
ou se termine en +xml
(en
ignorant tous param�tres) utiliser l'ensemble de r�gles mises en avant
par la sp�cification XML pour d�terminer l'encodage des caract�res.
Faire que charset soit l'encodage de caract�res
d�termin�.
S'il y a un en-t�te Content-Type
contenant un type MIME text/html
suivre les
r�gles mises en avant dans la sp�cification HTML 5 pour d�terminer
l'encodage des caract�res. Faire que charset
soit l'encodage de caract�res d�termin�. [HTML5]
Si le type MIME sp�cifi� par l'en-t�te Content-Type
contient un param�tre charset
et que charset
soit "null" faire, que charset soit la valeur
de ce param�tre.
L'algorithme d�crit par les
sp�cifications XML et HTML prend d�j� en compte Content-Type
.
Si charset est "null" alors, pour chacune des lignes dans la table qui suit, en partant de la premi�re et en descendant, si le premier octet de Octets correspond aux octets donn�s dans la premi�re colonne, alors faire que charset soit l'encodage donn� dans la cellule de la seconde colonne de la ligne. S'il y a pas correspondance charset reste � "null".
Octets en Hexad�cimal | Description |
---|---|
00 00 FE FF | UTF-32BE BOM |
FF FE 00 00 | UTF-32LE BOM |
FE FF | UTF-16BE BOM |
FF FE | UTF-16LE BOM |
EF BB BF | UTF-8 BOM |
Si charset est "null" faire que charset soit UTF-8.
Retourner le r�sultat du d�codage du corps d'entit� response en utilisant le charset. Remplacer les octets ou s�quences d'octets qui ne sont pas valide selon le charser avec un simple caract�re U+FFFD.
Authors are encouraged to simply encode their resources using UTF-8.
Le corps
d'entit� response XML est soit un Document
repr�sentant le corps
d'entit� response ou null
. Le corps
d'entit� response XML est la valeur de retour de l'algorithme suivant:
Si le corps d'entit� response est "null" terminer ces
�tapes et retourner null
.
Si un Content-Type
est pr�sent
et ne contient pas de type MIME (en ignorant tous param�tres) qui soit text/xml
,
application/xml
ou finisse en +xml
terminer ces �tapes et retourner null
.
(Ne pas terminer ces �tapes s'il n'y a pas d'en-t�te Content-Type
du tout.)
Parser le corps d'entit� response dans l'arborescence du
document en suivant les r�gles des sp�cifications XML. Faire que le
r�sultat soit le document parsed. Si cela
�choue (encodage de caract�res non support�, erreur de formation
d'espace de nom et cetera) terminer ces �tapes et retourner null
.
[XML]
[XMLNS]
Les scripts dans l'arborescence du document qui en r�sulte ne seront pas ex�cut�s, les ressources r�f�renc�es ne seront pas charg�es et aucun XSLT associ� ne sera appliqu�.
Retourner un objet impl�mentant l'interface Document
repr�sentant le document pars�.
onreadystatechange
de type EventListener
Cet attribut est un attribut
du gestionnaire d'�v�nement de DOM et doit
�tre invoqu� quand un �v�nement readystatechange
est destin� � l'objet.
readyState
de type unsigned short
, lecture seuleLorsqu'on l'obtient l'attribut doit retourner la valeur de la constante correspondant � l'�tat actuel de l'objet.
open(m�thode,
url, async, utilisateur,
mot-de-passe)
Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes (� moins qu'il ne soit indiqu� de faire autrement):
Faire que la m�thode stock�e soit l'argurment method.
Si la m�thode stock�e ne
correspond par � une production
de Method
d�finie en section 5.1.1 de la RFC 2616 lever un exception SYNTAX_ERR
et terminer ces �tapes. [RFC2616]
Si la m�thode stock�e correspond
sans �gard � la casse � CONNECT
, DELETE
,
GET
, HEAD
, OPTIONS
POST
, PUT
, TRACE
,
ou TRACK
faire que la m�thode
stock�e soit sous la forme canonique majuscules du nom de
m�thode correspondant..
Si la m�thode stock�e est CONNECT
,
TRACE
, ou TRACK
,
l'agent utilisateur devrait
lever une exception SECURITY_ERR
et terminer ces �tapes.
�ter l'identifieur de fragment (s'il en est) de l' url et faire que l'url stock�e soit le r�sultat de cette op�ration.
Si l'url stock�e est une
r�f�rence relative la r�soudre en utilisant la valeur courante de
l'attribut baseURI
du pointer Document
.
Si cela �chour lever une exception SYNTAX_ERR
et terminer ces �tapes.
Si l'url stock�e contient un
sch�ma non reconnu lever une exception NOT_SUPPORTED_ERR
et terminer ces �tapes.
Si le format "utilisateur:mot-de-passe"
dans la production userinfo
d�finie en
section 3.2.1 de la RFC 3986 n'est pas reconnu pour le sch�ma concern�
et que l'url stock�e contient ce format, lever
une exception SYNTAX_ERR
et terminer ces
�tapes. [RFC3986]
Si l'url stock�e contient le
format "utilisateur:mot-de-passe"
, faire que
l'utilisateur stock� soit la partie utilisateur
et que le mot de passe stock� soit la partie
mot-de-passe.
Si l'url stock�e contient juste
le format "user"
faire que l'utilisateur
stock� soit la partie utilisateur.
Si l' url n'est pas de m�me origine que l'origine du pointeur Document
,
l'agent utilisateur devrait lever une exception SECURITY_ERR
et
terminer ces �tapes.
Assigner � async la valeur de
l'argument async ou true
s'il �tait omis.
Si l'argument utilisateur
n'�tait pas omis et que la syntaxe ne corresponde pas � ce que sp�cifie
le sch�ma d'authentification concern�, lever une exception SYNTAX_ERR
et terminer ces �tapes.
Si l'argument utilisateur
n'�tait pas omis et qu'il n'est pas null
assigner � l'utilisateur stock� l' utilisateur
encod� en utilisant l'encodage sp�cifi� dans le sch�ma
d'authentification concern� ou UTF-8 si le sch�ma �choue � sp�cifier un
encodage.
Cette �tape remplace tout utilisateur qui pourrait avoir �t� assign� par l'argument d'url.
Si l'argument utilisateur
n'�tait pas omis et qu'il soit null
, �ter l'utilisateur
stock�.
Si l'argument mot de passe
n'�tait pas omis et que sa syntaxe ne corresponde par � ce qui est
sp�cifi� by le sch�ma d'authentification concern� lever une exception SYNTAX_ERR
et terminer ces �tapes.
Si l'argument mot de passe
n'�tait pas omis et n'est pas null
assigner
mot de passe encod� a mot de passe stock�
en utilisant l'encodage sp�cifi� dans le sch�ma d'authentification
concern� ou UTF-8 si le sch�ma �choue � sp�cifier un encodage.
Si l'argument mot de passe
n'�tait pas omis et est null
�ter le
mot de passe stock�.
Abandonner l'algorithme send()
, assigner "null" au corps
d'entit� response et r�initialiser la liste d'en-t�tes de
requ�te.
send()
et ensuite envoyer en mode synchrone un �v�nement readystatechange
sur l'objet et revenir de l'appel de la m�thode. Une version future ou une extension de cette sp�cification d�finira plus probablement une fa�on de faire des requ�tes entre sites.
setRequestHeader(en-t�te,
valeur)
Chaque requ�te dispose d'une liste d'en-t�te de requ�te avec
des valeurs associ�es. La m�thode setRequestHeader()
peut �tre utilis�e pour manipuler ces valeurs et ajouter de nouveaux
en-t�tes de requ�tes.
La m�thode setRequestHeader()
ajoute une valeur si l'en-t�te HTTP donn� comme argument fait d�j�
partie de la liste des en-t�tes de la requ�te.
Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes (� moins qu'on qu'il ne soit indiqu� de faire autrement):
Si l'�tat de l'objet n'est pas OPENED lever une
exception INVALID_STATE_ERR
et terminer ces
�tapes.
Si le drapeau send()
vaut "true" lever une exception INVALID_STATE_ERR
et terminer ces �tapes.
Si l'argument en-t�te ne
correspond pas � la production field-name
comme d�fini par la section 4.2 de RFC 2616 ou s'il
est null
lever une exception SYNTAX_ERR
et terminer ces �tapes. [RFC2616]
Si l'argument valeur est null
terminer ces �tapes. (Ne pas lever d'exception.)
Si l'argument valeur ne
correspond pas � la production field-value
comme d�fini par la section 4.2 de RFC 2616 lever
une exception SYNTAX_ERR
et terminer ces
�tapes. [RFC2616]
Pour des raisons de s�curit� ces �tapes devraient se terminer si l'argument en-t�te correspond sans �gard � la casse � un des en-t�tes suivants:
Accept-Charset
Accept-Encoding
Connection
Content-Length
Content-Transfer-Encoding
Date
Expect
Host
Keep-Alive
Referer
TE
Trailer
Transfer-Encoding
Upgrade
Via
Proxy-
ou Sec-
.Voir aussi la m�thode send()
concernant la
prise en charge par les agents des en-t�tes pour la mise en cache,
l'authentification, les proxies, et cookies.
// Le script suivant:
var client = new XMLHttpRequest();
client.open('GET', 'demo.cgi');
client.setRequestHeader('X-Test', 'un');
client.setRequestHeader('X-Test', 'deux');
client.send();
// ...devrait avoir pour r�sultat que l'en-t�te suivant soit envoy�:
...
X-Test: un, deux
...
send(donn�es)
La m�thode send()
lance la requ�te et son argument optionnel fournit le corps d'entit�.
Les auteurs sont encourag�s � s'assurer
qu'ils ont sp�cifi� l'en-t�te Content-Type
par setRequestHeader()
avant d'invoquer send()
avec un argument de donn�es non-null
.
Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes (�
moins qu'il ne soit indiqu� de faire autrement). Noter que cet
algorithme pourrait �tre interrompu si les m�thodes open()
ou abort()
sont
invoqu�es. Quand l'algorithme send()
est interrompu l'agent utilisateur doit
terminer l'algorithme apr�s avoir accompli l'�tape en cours.
L'algorithme qui suit ne peut pas �tre
interrompu par un script quand async est false
.
Il peut seulement l'�tre quand il est true
et
seulement apr�s le retour de l'appel de la m�thode.
Si l'�tat de l'objet n'est pas OPENED lever une
exception INVALID_STATE_ERR
et terminer ces
�tapes.
Si le drapeau send()
vaut "true" lever une exception INVALID_STATE_ERR
et terminer ces �tapes.
Si async est true
assigner "true" au drapeau send()
.
Si la m�thode enregistr�e est GET
agir comme si l'agument donn�es �tait null
.
Si l'argument donn�es n'a pas
�t� omis et n'est pas null
l'utiliser pour le
corps d'entit�
comme d�fini par la section 7.2 de RFC 2616 en observant les r�gles
suivantes: [RFC2616]
DOMString
Encoder la donn�e en utilisant UTF-8 pour la transmission.
Si un en-t�te Content-Type
est assign� par l'utilisation de setRequestHeader()
assigner le param�tre charset
de cet en-t�te
� UTF-8
.
Document
S�rialiser la donn�e dans
un document XML bien form� avec un espace de nom et encod� en utilisant
l'encodage donn� par data.
inputEncoding
,
quand non null
, ou UTF-8 sinon. Ou, si cela
�choue parce que le Document
ne peut pas �tre
s�rialis�, faire comme si la donn�e �tait null
.
S'il aucun en-t�te Content-Type
n'a �t� assign� par l'utilisation de setRequestHeader()
ajouter un en-t�te Content-Type
� la liste
des en-t�tes de requ�te avec une valeur application/xml;charset=charset
o� charset est l'encodage utilis� pour le
document.
Les modifications subs�quentes
dans le Document
n'ont pas d'effet sur ce qui
a �t� soumis.
DOMString
ni un Document
Utiliser les m�canismes de transformation en cha�ne
de caract�re du langage h�te sur la donn�e et
traiter les r�sultats comme si la donn�e �tait
une DOMString
. Ou, si cela �choue, faire
comme si donn�e est null
.
Si l'argument donn�e a �t� omis ou s'il est null
,
aucun corps d'entit� ne sera utilis� dans la requ�te.
Faire une requ�te � l'url stock�e, en utilisant la m�thodes HTTP m�thode stock�e, l'utilisateur utilisateur stock� (s'il en est) et le mot de passe mot de passe stock� (s'il est fourni), en prenant en compte le corps de l'entit�, la liste des en-t�tes de requ�te et les r�gles list�es directement apr�s cette suite d'�tapes.
Envoyer de fa�on synchrone un �v�nement readystatechange
sur l'objet.
L'�tat de l'objet ne change pas. L'�v�nement est envoy� pour des raisons historiques.
Si async est true
revenir de l'appel de la m�thode send()
.
(Pour autant ne pas terminer les �tapes de l'algorithme.)
Lors du t�l�chargement des ressources, les r�gles suivantes doivent �tre observ�es:
Si la redirection ne viole pas la s�curit� (en l'occurence est de m�me origine) ou les pr�cautions contre les boucles infinies et que le sch�ma soit support� de fa�on transparente, suivre le lien et revenir au d�but de cette �tape (�tape 8).
HTTP impose des pr�-requis � l'agent utilisateur concernant la pr�servation de la m�thode de requ�te et le corps d'entit� lors des redirections, et requiert aussi que les utilisateurs soient avertis de certaines sortes de redirections automatiques.
Sinon suivre la s�rie d'�tapes suivante:
Assigner le corps d'entit� response � "null", le drapeau error � "true" et r�initialiser la liste des en-t�tes de requ�te.
De fa�on synchrone basculer l'�tat sur DONE.
Si async est mis sur false
lever une exception NETWORK_ERR
et terminer l'algorithme global.
De fa�on synchrone envoyer un �v�nement readystatechange
� l'objet.
Terminer l'algorithme global.
Il y a des chances qu'une future
version de l'objet XMLHttpRequest
envoie un �v�nement error
ici aussi.
Lancer la s�rie d'�tapes qui suit:
Mettre le corps d'entit� response � "null", le drapeau error �"true" et r�initialiser le liste des en-t�tes de requ�te.
De fa�on synchrone basculer l'�tat sur DONE.
Si async est mis sur false
lever une exception ABORT_ERR
et terminer l'algorithme global.
De fa�on synchrone envoyer un �v�nement readystatechange
� l'objet.
Terminer l'algorithme global.
Il y a des chances qu'une future
version de l'objet XMLHttpRequest
envoie un �v�nement abort
ici aussi.
En cas d'erreurs de DNS ou autre type d'erreur r�seau, ex�cuter la liste d'�tapes suivantes. Cela n'inclut pas les r�ponses HTTP qui indiquent une erreur de type quelconque tel que le code d'�tat HTTP 410.
Mettre le corps d'entit� response � "null", le drapeau error �"true" et r�initialiser la liste des en-t�tes de requ�te.
De fa�on synchrone basculer l'�tat sur DONE.
Si async est mis sur false
lever une exception NETWORK_ERR
et terminer l'algorithme global.
De fa�on synchrone envoyer un �v�nement readystatechange
� l'objet.
Terminer l'algorithme global.
Il y a des chances qu'une future
version de l'objet XMLHttpRequest
envoie un �v�nement error
ici aussi.
Si tous les en-t�tes HTTP on �t� re�us, avant de recevoir le corps du message (s'il en est), suivre les �tapes suivants:
De fa�on synchrone basculer l'�tat sur HEADERS_RECEIVED.
De fa�on synchrone envoyer un �v�nement readystatechange
� l'objet.
De fa�on synchrone basculer l'�tat sur LOADING.
De fa�on synchrone envoyer un �v�nement readystatechange
� l'objet.
Finalement une fois la ressource enti�rement t�l�charg�e, aller � l'�tape suivante.
Lorsque la requ�te a compl�tement termin� le chargement
avec succ�s, de fa�on synchrone basculer l'�tat sur DONE et ensuite de fa�on
synchrone envoyer un �v�nement readystatechange
� l'objet et revenir de l'appel de m�thode au cas o� async
serait false
.
Si l'agent utilisateur permet � l'utilisateur la
sp�cification d'un proxy, il devrait
modifier la requ�te de fa�on appropri�e; i.e., se connecter au
proxy au lieu du serveur originel, modifier Request-Line
et envoyer les en-t�tes Proxy-Authorization
comme sp�cifi�.
Si l'agent utilisateur reconna�t l'Authentification HTTP�
il devrait consid�rer les
requ�tes venant de cet objet comme faisant partie de l'espace de
protection qui inclut les URIs acc�d�s et envoyer des en-t�tes d'Authorisation
et prendre en charge les requ�tes 401 Unauthorised
de fa�on appropri�e. Si l'authentification �choue, les agents
utilisateurs devraient rester
en attente des r�f�rences des utilisateurs. [RFC2617]
Si l'agent utilisateur supporte HTTP State Management
(la Gestion de l'Etat HTTP)
il devrait persister, mettre de
cot� et envoyer des cookies (tels que re�us dans les en-t�tes de
r�ponse Set-Cookie
et Set-Cookie2
,
et envoy�s dans l'en-t�te Cookie
) selon la
fa�on dont cela est applicable. [RFC2965]
Si l'agent utilisateur impl�mente une ant�m�moire HTTP�
il�devrait
respecter les en-t�tes de requ�te Cache-Control
assign�es par l'auteur (si
Cache-Control: no-cache
outrepasse
l'ant�m�moire). Il ne doit pas
envoyer les en-t�tes de requ�te Cache-Control
ou Pragma
automatiquement � moins que
l'utilisateur ne requiert explicitement un tel comportement (donc par
un rechargement forc� de la page). Les r�ponses 304 Not
Modified
qui sont le r�sultat des requ�tes conditionnelles
g�n�r�es par l'agent utilisateur doivent
�tre pr�sent�es comme r�ponse 200 OK
avec le
contenu appropri�. L'agent utilisateur doit
permettre aux scripts de surcharger la validation automatique
d'ant�m�moire en assignant des en-t�tes de requ�te (e.g., If-None-Match
,
If-Modified-Since
), auquel cas on doit
passer outre les r�ponses 304 Not Modified
. [RFC2616]
Si l'agent utilisateur impl�mente une n�gociation du
contenu dirig�e par le serveur il devrait
assigner les en-t�tes�
Accept-Encoding
et Accept-Charset
de fa�on appropri�e; il ne doit pas assigner l'en-t�te Accept
automatiquement. Si l'en-t�te Accept-Language
n'est pas assign� par l'utilisation de setRequestHeader()
les agents utilisateurs doivent
avoir les�encodages du contenu d�cod�s automatiquement. [RFC2616]
abort()
Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes (� moins qu'il ne soit indiqu� de faire autrement):
Interrompre l'algorithme send()
,
mettre le corps d'entit�
de response � "null", mettre le drapeau
error sur "true" et supprimer tous
en-t�tes de requ�te non enregistr�s.
L'agent utilisateur�devrait abandonner tout activit� du r�seau dont est responsable l'objet.
Si l'�tat est UNSENT, OPENED et que le drapeau send()
est "false", ou DONE
aller � l'�tape suivante.
Sinon, basculer sur l'�tat DONE, mettre le drapeau send()
sur "false"et de fa�on synchrone envoyer un �v�nement readystatechange
� l'objet.
Basculer l'�tat sur UNSENT. (Ne pas
envoyer l'�v�nement readystatechange
)
Il y a des chances qu'une
future version de l'objet XMLHttpRequest
envoie un �v�nement abort
ici aussi.
getAllResponseHeaders()
Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes:
Si l'�tat est UNSENT ou OPENED
lever une exception INVALID_STATE_ERR
et
terminer ces �tapes.
Si le drapeau
error vaut "true" retourner null
et
terminer ces �tapes.
Retourner tous les en-t�tes HTTP, en tant que simple cha�ne de caract�res, avec chaque ligne d'en-t�te s�par�e par une paire U+000D CR U+000A LF sauf la ligne d'�tat.
// Le script suivant:
var client = new XMLHttpRequest();
client.open("GET", "test.txt", true);
client.send();
client.onreadystatechange = function() {
if(this.readyState == 3) {
print(this.getAllResponseHeaders());
}
}
// ...devrait afficher un texte similaire � ce qui suit:
Date: Sun, 24 Oct 2004 04:58:38 GMT
Server: Apache/1.3.31 (Unix)
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/plain; charset=utf-8
getResponseHeader(en-t�te)
Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes:
Si l'�tat n'est UNSENT ou OPENED
lever une exception INVALID_STATE_ERR
et
terminer ces �tapes.
Si l'argument header ne
correspond pas � la production field-name
,
retourner�null
et terminer ces �tapes.
Si le drapeau
error vaut "true" retourner null
et
terminer ces �tapes.
Si l'argument en-t�te correspond sans �gard � la casse de multiples en-t�tes HTTP pour la derni�re requ�te envoy�e, retourner les valeurs de ces en-t�tes concat�n�s dans une simple cha�ne de caract�res s�par�s entre eux par une VIRGULE U+002C suivie par un ESPACE U+0020 et terminer ces �tapes
Si l'argument en-t�te correspond sans �gard � la casse � un simple en-t�te HTTP pour la derni�re requ�te envoy�e, retourner la valeur de cet en-t�te et terminer ces �tapes.
Retourner null
.
// Le script suivant:
var client = new XMLHttpRequest();
client.open("GET", "test.txt", true);
client.send();
client.onreadystatechange = function() {
if(this.readyState == 3) {
print(client.getResponseHeader("Content-Type"));
}
}
// ...devrait afficher quelque chose d'�quivalent au texte suivant:
Content-Type: text/plain; charset=utf-8
responseText
de type DOMString
, lecture seule.Quand il est obtenu, l'agent utilisateur doit accomplir les �tapes suivantes:
Si l'�tat n'est pas LOADING ni DONE retourner une cha�ne vide et terminer ces �tapes.
Retourner le corps d'entit� response texte.
responseXML
de type Document
, lecture seuleQuand il est obtenu, l'agent utilisateur doit accomplir les �tapes suivantes:
Si l'�tat n'est pas DONE�retourner null
et terminer ces �tapes.
Retourner le corps d'entit� response XML.
status
de type unsigned short
lecture seule Quand il est obtenu, s'il est disponible, il doit retourner le code d'�tat HTTP
envoy� par le serveur (normalement 200
pour
une requ�te r�ussie). Sinon, s'il n'est pas disponible, l'agent
utilisateur doit lever une exception INVALID_STATE_ERR
.
statusText
de type DOMString
, lecture seuleQuand il est obtenu, s'il est disponible, il doit retourner le texte de l'�tat
envoy� par le serveur (il appara�t apr�s le code d'erreur). Sinon, s'il
n'est pas disponible, l'agent utilisateur doit lever une exception INVALID_STATE_ERR
.
XMLHttpRequest
Ces sections d�crivent les diff�rents �v�nements qui peuvent
�tre affect�s � l'objet impl�mentant l'interface XMLHttpRequest
.
Dans cette version de la sp�cification, un seul �v�nement est d�fini.
readystatechange
readystatechange
(comme indiqu� plus
haut) il�ne doit pas
�tre pris en charge par les noeuds parents dans l'arborescence DOM, ne doit pas �tre annulable et doit impl�menter l'interface Event
.
Son attribut namespaceURI
doit �tre null
.
[DOM2Events].
XMLHttpRequest
ExceptionCode
et utilisent
l'objet DOMException
qui est d�fini dans DOM
Level 3 Core. En outre cette sp�cification �tend le groupe ExceptionCode
avec plusieurs nouvelles constantes comme indiqu� ci-dessous. [DOM3Core]
const unsigned short SECURITY_ERR = 18;
const unsigned short NETWORK_ERR = 101;
const unsigned short ABORT_ERR = 102;
L'exception SECURITY_ERR
est lev�e si une tentative est
faite de r�aliser une op�ration ou d'acc�der � des donn�es d'une fa�on
qui pourrait cr�er un risque de s�curit� ou une violation de la police
de s�curit� de l'agent utilisateur.
On s'attend � ce que l'exception SECURITY_ERR
soit �ventuellement
int�gr�e dans une mise � jour de la sp�cification DOM Level 3 Core avec
une d�finition �quivalente et une valeur de constante identique.
Jusqu'� ce que ce soit le cas elle est d�finie ici pour guider les
impl�menteurs. (C'est aussi la raison pour laquelle elle a une valeur
diff�rente des autres exceptions.)
L'exception NETWORK_ERR
est lev�e quand une erreur de r�seau survient dans les requ�tes
synchrones.
L'exception ABORT_ERR
est lev�e quand l'utilisateur annule une requ�te dans les requ�tes
synchrones.
Cette sp�cification n'inclut par les fonctionnalit�s suivantes qui sont envisag�es pour une version future de cette sp�cification.
load
et attribut onload
;error
et attribut onerror
;progress
et attribut onprogress
;abort
et attribut onabort
; ontimeout
;responseXML
pour les documents text/html
;
XMLHttpRequest
entre sites
diff�rents.responseBody
pour traiter les
flux
d'octets; overrideMimeType
pour corriger
les
types MIME; getRequestHeader
etremoveRequestHeader
. Cette section n'est pas normative.
L'�diteur aimerait remercier� Ahmed Kamel,� Alex Hopmann, Alex Vincent, Alexey Proskuryakov, Asb�rn Ulsberg, Boris Zbarsky, Bj�rn H�hrmann, Cameron McCormack, Christophe Jolif, Charles McCathieNevile, Dan Winship, David H�s�ther, Dean Jackson, Denis Sureau, Doug Schepers,Douglas Livingstone, Elliotte Harold, Eric Lawrence, Gideon Cohn, Gorm Haug Eriksen, Hallvord R. M. Steen, H�kon Wium Lie, Ian Davis, Ian Hickson, Ivan Herman, Jeff Walden, Jens Lindstr�m, Jim Deegan, Jim Ley, Joe Farro, Jonas Sicking, Julian Reschke, Karl Dubost, Maciej Stachowiak, Magnus Kristiansen, Marc Hadley, Marcos Caceres, Mark Baker, Mark Nottingham, Mohamed Zergaoui, Pawel Glowacki, Robin Berjon, Ruud Steltenpool, Simon Pieters, Stewart Brodie, Sunava Dutta and Zhenbin Xu pour leur contributions � cette sp�cifiaction.
Merci particuli�rement aussi aux employ�s de Microsoft qui
les
premiers ont impl�ment� l'interface XMLHttpRequest
,
qui tout d'abord a �t� largement diffus�e par le navigateur Internet
Explorer de Windows.
Merci sp�cialement aussi au WHATWG pour l'esquisse de la premi�re
version de cette sp�cification dans leur document Web Applications 1.0
(renomm� maintenant HTML�5). [HTML5] .
Merci aussi � tous ceux qui ont aid� � am�liorer cette sp�cification en envoyant des suggestions et des corrections. (S'il vous pla�t, continuez � nous emb�ter avec vos probl�mes!)