W3C

L'objet XMLHttpRequest

Traduction fran�aise du document de travail du 15 Avril 2008.

Auteur: Denis Sureau - Xul.fr

Derni�re Version:
https://www.xul.fr/XMLHttpRequest en fran�ais ou https://www.w3.org/TR/XMLHttpRequest/ original en anglais
Pr�c�dentes Versions:
XMLHttpRequest du 26 Octobre 2007 ou en anglais https://www.w3.org/TR/2007/WD-XMLHttpRequest-20071026/
XMLHttpRequest du 18 Juin 2007 ou en anglais https://www.w3.org/TR/2007/WD-XMLHttpRequest-20070618/
XMLHttpRequest du 27 F�vrier 2007 ou en anglais https://www.w3.org/TR/2007/WD-XMLHttpRequest-20070227/
XMLHttpRequest du 27 Septembre 2006 ou en anglais https://www.w3.org/TR/2006/WD-XMLHttpRequest-20060927/
XMLHttpRequest du 19 Juin 2006 ou en anglais https://www.w3.org/TR/2006/WD-XMLHttpRequest-20060619/
https://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/
Editeur:
Anne van Kesteren (Opera Software ASA) <[email protected]>

R�sum�

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.

Statut de ce Document

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.

Table des mati�res

1. Introduction

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();
}

2. Conformit�

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:

Agent utilisateur conforme

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.

Agent utilisateur XML conforme

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]

2.1 D�pendances

Cette sp�cification d�pend de plusieurs autres sp�cifications sous-jacentes.

DOM

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]

HTML�5

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.

HTTP

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:

Les autres pr�-requis concernant HTTP sont donn�s dans la sp�cification. [RFC2616]

2.2. Terminologie

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]

2.3. Extensibilit�

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].

3. Consid�rations sur la s�curit�

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.

4. L'Objet 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:

  1. Si le corps d'entit� response est "null" retourner null et terminer ces �tapes.

  2. Faire que le charset soit "null".

  3. 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�.

  4. 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]

  5. 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.

  6. 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
  7. Si charset est "null" faire que charset soit UTF-8.

  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.

  9. 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:

  1. Si le corps d'entit� response est "null" terminer ces �tapes et retourner null.

  2. 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.)

  3. 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]

  4. 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�.

  5. 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 seule

Lorsqu'on l'obtient l'attribut doit retourner la valeur de la constante correspondant � l'�tat actuel de l'objet.

La m�thode 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):

  1. Faire que la m�thode stock�e soit l'argurment method.

  2. 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]

  3. 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..

  4. Si la m�thode stock�e est CONNECT, TRACE, ou TRACK, l'agent utilisateur devrait lever une exception SECURITY_ERR et terminer ces �tapes.

  5. �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.

  6. 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.

  7. Si l'url stock�e contient un sch�ma non reconnu lever une exception NOT_SUPPORTED_ERR et terminer ces �tapes.

  8. 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]

  9. 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.

  10. Si l'url stock�e contient juste le format "user" faire que l'utilisateur stock� soit la partie utilisateur.

  11. 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.

  12. Assigner � async la valeur de l'argument async ou true s'il �tait omis.

  13. 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.

  14. 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.

  15. Si l'argument utilisateur n'�tait pas omis et qu'il soit null, �ter l'utilisateur stock�.

  16. 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.

  17. 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.

  18. Si l'argument mot de passe n'�tait pas omis et est null �ter le mot de passe stock�.

  19. Abandonner l'algorithme send() , assigner "null" au corps d'entit� response et r�initialiser la liste d'en-t�tes de requ�te.

  20. L'agent utilisateur devrait abandonner toute activit� sur le r�seau dont l'objet soit responsable.
  21. Basculer l'objet sur l'�tat OPEN, assigner "false" au drapeau 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.

La m�thode 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):

  1. Si l'�tat de l'objet n'est pas OPENED lever une exception INVALID_STATE_ERR et terminer ces �tapes.

  2. Si le drapeau send() vaut "true" lever une exception INVALID_STATE_ERR et terminer ces �tapes.

  3. 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]

  4. Si l'argument valeur est null terminer ces �tapes. (Ne pas lever d'exception.)

  5. 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]

  6. 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
  7. En outre pour des raisons de s�curit�, ces �tapes devraient �tre termin�es si les six premiers caract�res de l'argument en-t�te correspond sans sensibilit� � la casse � Proxy- ou Sec-.
  8. Si l'argument header n'est pas dans la liste des en-t�tes de requ�te, ajouter l'en-t�te avec ses valeurs associ�es � la liste et terminer ces �tapes.
  9. Si l'argument en-t�te est dans la liste des en-t�tes de requ�te, soit utiliser de multiples en-t�tes, combiner les valeurs ou utiliser une combinaison de ceux-ci (section 4.2, RFC 2616). [RFC2616]

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
...
La m�thode 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.

  1. Si l'�tat de l'objet n'est pas OPENED lever une exception INVALID_STATE_ERR et terminer ces �tapes.

  2. Si le drapeau send() vaut "true" lever une exception INVALID_STATE_ERR et terminer ces �tapes.

  3. Si async est true assigner "true" au drapeau send().

  4. 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]

    la donn�e est une 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.

    la donn�e est un 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.

    la donn�e n'est ni une 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.

  5. 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.

  6. 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.

  7. Si async est true revenir de l'appel de la m�thode send(). (Pour autant ne pas terminer les �tapes de l'algorithme.)

  8. Lors du t�l�chargement des ressources, les r�gles suivantes doivent �tre observ�es:

    Si la r�ponse est une redirection HTTP

    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:

    1. Assigner le corps d'entit� response � "null", le drapeau error � "true" et r�initialiser la liste des en-t�tes de requ�te.

    2. De fa�on synchrone basculer l'�tat sur DONE.

    3. Si async est mis sur false lever une exception NETWORK_ERR et terminer l'algorithme global.

    4. De fa�on synchrone envoyer un �v�nement readystatechange � l'objet.

    5. 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 l'utilisateur annule le t�l�chargement

    Lancer la s�rie d'�tapes qui suit:

    1. Mettre le corps d'entit� response � "null", le drapeau error �"true" et r�initialiser le liste des en-t�tes de requ�te.

    2. De fa�on synchrone basculer l'�tat sur DONE.

    3. Si async est mis sur false lever une exception ABORT_ERR et terminer l'algorithme global.

    4. De fa�on synchrone envoyer un �v�nement readystatechange � l'objet.

    5. 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 r�seau

    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.

    1. Mettre le corps d'entit� response � "null", le drapeau error �"true" et r�initialiser la liste des en-t�tes de requ�te.

    2. De fa�on synchrone basculer l'�tat sur DONE.

    3. Si async est mis sur false lever une exception NETWORK_ERR et terminer l'algorithme global.

    4. De fa�on synchrone envoyer un �v�nement readystatechange � l'objet.

    5. Terminer l'algorithme global.

    Il y a des chances qu'une future version de l'objet XMLHttpRequest envoie un �v�nement error ici aussi.

    Une fois que tous les en-t�tes HTTP ont �t� re�us

    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:

    1. De fa�on synchrone basculer l'�tat sur HEADERS_RECEIVED.

    2. De fa�on synchrone envoyer un �v�nement readystatechange � l'objet.

    Une fois le premier octet (ou plus) du corps d'entit� response re�u
    S'il n'y a pas de corps d'entit� response
    1. De fa�on synchrone basculer l'�tat sur LOADING.

    2. 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.

  9. 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]

La m�thode abort()

Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes (� moins qu'il ne soit indiqu� de faire autrement):

  1. 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.

  2. L'agent utilisateur�devrait abandonner tout activit� du r�seau dont est responsable l'objet.

  3. 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.

  4. 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.

La m�thode getAllResponseHeaders()

Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes:

  1. Si l'�tat est UNSENT ou OPENED lever une exception INVALID_STATE_ERR et terminer ces �tapes.

  2. Si le drapeau error vaut "true" retourner null et terminer ces �tapes.

  3. 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
La m�thode getResponseHeader(en-t�te)

Lorsqu'elle est invoqu�e, l'agent utilisateur doit suivre les �tapes suivantes:

  1. Si l'�tat n'est UNSENT ou OPENED lever une exception INVALID_STATE_ERR et terminer ces �tapes.

  2. Si l'argument header ne correspond pas � la production field-name, retourner�null et terminer ces �tapes.

  3. Si le drapeau error vaut "true" retourner null et terminer ces �tapes.

  4. 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

  5. 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.

  6. 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:

  1. Si l'�tat n'est pas LOADING ni DONE retourner une cha�ne vide et terminer ces �tapes.

  2. Retourner le corps d'entit� response texte.

responseXML de type Document, lecture seule

Quand il est obtenu, l'agent utilisateur doit accomplir les �tapes suivantes:

  1. Si l'�tat n'est pas DONE�retourner null et terminer ces �tapes.

  2. 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 seule

Quand 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.

4.1. Ev�nements de l'objet 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
Quand l'agent utilisateur envoie un �v�nement 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].

4.2. Exceptions pour l'objet XMLHttpRequest

Plusieurs algorithmes dans cette sp�cification peuvent avoir pour r�sultat qu'une exception soit envoy�e. Ces exceptions font toutes partie du groupe 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.

Hors sp�cification

Cette section n'est pas normative.

Cette sp�cification n'inclut par les fonctionnalit�s suivantes qui sont envisag�es pour une version future de cette sp�cification.

R�f�rences

[DOM2Events]
Document Object Model (DOM) Level 2 Events Specification, T. Pixley, editor. W3C, November 2000.
[DOM3Core]
Document Object Model (DOM) Level 3 Core Specification, A. Le Hors, P. Le H�garet, L. Wood, G. Nicol, J. Robie, M. Champion, S. Byrne, editors. World Wide Web Consortium, April 2004.
[ECMAScript]
ECMAScript Language Specification, Third Edition. ECMA, December 1999.
[HTML5]
HTML�5 (travail en cours), I. Hickson, D. Hyatt, editors. W3C, 2008.
HTML�5 (travail en cours), I. Hickson, editor. WHATWG, 2008.
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels, S. Bradner. IETF, March 1997.
[RFC2616]
Hypertext Transfer Protocol -- HTTP/1.1, R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee, editors. IETF, June 1999
[RFC2617]
HTTP Authentication: Basic and Digest Access Authentication, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. Leach, A. Luotonen, L. Stewart, editors. IETF, June 1999.
[RFC2965]
HTTP State Management Mechanism, D. Kristol, L. Montulli, editors. IETF, October 2000.
[RFC3986]
Uniform Resource Identifier (URI): Generic Syntax, T. Berners-Lee, R. Fielding, L. Masinter, editors. IETF, January 2005.
[RFC3987]
Internationalized Resource Identifiers (IRIs), M. Duerst, M. Suignard, editors. IETF, January 2005.
[XML]
Extensible Markup Language (XML) 1.0 (Fourth Edition), T. Bray, J. Paoli, C. Sperberg-McQueen, E. Maler, F. Yergeau. W3C, September 2006.
[XMLNS]
Namespaces in XML (Second Edition), T. Bray, D. Hollander, A. Layman, R. Tobin. W3C, August 2006.
�

Remerciements

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!)