Annotation of 2006/webapi/XMLHttpRequest/Overview.src.html, revision 1.169

1.60      avankest    1: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
1.1       avankest    2: <html lang="en-US">
                      3:  <head>
                      4:   <title>The XMLHttpRequest Object</title>
1.16      avankest    5:   <style type="text/css">
1.117     avankest    6:    pre.idl { border:solid thin; background:#eee; color:#000; padding:0.5em }
1.16      avankest    7:    pre.idl :link, pre.idl :visited { color:inherit; background:transparent }
1.58      avankest    8:    pre code { color:inherit; background:transparent }
1.16      avankest    9:    div.example { margin-left:1em; padding-left:1em; border-left:double; color:#222; background:#fcfcfc }
1.89      avankest   10:    .note { margin-left:2em; font-weight:bold; font-style:italic; color:#008000 }
1.16      avankest   11:    p.note::before { content:"Note: " }
1.89      avankest   12:    .issue { padding:.5em; border:solid #f00 }
1.16      avankest   13:    p.issue::before { content:"Issue: " }
1.119     avankest   14:    dl.switch { padding-left:2em }
                     15:    dl.switch dt { text-indent:-1.5em }
                     16:    dl.switch dt:before { content:'\21AA'; padding:0 0.5em 0 0; display:inline-block; width:1em; text-align:right; line-height:0.5em }
1.16      avankest   17:    em.ct { text-transform:lowercase; font-variant:small-caps; font-style:normal }
                     18:    dfn { font-weight:bold; font-style:normal }
                     19:    code { color:orangered }
                     20:    code :link, code :visited { color:inherit }
1.122     avankest   21:    h1 code, h2 code, h3 code { color:inherit; background:inherit; font:inherit }
1.16      avankest   22:   </style>
1.147     avankest   23:   <link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/W3C-[STATUS]">
1.1       avankest   24:  </head>
                     25:  <body>
                     26:   <div class="head">
                     27:    <p><a href="http://www.w3.org/"><img height="48" width="72" alt="W3C" src="http://www.w3.org/Icons/w3c_home"></a></p>
1.12      avankest   28: 
1.156     avankest   29:    <h1 class="head" id="the-xmlhttprequest-object">The
                     30:    <code title="">XMLHttpRequest</code> Object</h1>
1.12      avankest   31: 
1.149     avankest   32:    <h2 class="no-num no-toc" id="w3c-doctype">[LONGSTATUS] [DATE: 3 August 2002]</h2>
1.12      avankest   33: 
1.1       avankest   34:    <dl>
1.10      avankest   35:     <dt>This Version:</dt>
1.153     avankest   36:     <dd><a href="http://dev.w3.org/2006/webapi/XMLHttpRequest/">http://dev.w3.org/2006/webapi/XMLHttpRequest/</a></dd>
                     37:     <!--<dd><a href="[VERSION]/">http://www.w3.org/TR/[YEAR]/WD-XMLHttpRequest-[CDATE]/</a></dd>-->
1.14      avankest   38: 
1.10      avankest   39:     <dt>Latest Version:</dt>
1.1       avankest   40:     <dd><a href="http://www.w3.org/TR/XMLHttpRequest/">http://www.w3.org/TR/XMLHttpRequest/</a></dd>
1.14      avankest   41: 
1.10      avankest   42:     <dt>Previous Versions:</dt>
1.154     avankest   43:     <dd><a href="http://www.w3.org/TR/2007/WD-XMLHttpRequest-20071026/">http://www.w3.org/TR/2007/WD-XMLHttpRequest-20071026/</a></dd>
1.133     avankest   44:     <dd><a href="http://www.w3.org/TR/2007/WD-XMLHttpRequest-20070618/">http://www.w3.org/TR/2007/WD-XMLHttpRequest-20070618/</a></dd>
1.58      avankest   45:     <dd><a href="http://www.w3.org/TR/2007/WD-XMLHttpRequest-20070227/">http://www.w3.org/TR/2007/WD-XMLHttpRequest-20070227/</a></dd>
1.22      avankest   46:     <dd><a href="http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060927/">http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060927/</a></dd>
1.1       avankest   47:     <dd><a href="http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060619/">http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060619/</a></dd>
                     48:     <dd><a href="http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/">http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/</a></dd>
1.14      avankest   49: 
1.1       avankest   50:     <dt>Editor:</dt>
                     51:     <dd><a href="http://annevankesteren.nl/">Anne van Kesteren</a>
                     52:      (<a href="http://www.opera.com/">Opera Software ASA</a>)
                     53:      &lt;<a href="mailto:annevk@opera.com">annevk@opera.com</a>&gt;</dd>
                     54:    </dl>
1.14      avankest   55: 
1.1       avankest   56:    <p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a>
1.51      avankest   57:    &copy; 2007
                     58:    <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>&reg;</sup>
                     59:    (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>,
                     60:    <a href="http://www.ercim.org/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>,
                     61:    <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
                     62:    <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
                     63:    <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>
                     64:    and
                     65:    <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document
                     66:    use</a> rules apply.</p>
1.1       avankest   67:   </div>
1.12      avankest   68: 
1.1       avankest   69:   <hr>
1.12      avankest   70: 
1.1       avankest   71:   <h2 class="no-num no-toc" id="specabstract">Abstract</h2>
1.10      avankest   72: 
1.22      avankest   73:   <p>The <code title="">XMLHttpRequest</code> Object specification defines an
                     74:   <abbr title="Application Programming Interface">API</abbr> that provides
                     75:   scripted client functionality for transferring data between a client and a
                     76:   server.</p>
1.12      avankest   77: 
1.1       avankest   78:   <h2 class="no-num no-toc" id="sotd">Status of this Document</h2>
1.12      avankest   79: 
1.1       avankest   80:   <p><em>This section describes the status of this document at the time of its
1.36      avankest   81:   publication. Other documents may supersede this document. A list of current
                     82:   W3C publications and the latest revision of this technical report can be
                     83:   found in the <a href="http://www.w3.org/TR/">W3C technical reports index</a>
1.117     avankest   84:   at http://www.w3.org/TR/.</em></p>
1.36      avankest   85: 
1.63      avankest   86:   <!-- change back to Last Call -->
1.147     avankest   87:   <p>This is the [DATE: 3 August 2002] Working Draft of The
                     88:   <code title="">XMLHttpRequest</code> Object specification. Please send
                     89:   comments to <a href="mailto:public-webapi@w3.org">public-webapi@w3.org</a>
1.47      avankest   90:   (<a href="http://lists.w3.org/Archives/Public/public-webapi/">archived</a>)
                     91:   with either <samp>[XHR]</samp> or <samp title="">[XMLHttpRequest]</samp> at
1.63      avankest   92:   the start of the subject line<!-- by 2 April 2007-->.</p>
1.51      avankest   93: 
1.47      avankest   94:   <p>This document is produced by the
                     95:   <a href="http://www.w3.org/2006/webapi/">Web API Working Group</a>, part of
                     96:   the <a href="http://www.w3.org/2006/rwc/Activity">Rich Web Clients
                     97:   Activity</a> in the W3C <a href="http://www.w3.org/Interaction/">Interaction
1.51      avankest   98:   Domain</a>. Changes made to this document can be found in the
1.47      avankest   99:   <a href="http://dev.w3.org/cvsweb/2006/webapi/XMLHttpRequest/Overview.html">W3C
1.117     avankest  100:   public CVS server</a>.</p>
1.12      avankest  101: 
1.1       avankest  102:   <p>Publication as a Working Draft does not imply endorsement by the W3C
1.36      avankest  103:   Membership. This is a draft document and may be updated, replaced or
                    104:   obsoleted by other documents at any time. It is inappropriate to cite this
                    105:   document as other than work in progress.</p>
1.12      avankest  106: 
1.1       avankest  107:   <p>This document was produced by a group operating under the
1.36      avankest  108:   <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February
1.52      avankest  109:   2004 W3C Patent Policy</a>. W3C maintains a
1.36      avankest  110:   <a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/38482/status">public
                    111:   list of any patent disclosures</a> made in connection with the deliverables
                    112:   of the group; that page also includes instructions for disclosing a patent.
                    113:   An individual who has actual knowledge of a patent which the individual
                    114:   believes contains
                    115:   <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential
                    116:   Claim(s)</a> must disclose the information in accordance with
                    117:   <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
                    118:   6 of the W3C Patent Policy</a>.</p>
1.12      avankest  119: 
1.1       avankest  120:   <h2 class="no-num no-toc" id="toc">Table of Contents</h2>
1.21      avankest  121: 
1.1       avankest  122:   <!--toc-->
1.12      avankest  123: 
1.1       avankest  124:   <h2 id="introduction">Introduction</h2>
1.12      avankest  125: 
1.1       avankest  126:   <p><em>This section is non-normative.</em></p>
1.12      avankest  127: 
1.33      avankest  128:   <p>The <code>XMLHttpRequest</code> object implements an interface exposed by
                    129:   a scripting engine that allows scripts to perform HTTP client functionality,
1.22      avankest  130:   such as submitting form data or loading data from a server.</p>
1.24      avankest  131: 
1.1       avankest  132:   <p>The name of the object is <code>XMLHttpRequest</code> for compatibility
1.127     avankest  133:   with the Web, though each component of this name is potentially misleading.
1.39      avankest  134:   First, the object supports any text based format, including XML. Second, it
                    135:   can be used to make requests over both HTTP and HTTPS (some implementations
                    136:   support protocols in addition to HTTP and HTTPS, but that functionality is
                    137:   not covered by this specification). Finally, it supports "requests" in a
                    138:   broad sense of the term as it pertains to HTTP; namely all activity involved
                    139:   with HTTP requests or responses for the defined HTTP methods.</p>
1.12      avankest  140: 
1.14      avankest  141:   <div class="example">
                    142:    <p>Some simple code to do something with data from an XML document fetched
1.22      avankest  143:    over the network:</p>
1.16      avankest  144: 
1.58      avankest  145:    <pre><code>function test(data) {
1.14      avankest  146:  // taking care of data
                    147: }
                    148: 
                    149: function handler() {
1.117     avankest  150:  if(this.readyState == 4 &amp;&amp; this.status == 200) {
1.14      avankest  151:   // so far so good
1.117     avankest  152:   if(this.responseXML != null &amp;&amp; this.responseXML.getElementById('test').firstChild.data)
                    153:      // success!
1.14      avankest  154:    test(this.responseXML.getElementById('test').firstChild.data);
                    155:   else
                    156:    test(null);
1.117     avankest  157:  } else if (this.readyState == 4 &amp;&amp; this.status != 200) {
1.14      avankest  158:   // fetched the wrong page or network error...
                    159:   test(null);
                    160:  }
                    161: }
1.12      avankest  162: 
1.14      avankest  163: var client = new XMLHttpRequest();
                    164: client.onreadystatechange = handler;
                    165: client.open("GET", "test.xml");
1.58      avankest  166: client.send();</code></pre>
1.16      avankest  167: 
1.56      avankest  168:    <p>If you just want to log a message to the server:</p>
1.16      avankest  169: 
1.58      avankest  170:    <pre><code>function log(message) {
1.14      avankest  171:  var client = new XMLHttpRequest();
1.56      avankest  172:  client.open("POST", "/log");
1.57      avankest  173:  client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
1.14      avankest  174:  client.send(message);
1.58      avankest  175: }</code></pre>
1.16      avankest  176: 
1.14      avankest  177:    <p>Or if you want to check the status of a document on the server:</p>
1.16      avankest  178: 
1.58      avankest  179:    <pre><code>function fetchStatus(address) {
1.14      avankest  180:  var client = new XMLHttpRequest();
                    181:  client.onreadystatechange = function() {
                    182:   // in case of network errors this might not give reliable results
                    183:   if(this.readyState == 4)
                    184:    returnStatus(this.status);
                    185:  }
                    186:  client.open("HEAD", address);
                    187:  client.send();
1.58      avankest  188: }</code></pre>
1.14      avankest  189:   </div>
1.12      avankest  190: 
1.153     avankest  191:   <h2 id="conformance">Conformance</h2>
1.12      avankest  192: 
1.27      avankest  193:   <p>Everything in this specification is normative except for diagrams,
                    194:   examples, notes and sections marked non-normative.</p>
1.12      avankest  195: 
1.1       avankest  196:   <p>The key words <em class="ct">must</em>, <em class="ct">must not</em>,
1.74      avankest  197:   <em class="ct">should</em> and <em class="ct">may</em> in this document are
                    198:   to be interpreted as described in RFC 2119.
                    199:   [<cite><span>RFC2119</span></cite>]</p>
1.12      avankest  200: 
1.1       avankest  201:   <p>This specification defines the following classes of products:</p>
1.12      avankest  202: 
1.1       avankest  203:   <dl>
1.74      avankest  204:    <dt><dfn id="conforming-user-agent">Conforming user agent</dfn></dt>
1.24      avankest  205: 
1.74      avankest  206:    <dd>
                    207:     <p>A user agent <em class="ct">must</em> behave as described in this
1.106     avankest  208:     specification in order to be considered conformant.</p>
1.95      avankest  209: 
1.140     avankest  210:     <p>If the user agent is not a conforming XML user agent the <span>XML
                    211:     response entity body</span> <em class="ct">must</em> (always) be
                    212:     <code>null</code>.</p>
                    213: 
                    214:     <p>User agents <em class="ct">may</em> implement algorithms given in
                    215:     this specification in any way desired, so long as the end result is
                    216:     indistinguishable from the result that would be obtained by the
                    217:     specification's algorithms.</p>
1.110     avankest  218: 
1.95      avankest  219:     <p class="note">This specification uses both the terms "conforming user
                    220:     agent(s)" and "user agent(s)" to refer to this product class.</p>
1.74      avankest  221:    </dd>
1.110     avankest  222: 
1.94      avankest  223:    <dt><dfn id="conforming-xml-user-agent">Conforming XML user agent</dfn></dt>
1.110     avankest  224: 
1.163     avankest  225:    <dd><p>An XML user agent <em class="ct">must</em> be a <span>conforming
                    226:    user agent</span> and <em class="ct">must</em> be a conforming XML
                    227:    processor that reports violations of namespace well-formedness.
                    228:    [<cite><span>XML</span></cite>]
1.140     avankest  229:    [<cite><span>XMLNS</span></cite>]</p></dd>
1.1       avankest  230:   </dl>
1.32      avankest  231: 
1.153     avankest  232:   <h3 id="dependencies">Dependencies</h3>
1.33      avankest  233: 
1.29      avankest  234:   <p>This specification relies on several underlying specifications.</p>
                    235:   <dl>
                    236:    <dt>DOM</dt>
1.33      avankest  237: 
1.155     avankest  238:    <dd><p>A <span title="conforming user agent">conforming user agent</span>
                    239:    <em class="ct">must</em> support some subset of the functionality
                    240:    defined in DOM Events and DOM Core that this specification relies upon.
                    241:    [<cite><span>DOM2Events</span></cite>]
                    242:    [<cite><span>DOM3Core</span></cite>]</p></dd>
1.29      avankest  243: 
1.161     avankest  244:    <dt>HTML&nbsp;5</dt>
                    245: 
                    246:    <dd>
                    247:     <p>This specification depends on HTML&nbsp;5 for defining the
                    248:     <code>Window</code> object and finding the character encoding of a
                    249:     <code>text/html</code> resource. A <span>conforming user agent</span>
                    250:     <em class="ct">must</em> support these features.
                    251:     [<cite><span>HTML5</span></cite>]</p>
                    252: 
                    253:     <p class="note">The
                    254:     <a href="http://www.w3.org/TR/2006/WD-Window-20060407/">Window Object
                    255:     1.0</a> draft is not referenced normatively as it appears to be no
                    256:     longer maintained and HTML&nbsp;5 defines the <code>Window</code> object
                    257:     in more detail. This specification already depends on HTML&nbsp;5 for
                    258:     other reasons so there is not much additional overhead because of
                    259:     this.</p>
                    260: 
1.29      avankest  261:    <dt>HTTP</dt>
1.33      avankest  262: 
1.29      avankest  263:    <dd>
1.155     avankest  264:     <p>A <span>conforming user agent</span>
1.126     avankest  265:     <em class="ct">must</em> support some version of the HTTP protocol. It
                    266:     <em class="ct">should</em> support any HTTP method that matches the
1.149     avankest  267:     <span><code>Method</code> production</span> and <em class="ct">must</em>
                    268:     at least support the following methods:</p>
1.58      avankest  269: 
                    270:     <ul>
                    271:      <li><code>GET</code></li>
                    272:      <li><code>POST</code></li>
                    273:      <li><code>HEAD</code></li>
                    274:      <li><code>PUT</code></li>
                    275:      <li><code>DELETE</code></li>
                    276:      <li><code>OPTIONS</code></li>
                    277:     </ul>
1.135     avankest  278: 
1.58      avankest  279:     <p>Other requirements regarding HTTP are made throughout the
1.39      avankest  280:     specification. [<cite><span>RFC2616</span></cite>]</p>
1.29      avankest  281:    </dd>
                    282:   </dl>
1.12      avankest  283: 
1.157     avankest  284: 
1.153     avankest  285:   <h3 id="terminology">Terminology</h3>
1.12      avankest  286: 
1.80      avankest  287:   <p>There is a <dfn id="case-insensitive-match">case-insensitive match</dfn>
1.153     avankest  288:   of strings <var>s1</var> and <var>s2</var> if after mapping the ASCII
                    289:   character range A-Z to the range a-z both strings are identical.</p>
1.144     avankest  290: 
1.141     avankest  291:   <p>Two URIs are <dfn id="same-origin">same-origin</dfn> if after
                    292:   performing scheme-based normalization on both URIs as described in section
1.143     avankest  293:   5.3.3 of RFC 3987 the scheme, ihost and port components are
1.153     avankest  294:   identical. If either URI does not have an ihost component the URIs
1.148     avankest  295:   <em class="ct">must not</em> be considered same-origin.
1.147     avankest  296:   [<cite><span>RFC3987</span></cite>]</p>
1.155     avankest  297:   
1.157     avankest  298:   <p>The terms <dfn id="origin">origin</dfn> and
                    299:   <dfn id="event-handler-attribute">event handler DOM attribute</dfn> are
                    300:   defined by the HTML&nbsp;5 specification.
                    301:   [<cite><span>HTML5</span></cite>]</p>
1.155     avankest  302: 
1.80      avankest  303: 
1.153     avankest  304:   <h3 id="extensibility">Extensibility</h3>
1.12      avankest  305: 
1.81      avankest  306:   <p>Extensions of the API defined by this specification are <em>strongly
1.22      avankest  307:   discouraged</em>. User agents, Working Groups and other interested parties
1.33      avankest  308:   should discuss extensions on a relevant public forum, preferably
1.22      avankest  309:   <a href="mailto:public-webapi@w3.org">public-webapi@w3.org</a>.</p>
1.12      avankest  310: 
1.153     avankest  311: 
1.157     avankest  312: 
1.153     avankest  313:   <h2 id="security">Security Considerations</h2>
                    314:   
1.154     avankest  315:   <p>Apart from requirements affecting security made throughout this
                    316:   specification implementations <em class="ct">may</em>, at their
1.158     avankest  317:   discretion, not expose certain headers, such as HttpOnly cookies.</p>
1.153     avankest  318: 
                    319: 
1.157     avankest  320: 
1.153     avankest  321:   <h2 id="xmlhttprequest">The <code title="">XMLHttpRequest</code>
                    322:   Object</h2>
1.12      avankest  323: 
1.58      avankest  324:   <p>The <code>XMLHttpRequest</code> object can be used by scripts to
1.22      avankest  325:   programmatically connect to their originating server via HTTP.</p>
1.12      avankest  326: 
1.1       avankest  327:   <p>Objects implementing the <code>XMLHttpRequest</code> interface
1.22      avankest  328:   <em class="ct">must</em> also implement the <code>EventTarget</code>
1.155     avankest  329:   interface. [<cite><span>DOM2Events</span></cite>]</p>
1.12      avankest  330: 
1.58      avankest  331:   <p>Objects implementing the <code title="">Window</code> interface
                    332:   <em class="ct">must</em> provide an <code title="">XMLHttpRequest()</code>
1.155     avankest  333:   constructor. [<cite><span>HTML5</span></cite>]</p>
1.12      avankest  334: 
1.1       avankest  335:   <div class="example">
1.58      avankest  336:    <p>In ECMAScript this can be used as follows:</p>
                    337: 
                    338:    <pre><code>var client = new XMLHttpRequest();</code></pre>
1.1       avankest  339:   </div>
1.12      avankest  340: 
1.150     avankest  341:   <p>When the <code title="">XMLHttpRequest()</code> constructor is invoked
1.157     avankest  342:   a persistent pointer to the associated <code title="">Document</code>
                    343:   object is stored on the newly created object. This is the
                    344:   <dfn title="Document pointer" id="document-pointer"><code>Document</code>
                    345:   pointer</dfn>. The associated <code>Document</code> object is the one
                    346:   returned by the <code>document</code> attribute from the object on which
                    347:   the <code title="">XMLHttpRequest()</code> constructor was invoked (a
                    348:   <code>Window</code> object). The pointer can become "null" if the
                    349:   object is destroyed.</p>
                    350:   
                    351:   <p class="note">As per the conformance criteria implementations are free
                    352:   to implement this in any way they desire as long as the end results are
                    353:   identical to those given by the English prose.</p>
1.27      avankest  354: 
1.58      avankest  355:   <div class="example">
1.157     avankest  356:    <p>If <var><code>iframe</code></var> is a <code title="">Window</code>
                    357:    object <var><code>client</code></var> will have a pointer to
                    358:    <var><code>iframe.document</code></var> in the following example:</p>
1.58      avankest  359: 
1.157     avankest  360:    <pre><code>var client = new iframe.XMLHttpRequest()</code></pre>
1.58      avankest  361:   </div>
1.12      avankest  362: 
1.58      avankest  363:   <pre class="idl">interface <dfn id="xmlhttprequest-object">XMLHttpRequest</dfn> {
                    364:   // event handler
1.70      avankest  365:            attribute EventListener <span>onreadystatechange</span>;
1.58      avankest  366: 
                    367:   // state
1.71      avankest  368:   const unsigned short <span title="UNSENT state">UNSENT</span> = 0;
1.134     avankest  369:   const unsigned short <span title="OPENED state">OPENED</span> = 1;
1.123     avankest  370:   const unsigned short <span title="HEADERS_RECEIVED state">HEADERS_RECEIVED</span> = 2;
1.86      avankest  371:   const unsigned short <span title="LOADING state">LOADING</span> = 3;
1.117     avankest  372:   const unsigned short <span title="DONE state">DONE</span> = 4;
1.70      avankest  373:   readonly attribute unsigned short <span>readyState</span>;
1.58      avankest  374: 
                    375:   // request
1.70      avankest  376:   void <span>open</span>(in DOMString <var>method</var>, in DOMString <var>url</var>);
                    377:   void <span>open</span>(in DOMString <var>method</var>, in DOMString <var>url</var>, in boolean <var>async</var>);
                    378:   void <span>open</span>(in DOMString <var>method</var>, in DOMString <var>url</var>, in boolean <var>async</var>, in DOMString <var>user</var>);
                    379:   void <span>open</span>(in DOMString <var>method</var>, in DOMString <var>url</var>, in boolean <var>async</var>, in DOMString <var>user</var>, in DOMString <var>password</var>);
                    380:   void <span>setRequestHeader</span>(in DOMString <var>header</var>, in DOMString <var>value</var>);
                    381:   void <span>send</span>();
                    382:   void <span>send</span>(in DOMString <var>data</var>);
                    383:   void <span>send</span>(in Document <var>data</var>);
                    384:   void <span>abort</span>();
1.58      avankest  385: 
                    386:   // response
1.70      avankest  387:   DOMString <span>getAllResponseHeaders</span>();
                    388:   DOMString <span>getResponseHeader</span>(in DOMString <var>header</var>);
                    389:   readonly attribute DOMString <span>responseText</span>;
                    390:   readonly attribute Document <span>responseXML</span>;
                    391:   readonly attribute unsigned short <span>status</span>;
                    392:   readonly attribute DOMString <span>statusText</span>;
1.1       avankest  393: };</pre>
1.8       avankest  394: 
1.58      avankest  395:   <p>The <code>XMLHttpRequest</code> object can be in five states:
1.71      avankest  396:   <span title="UNSENT state">UNSENT</span>,
1.134     avankest  397:   <span title="OPENED state">OPENED</span>,
1.123     avankest  398:   <span title="HEADERS_RECEIVED state">HEADERS_RECEIVED</span>,
1.86      avankest  399:   <span title="LOADING state">LOADING</span> and
1.79      avankest  400:   <span title="DONE state">DONE</span>. The current state is exposed through
                    401:   the <code>readyState</code> attribute. The method definitions below define
                    402:   when a state transition takes place.</p>
1.58      avankest  403: 
                    404:   <p>When constructed, the <code>XMLHttpRequest</code> object
1.71      avankest  405:   <em class="ct">must</em> be in the UNSENT state. This state is represented
1.134     avankest  406:   by the <dfn id="unsent-state" title="UNSENT state"><code>UNSENT</code></dfn>
1.58      avankest  407:   constant, whose value is <code>0</code>.</p>
                    408: 
1.134     avankest  409:   <p>The OPENED state is the state of the object when the <code>open()</code>
1.92      avankest  410:   method has been successfully invoked. During this state request headers can
1.58      avankest  411:   be set using <code>setRequestHeader()</code> and the request can be made
                    412:   using <code>send()</code>. This state is represented by the
1.134     avankest  413:   <dfn id="opened-state" title="OPENED state"><code>OPENED</code></dfn> constant,
1.131     avankest  414:   whose value is <code>1</code>.</p>
1.58      avankest  415: 
1.134     avankest  416:   <p>The OPENED state has an associated <dfn id="send-flag"><code>send()</code>
1.104     avankest  417:   flag</dfn> which can be either "true" or "false". The initial value of the
                    418:   <code title="">send()</code> flag is "false".</p>
1.87      avankest  419: 
1.123     avankest  420:   <p>The HEADERS_RECEIVED state is the state of the object when all response
                    421:   headers have been received. This state is represented by the
1.131     avankest  422:   <dfn id="headers-received-state" title="HEADERS_RECEIVED state"><code>HEADERS_RECEIVED</code></dfn>
1.123     avankest  423:   constant, whose value is <code>2</code>.</p>
                    424: 
                    425:   <p>The LOADING state is the state of the object when the response entity body
                    426:   is being received. This state is represented by the
1.131     avankest  427:   <dfn id="loading-state" title="LOADING state"><code>LOADING</code></dfn> constant,
1.86      avankest  428:   whose value is <code>3</code>.</p>
1.58      avankest  429: 
1.79      avankest  430:   <p>The DONE state is the state of the object when either the data transfer
1.58      avankest  431:   has been completed or something went wrong during the transfer (infinite
                    432:   redirects for instance). This state is represented by the
1.131     avankest  433:   <dfn id="done-state" title="DONE state"><code>DONE</code></dfn> constant,
                    434:   whose value is <code>4</code>.</p>
1.90      avankest  435: 
1.124     avankest  436:   <p>The DONE state has an associated <dfn id="error-flag">error flag</dfn>
                    437:   which can be either "true" or "false". The initial value of the error flag is
                    438:   "false".</p>
                    439: 
1.88      avankest  440:   <p>The <dfn id="response-entity-body">response entity body</dfn> is the
                    441:   fragment of the <span>entity body</span> received so far (LOADING state) or
                    442:   the complete entity body (DONE state). If there is no entity body the
                    443:   response entity body is "null".</p>
                    444: 
                    445:   <p>The <dfn id="text-response-entity-body">text response entity body</dfn>
1.169   ! avankest  446:   is a <code>DOMString</code> representing the <span>response entity
        !           447:   body</span>. The text response entity body is the return value of the
        !           448:   following algorithm:</p>
1.90      avankest  449: 
1.88      avankest  450:   <ol>
1.167     avankest  451:    <li><p>If the response entity body is "null" return the empty string and
1.107     avankest  452:    terminate these steps.</p>
1.90      avankest  453: 
1.113     avankest  454:    <li><p>Let <var>charset</var> be "null".</p></li>
1.90      avankest  455: 
                    456:    <li><p>If there is no <code>Content-Type</code> header or there is a
                    457:    <code>Content-Type</code> header which contains a MIME type that is
1.116     avankest  458:    <code>text/xml</code>, <code>application/xml</code> or ends in
1.167     avankest  459:    <code title="">+xml</code> (ignoring any parameters) use the rules set
                    460:    forth in the XML specifications to determine the character encoding. Let
1.116     avankest  461:    <var>charset</var> be the determined character encoding.</p></li>
1.90      avankest  462: 
1.145     avankest  463:    <li><p>If there is a <code>Content-Type</code> header which contains a
                    464:    <code>text/html</code> MIME type follow the rules set forth in the
                    465:    HTML&nbsp;5 specification to determine the character encoding. Let
                    466:    <var>charset</var> be the determined character encoding.
                    467:    [<cite><span>HTML5</span></cite>]</p></li>
1.118     avankest  468: 
1.115     avankest  469:    <li>
1.140     avankest  470:     <p>If the MIME type specified by the <code>Content-Type</code> header
                    471:     contains a <code>charset</code> parameter and <var>charset</var> is
                    472:     "null" let <var>charset</var> be the value of that parameter.</p>
1.118     avankest  473: 
1.145     avankest  474:     <p class="note">The algorithms described by the XML and HTML
                    475:     specifications already take <code>Content-Type</code> into account.</p>
1.115     avankest  476:    </li>
1.118     avankest  477: 
1.111     avankest  478:    <li>
                    479:     <!-- This stuff is copied from HTML5. Thanks Hixie! -->
1.113     avankest  480:     <p>If <var>charset</var> is "null" then, for each of the rows in the
1.127     avankest  481:     following table, starting with the first one and going down, if the first
                    482:     bytes of <var>bytes</var> match the bytes given in the first column, then
                    483:     let <var>charset</var> be the encoding given in the cell in the second
                    484:     column of that row. If there is no match <var>charset</var> remains
                    485:     "null".</p>
1.117     avankest  486: 
                    487:     <table>
                    488:      <thead>
                    489:       <tr>
1.111     avankest  490:        <th>Bytes in Hexadecimal
                    491:        <th>Description
1.117     avankest  492:      <tbody>
                    493:       <tr>
1.111     avankest  494:        <td>00 00 FE FF
1.117     avankest  495:        <td>UTF-32BE BOM
                    496:       <tr>
                    497:        <td>FF FE 00 00
                    498:        <td>UTF-32LE BOM
                    499:       <tr>
                    500:        <td>FE FF
                    501:        <td>UTF-16BE BOM
                    502:       <tr>
                    503:        <td>FF FE
                    504:        <td>UTF-16LE BOM
                    505:       <tr>
                    506:        <td>EF BB BF
                    507:        <td>UTF-8 BOM<!-- nobody uses this
                    508:       <tr>
                    509:        <td>DD 73 66 73
                    510:        <td>UTF-EBCDIC
                    511: -->
                    512:     </table>
1.111     avankest  513:    </li>
                    514: 
1.113     avankest  515:    <li><p>If <var>charset</var> is "null" let <var>charset</var> be
                    516:    UTF-8.</p></li>
                    517: 
1.107     avankest  518:    <li><p>Return the result of decoding the response entity body using
1.167     avankest  519:    <var>charset</var>. Replace bytes or sequences of bytes that are not
                    520:    valid accordng to the <var>charset</var> with a single U+FFFD
                    521:    character.</p></li>
1.88      avankest  522:   </ol>
1.90      avankest  523: 
1.163     avankest  524:   <p class="note">Authors are encouraged to simply encode their resources
                    525:   using UTF-8.</p>
                    526: 
1.88      avankest  527:   <p>The <dfn id="xml-response-entity-body">XML response entity body</dfn> is
1.107     avankest  528:   either a <code>Document</code> representing the <span>response entity
1.126     avankest  529:   body</span> or <code>null</code>. The XML response entity body is the return
                    530:   value of the following algorithm:</p>
1.90      avankest  531: 
1.88      avankest  532:   <ol>
1.107     avankest  533:    <li><p>If the response entity body is "null" terminate these steps and
                    534:    return <code>null</code>.</p></li>
1.88      avankest  535: 
1.103     avankest  536:    <li><p>If a <code>Content-Type</code> is present and it does not contain a
                    537:    MIME type (ignoring any parameters) that is <code>text/xml</code>,
1.116     avankest  538:    <code>application/xml</code> or ends in <code title="">+xml</code> terminate
                    539:    these steps and return <code>null</code>. (Do not terminate these steps if
                    540:    there is no <code>Content-Type</code> header at all.)</p></li>
1.88      avankest  541: 
1.128     avankest  542:    <li>
                    543:     <p>Parse the response entity body into a document tree following the
                    544:     rules from the XML specifications. Let the result be <var>parsed
                    545:     document</var>. If this fails (unsupported character encoding, namespace
                    546:     well-formedness error et cetera) terminate these steps return
                    547:     <code>null</code>. [<cite><span>XML</span></cite>]
                    548:     [<cite><span>XMLNS</span></cite>]</p>
1.167     avankest  549: 
                    550:     <p class="note">Scripts in the resulting document tree will not be
                    551:     executed, resources referenced will not be loaded and no associated XSLT
                    552:     will be applied.</p>
1.128     avankest  553:    </li>
1.88      avankest  554: 
1.96      avankest  555:    <li><p>Return an object implementing the <code>Document</code>
1.88      avankest  556:    interface representing the <var>parsed document</var>.</p></li>
                    557:   </ol>
1.58      avankest  558: 
1.5       avankest  559:   <dl>
1.131     avankest  560:    <dt><dfn id="onreadystatechange"><code>onreadystatechange</code></dfn>
1.39      avankest  561:    of type <code>EventListener</code></dt>
1.12      avankest  562: 
1.157     avankest  563:    <dd><p>This attribute is an <span>event handler DOM attribute</span> and
                    564:    <em class="ct">must</em> be invoked whenever a
                    565:    <code>readystatechange</code> event is targated at the object.</p></dd>
1.12      avankest  566: 
1.131     avankest  567:    <dt><dfn id="readystate"><code>readyState</code></dfn> of type
1.22      avankest  568:    <code>unsigned short</code>, readonly</dt>
1.12      avankest  569: 
1.150     avankest  570:    <dd><p>On getting the attribute <em class="ct">must</em> return the value
                    571:    of the constant corresponding to the object's current state.</p></dd>
1.12      avankest  572: 
1.131     avankest  573:    <dt><dfn id="open" title="open"><code>open(<var>method</var>,
1.22      avankest  574:    <var>url</var>, <var>async</var>, <var>user</var>,
                    575:    <var>password</var>)</code></dfn>, method</dt>
1.12      avankest  576: 
1.1       avankest  577:    <dd>
1.58      avankest  578:     <p>When invoked, the user agent <em class="ct">must</em> follow the
1.96      avankest  579:     following steps (unless otherwise indicated):</p>
1.58      avankest  580: 
                    581:     <ol>
1.156     avankest  582:      <li><p>Let <var>stored method</var> be the <var>method</var>
                    583:      argument.</p></li>
1.58      avankest  584: 
1.156     avankest  585:      <li><p>If <var>stored method</var> does not match the
                    586:      <dfn><code>Method</code> production</dfn>, defined in section 5.1.1 of
                    587:      RFC 2616, raise a <code>SYNTAX_ERR</code> exception and terminate these
                    588:      steps. [<cite><span>RFC2616</span></cite>]</p></li>
1.58      avankest  589: 
1.156     avankest  590:      <li><p>If <var>stored method</var>
                    591:      <span title="case-insensitive match">case-insensitively matches</span>
                    592:      <code>CONNECT</code>, <code>DELETE</code>, <code>GET</code>,
                    593:      <code>HEAD</code>, <code>OPTIONS</code> <code>POST</code>,
                    594:      <code>PUT</code>, <code>TRACE</code>, or <code>TRACK</code> let
                    595:      <var>stored method</var> be the canonical uppercase form of the matched
                    596:      method name.</p></li>
                    597:      <!-- WebKit (and supposedly Firefox) also uppercase: COPY, INDEX, LOCK,
                    598:      M-POST, MKCOL, MOVE, PROPFIND, PROPPATCH, and UNLOCK. -->
1.58      avankest  599: 
1.156     avankest  600:      <li><p>If <var>stored method</var> is one of <code>CONNECT</code>,
                    601:      <code>TRACE</code>, or <code>TRACK</code> the user agent
                    602:      <em class="ct">should</em> raise a <code>SECURITY_ERR</code> exception
                    603:      and terminate these steps.</p></li>
1.58      avankest  604: 
                    605:      <li><p>Drop the fragment identifier (if any) from <var>url</var> and let
                    606:      <var>stored url</var> be the result of that operation.</p></li>
                    607: 
1.96      avankest  608:      <li><p>If <var>stored url</var> is a relative reference resolve it using
                    609:      the current value of the <code>baseURI</code> attribute of the
1.157     avankest  610:      <span><code>Document</code> pointer</span>. If this fails raise a
1.98      avankest  611:      <code>SYNTAX_ERR</code> exception and terminate these steps.</p></li>
1.58      avankest  612: 
1.101     avankest  613:      <li><p>If <var>stored url</var> contains an unsupported scheme raise a
                    614:      <code>NOT_SUPPORTED_ERR</code> and terminate these steps.</p></li>
1.110     avankest  615: 
1.58      avankest  616:      <li><p>If the <code>"user:password"</code> format in the
1.141     avankest  617:      <code>userinfo</code> production defined in section 3.2.1 of RFC 3986
                    618:      is not supported for the relevant scheme and <var>stored url</var>
                    619:      contains this format raise a <code>SYNTAX_ERR</code> and terminate
                    620:      these steps. [<cite><span>RFC3986</span></cite>]</p></li>
1.58      avankest  621: 
                    622:      <li><p>If <var>stored url</var> contains the <code>"user:password"</code>
                    623:      format let <var>stored user</var> be the user part and <var>stored
                    624:      password</var> be the password part.</p></li>
                    625: 
                    626:      <li><p>If <var>stored url</var> just contains the <code>"user"</code>
                    627:      format let <var>stored user</var> be the user part.</p></li>
                    628: 
1.151     avankest  629:      <li><p>If <var>stored url</var> is not of the <span>same-origin</span>
1.157     avankest  630:      as the <span>origin</span> of the <span><code>Document</code>
                    631:      pointer</span> the user agent <em class="ct">should</em> raise a
                    632:      <code>SECURITY_ERR</code> exception and terminate these steps.</p></li>
1.58      avankest  633: 
1.145     avankest  634:      <li><p>Let <var>async</var> be the value of the <var>async</var>
                    635:      argument or <code>true</code> if it was omitted.</p></li>
1.58      avankest  636: 
1.126     avankest  637:      <li><p>If the <var>user</var> argument was not omitted, and its syntax
1.145     avankest  638:      does not match that specified by the relevant authentication scheme,
                    639:      raise a <code>SYNTAX_ERR</code> exception and terminate these
                    640:      steps.</p></li>
1.14      avankest  641: 
1.58      avankest  642:      <li>
                    643:       <p>If the <var>user</var> argument was not omitted and is not
1.145     avankest  644:       <code>null</code> let <var>stored user</var> be <var>user</var>
                    645:       encoded using the encoding specified in the relevant authentication
                    646:       scheme or UTF-8 if the scheme fails to specify an encoding.</p>
1.14      avankest  647: 
1.58      avankest  648:       <p class="note">This step overrides any user that may have been set by
                    649:       the <var>url</var> argument.</p>
                    650:      </li>
1.16      avankest  651: 
1.58      avankest  652:      <li><p>If the <var>user</var> argument was not omitted and is
                    653:      <code>null</code> remove <var>stored user</var>.</p></li>
1.14      avankest  654: 
1.145     avankest  655:      <li><p>If the <var>password</var> argument was not omitted and its
                    656:      syntax does not match that specified by the relevant authentication
                    657:      scheme raise a <code>SYNTAX_ERR</code> exception and terminate these
                    658:      steps.</p></li>
1.58      avankest  659: 
                    660:      <li><p>If the <var>password</var> argument was not omitted and is not
                    661:      <code>null</code> let <var>stored password</var> be <var>password</var>
                    662:      encoded using the encoding specified in the relevant authentication
                    663:      scheme or UTF-8 if the scheme fails to specify an encoding.</p></li>
                    664: 
                    665:      <li><p>If the <var>password</var> argument was not omitted and is
                    666:      <code>null</code> remove <var>stored password</var>.</p></li>
                    667: 
1.108     avankest  668:      <li><p><span title="abort send()">Abort the <code>send()</code>
                    669:      algorithm</span>, set <span>response entity body</span> to "null" and
                    670:      reset the list of request headers.<p></li>
1.58      avankest  671: 
1.108     avankest  672:      <li><p>The user agent <em class="ct">should</em> cancel any network
                    673:      activity for which the object is responsible.</p></li>
1.58      avankest  674:      <!-- we can hardly require it... -->
                    675: 
1.145     avankest  676:      <li><p>Switch the object to the
                    677:      <span title="OPENED state">OPENED</span> state, set the
                    678:      <span><code>send()</code> flag</span> to "false" and then synchronously
                    679:      dispatch a <code>readystatechange</code> event on the object and return
                    680:      the method call.</p></li>
1.58      avankest  681:     </ol>
1.14      avankest  682: 
1.19      avankest  683:     <p class="note">A future version or extension of this specification will
1.33      avankest  684:     most likely define a way of doing cross-site requests.</p>
1.1       avankest  685:    </dd>
1.12      avankest  686: 
1.131     avankest  687:    <dt><dfn id="setrequestheader" title="setrequestheader"><code>setRequestHeader(<var>header</var>,
1.22      avankest  688:    <var>value</var>)</code></dfn>, method</dt>
1.12      avankest  689: 
1.5       avankest  690:    <dd>
1.163     avankest  691:     <p>Each request has a list of request headers with associated values.
                    692:     The <code>setRequestHeader()</code> method can be used to manipulate
                    693:     those values and set new request headers.</p>
                    694: 
                    695:     <p class="note">The <code>setRequestHeader()</code> method appends a
                    696:     value if the HTTP header given as argument is already part of the list
                    697:     of request headers.</p>
1.45      avankest  698: 
1.58      avankest  699:     <p>When invoked, the user agent <em class="ct">must</em> follow the
1.96      avankest  700:     following steps (unless otherwise indicated):</p>
1.14      avankest  701: 
1.58      avankest  702:     <ol>
                    703:      <li><p>If the state of the object is not
1.134     avankest  704:      <span title="OPENED state">OPENED</span> raise an
1.98      avankest  705:      <code>INVALID_STATE_ERR</code> exception and terminate these
                    706:      steps.</p></li>
1.96      avankest  707: 
                    708:      <li><p>If the <span><code>send()</code> flag</span> is "true" raise an
1.98      avankest  709:      <code>INVALID_STATE_ERR</code> exception and terminate these
                    710:      steps.</p></li>
1.14      avankest  711: 
1.97      avankest  712:      <li><p>If the <var>header</var> argument does not match the
1.22      avankest  713:      <dfn><code>field-name</code> production</dfn> as defined by section 4.2
1.96      avankest  714:      of RFC 2616 or is <code>null</code> raise a <code>SYNTAX_ERR</code>
1.98      avankest  715:      exception and terminate these steps.
1.96      avankest  716:      [<cite><span>RFC2616</span></cite>]</p></li>
                    717: 
1.98      avankest  718:      <li><p>If the <var>value</var> argument is <code>null</code> terminate
                    719:      these steps. (Do not raise an exception.)</li>
1.70      avankest  720:      <!-- undefined is to be treated as null here... -->
1.79      avankest  721: 
1.97      avankest  722:      <li><p>If the <var>value</var> argument does not match the
1.22      avankest  723:      <dfn><code>field-value</code> production</dfn> as defined by section 4.2
1.98      avankest  724:      of RFC 2616 raise a <code>SYNTAX_ERR</code> and terminate these steps.
1.58      avankest  725:      [<cite><span>RFC2616</span></cite>]</p></li>
1.14      avankest  726: 
1.32      avankest  727:      <li>
1.132     avankest  728:       <p>For security reasons, these steps <em class="ct">should</em> be
1.98      avankest  729:       terminated if the <var>header</var> argument
1.80      avankest  730:       <span title="case-insensitive match">case-insensitively matches</span>
                    731:       one of the following headers:</p>
1.58      avankest  732: 
1.32      avankest  733:       <ul>
                    734:        <li><code>Accept-Charset</code></li>
                    735:        <li><code>Accept-Encoding</code></li>
1.68      avankest  736:        <li><code>Connection</code></li>
1.32      avankest  737:        <li><code>Content-Length</code></li>
1.68      avankest  738:        <li><code>Content-Transfer-Encoding</code></li>
                    739:        <li><code>Date</code></li>
1.32      avankest  740:        <li><code>Expect</code></li>
                    741:        <li><code>Host</code></li>
                    742:        <li><code>Keep-Alive</code></li>
                    743:        <li><code>Referer</code></li>
                    744:        <li><code>TE</code></li>
                    745:        <li><code>Trailer</code></li>
                    746:        <li><code>Transfer-Encoding</code></li>
                    747:        <li><code>Upgrade</code></li>
1.68      avankest  748:        <li><code>Via</code></li>
1.32      avankest  749:       </ul>
                    750:      </li>
1.132     avankest  751:      
1.168     avankest  752:      <li><p>Also for security reasons, these steps
                    753:      <em class="ct">should</em> be terminated if the start of the
                    754:      <var>header</var> argument
                    755:      <span title="case-insensitive match">case-insensitively matches</span>
                    756:      <code>Proxy-</code> or <code>Sec-</code>.</p></li>
1.5       avankest  757: 
1.58      avankest  758:      <li><p>If the <var>header</var> argument is not in the list of request
1.96      avankest  759:      headers append the <var>header</var> with its associated <var>value</var>
1.98      avankest  760:      to the list and terminate these steps.</p></li>
1.58      avankest  761: 
                    762:      <li><p>If the <var>header</var> argument is in the list of request
1.96      avankest  763:      headers either use multiple headers, combine the values or use a
                    764:      combination of those (section 4.2, RFC 2616).
                    765:      [<cite><span>RFC2616</span></cite>]</p></li>
                    766:      <!-- XXX it seems UAs always combine the values -->
1.58      avankest  767:     </ol>
1.45      avankest  768: 
                    769:     <p class="note">See also the <code>send()</code> method regarding user
1.71      avankest  770:     agent header handling for caching, authentication, proxies, and
                    771:     cookies.</p>
1.14      avankest  772: 
                    773:     <div class="example">
1.58      avankest  774:      <pre><code>// The following script:
1.14      avankest  775: var client = new XMLHttpRequest();
                    776: client.open('GET', 'demo.cgi');
                    777: client.setRequestHeader('X-Test', 'one');
                    778: client.setRequestHeader('X-Test', 'two');
                    779: client.send();
                    780: 
                    781: // ...would result in the following header being sent:
                    782: ...
                    783: X-Test: one, two
1.58      avankest  784: ...</code></pre>
1.14      avankest  785:     </div>
1.5       avankest  786:    </dd>
1.12      avankest  787: 
1.131     avankest  788:    <dt><dfn id="send" title="send"><code>send(<var>data</var>)</code></dfn>,
1.22      avankest  789:    method</dt>
1.12      avankest  790: 
1.17      avankest  791:    <dd>
1.58      avankest  792:     <p>The <code>send()</code> method initiates the request and its optional
1.163     avankest  793:     argument provides the <span>entity body</span>.</p>
                    794:     
                    795:     <p class="note">Authors are encouraged to ensure that they have
                    796:     specified the <code>Content-Type</code> header via
                    797:     <code>setRequestHeader()</code> before invoking <code>send()</code> with
                    798:     a non-<code>null</code> <var>data</var> argument.</p>
1.58      avankest  799: 
                    800:     <p>When invoked, the user agent <em class="ct">must</em> follow the
1.108     avankest  801:     following steps (unless otherwise noted). Note that this algorithm might
1.126     avankest  802:     get aborted if the <code>open()</code> or <code>abort()</code> method is
                    803:     invoked. When the
1.109     avankest  804:     <dfn title="abort send()" id="abort-send-algorithm"><code>send()</code>
1.110     avankest  805:     algorithm is aborted</dfn> the user agent <em class="ct">must</em>
                    806:     terminate the algorithm after finishing the step it is on.</p>
                    807: 
1.108     avankest  808:     <p class="note">The following algorithm can not be aborted through script
                    809:     when <var>async</var> is <code>false</code>. It can only be aborted when
                    810:     <var>async</var> is <code>true</code> and only after the method call has
                    811:     returned.</p>
1.58      avankest  812: 
                    813:     <ol>
                    814:      <li><p>If the state of the object is not
1.134     avankest  815:      <span title="OPENED state">OPENED</span> raise an
1.98      avankest  816:      <code>INVALID_STATE_ERR</code> exception and terminate these
                    817:      steps.</p></li>
1.96      avankest  818: 
                    819:      <li><p>If the <span><code>send()</code> flag</span> is "true" raise an
1.98      avankest  820:      <code>INVALID_STATE_ERR</code> exception and terminate these
                    821:      steps.</p></li>
1.58      avankest  822: 
1.102     avankest  823:      <li><p>If <var>async</var> is <code>true</code> set the
1.103     avankest  824:      <span><code>send()</code> flag</span> to "true".</p></li>
                    825: 
1.58      avankest  826:      <li>
1.166     avankest  827:       <p>If <var>stored method</var> is <code>GET</code> act as if the
                    828:       <var>data</var> argument is <code>null</code>.</p>
                    829:       
1.58      avankest  830:       <p>If the <var>data</var> argument has not been omitted and is not
1.145     avankest  831:       <code>null</code> use it for the <dfn id="entity-body">entity
                    832:       body</dfn> as defined by section 7.2 of RFC 2616 observing the
                    833:       following rules: [<cite><span>RFC2616</span></cite>]</p>
1.58      avankest  834: 
1.119     avankest  835:       <dl class="switch">
1.58      avankest  836:        <dt><var>data</var> is a <code>DOMString</code></dt>
                    837: 
1.163     avankest  838:        <dd>
                    839:         <p>Encode <var>data</var> using UTF-8 for transmission.</p>
                    840: 
1.164     avankest  841:         <p>If a <code>Content-Type</code> header is set using
                    842:         <code>setRequestHeader()</code> set the <code>charset</code>
                    843:         parameter of that header to <code>UTF-8</code>.</p>
1.163     avankest  844:        </dd>
1.58      avankest  845: 
                    846:        <dt><var>data</var> is a <code>Document</code>
                    847: 
                    848:        <dd>
1.165     avankest  849:         <p>Serialize <var>data</var> into a namespace well-formed XML
                    850:         document and encoded using the encoding given by
                    851:         <code><var>data</var>.inputEncoding</code>, when not
                    852:         <code>null</code>, or UTF-8 otherwise. Or, if this fails because the
                    853:         <code>Document</code> cannot be serialized act as if <var>data</var>
                    854:         is <code>null</code>.</p>
                    855: 
                    856:         <p>If no <code>Content-Type</code> header has been set using
                    857:         <code>setRequestHeader()</code> append a <code>Content-Type</code>
                    858:         header to the list of request headers with a value of
                    859:         <code>application/xml;charset=<var>charset</var></code> where
                    860:         <var>charset</var> is the encoding used to encode the document.</p>
1.58      avankest  861: 
                    862:         <p class="note">Subsequent changes to the <code>Document</code> have
                    863:         no effect on what is submitted.</p>
                    864:        </dd>
                    865: 
                    866:        <dt><var>data</var> is not a <code>DOMString</code> or
                    867:        <code>Document</code></dt>
                    868: 
1.96      avankest  869:        <dd><p>Use the stringification mechanisms of the host language on
                    870:        <var>data</var> and treat the result as if <var>data</var> is a
1.166     avankest  871:        <code>DOMString</code>. Or, if this fails, act as if the
                    872:        <var>data</var> argument is <code>null</code>.</p></dd>
1.58      avankest  873:       </dl>
                    874: 
1.126     avankest  875:       <p>If the <var>data</var> argument has been omitted, or is
                    876:       <code>null</code>, no entity body is used in the request.</p>
1.58      avankest  877:      </li>
                    878: 
1.71      avankest  879:      <li><p>Make a request to <var>stored url</var>, using HTTP method
                    880:      <var>stored method</var>, user <var>stored user</var> (if provided) and
                    881:      password <var>stored password</var> (if provided), taking into account
                    882:      the entity body, list of request headers and the rules listed directly
                    883:      after this set of steps.</p></li>
1.60      avankest  884: 
1.67      avankest  885:      <li>
1.96      avankest  886:       <p>Synchronously dispatch a <code>readystatechange</code> event on the
                    887:       object.</p>
1.67      avankest  888: 
1.96      avankest  889:       <p class="note">The state of the object does not change. The event is
                    890:       dispatched for historical reasons.</p>
1.67      avankest  891:      </li>
                    892: 
1.102     avankest  893:      <li><p>If <var>async</var> is <code>true</code> return the
1.98      avankest  894:      <code>send()</code> method call. (Do not terminate the steps in the
                    895:      algorithm though.)</p></li>
1.58      avankest  896: 
1.117     avankest  897:      <li>
1.123     avankest  898:       <p>While downloading the resource the following rules are to be
                    899:       observed.</p>
                    900: 
1.119     avankest  901:       <dl class="switch">
1.118     avankest  902:        <dt>If the response is an HTTP redirect</dt>
1.167     avankest  903: 
1.118     avankest  904:        <dd>
1.145     avankest  905:         <p>If the redirect does not violate security (it is
                    906:         <span>same-origin</span> for instance) or infinite loop precautions
                    907:         and the scheme is supported transparently follow the redirect and go
1.166     avankest  908:         to the start of this step (step 8).</p>
1.145     avankest  909: 
                    910:         <p class="note">HTTP places requirements on the user agent regarding
                    911:         the preservation of the request method and entity body during
                    912:         redirects, and also requires users to be notified of certain kinds
                    913:         of automatic redirections.</p>
1.118     avankest  914:         <!-- Arguably HTTP should be fixed for the latter case. No browser
                    915:         follows that as far as I know. -->
                    916: 
                    917:         <p>Otherwise, follow the following set of steps:</p>
1.145     avankest  918: 
1.118     avankest  919:         <ol>
1.124     avankest  920:          <li><p>Set the <span>response entity body</span> to "null", the
                    921:          <span>error flag</span> to "true" and reset the list of request
                    922:          headers.</p></li>
1.118     avankest  923: 
                    924:          <li><p>Synchronously switch the state to
                    925:          <span title="DONE state">DONE</span>.</p></li>
                    926: 
                    927:          <li><p>If <var>async</var> is set to <code>false</code> raise a
                    928:          <code>NETWORK_ERR</code> exception and terminate the overall
                    929:          algorithm.</p></li>
                    930: 
                    931:          <li><p>Synchronously dispatch a <code>readystatechange</code> event on
                    932:          the object.</p></li>
                    933: 
                    934:          <li><p>Terminate the overall algorithm.</p></li>
                    935:         </ol>
                    936: 
                    937:         <p class="note">It is likely that a future version of the
                    938:         <code>XMLHttpRequest</code> object will dispatch an <code>error</code>
                    939:         event here as well.</p>
                    940:        </dd>
1.117     avankest  941: 
1.121     avankest  942: 
1.118     avankest  943:        <dt>If the user cancels the download</dt>
1.58      avankest  944: 
1.118     avankest  945:        <dd>
                    946:         <p>Run the following set of steps:</p>
1.60      avankest  947: 
1.118     avankest  948:         <ol>
1.124     avankest  949:          <li><p>Set the <span>response entity body</span> to "null", the
                    950:          <span>error flag</span> to "true" and reset the list of request
                    951:          headers.</p></li>
1.118     avankest  952: 
                    953:          <li><p>Synchronously switch the state to
                    954:          <span title="DONE state">DONE</span>.</p></li>
                    955: 
1.121     avankest  956:          <li><p>If <var>async</var> is set to <code>false</code> raise an
                    957:          <code>ABORT_ERR</code> exception and terminate the overall
1.118     avankest  958:          algorithm.</p></li>
                    959: 
                    960:          <li><p>Synchronously dispatch a <code>readystatechange</code> event on
                    961:          the object.</p></li>
                    962: 
                    963:          <li><p>Terminate the overall algorithm.</p></li>
                    964:         </ol>
1.121     avankest  965: 
1.118     avankest  966:         <p class="note">It is likely that a future version of the
1.121     avankest  967:         <code>XMLHttpRequest</code> object will dispatch an
                    968:         <code title="">abort</code> event here as well.</p>
1.118     avankest  969:        </dd>
1.60      avankest  970: 
1.121     avankest  971: 
1.118     avankest  972:        <dt>In case of network errors</dt>
1.60      avankest  973: 
1.118     avankest  974:        <dd>
1.126     avankest  975:         <p>In case of DNS errors, or other type of network errors, run the
                    976:         following set of steps. <span class="note">This does not include HTTP
                    977:         responses that indicate some type of error, such as HTTP status code
                    978:         410.</span></p>
1.118     avankest  979: 
                    980:         <ol>
1.124     avankest  981:          <li><p>Set the <span>response entity body</span> to "null", the
                    982:          <span>error flag</span> to "true" and reset the list of request
                    983:          headers.</p></li>
1.118     avankest  984: 
                    985:          <li><p>Synchronously switch the state to
                    986:          <span title="DONE state">DONE</span>.</p></li>
                    987: 
                    988:          <li><p>If <var>async</var> is set to <code>false</code> raise a
                    989:          <code>NETWORK_ERR</code> exception and terminate the overall
                    990:          algorithm.</p></li>
                    991: 
                    992:          <li><p>Synchronously dispatch a <code>readystatechange</code> event on
                    993:          the object.</p></li>
                    994: 
                    995:          <li><p>Terminate the overall algorithm.</p></li>
                    996:         </ol>
                    997: 
                    998:         <p class="note">It is likely that a future version of the
                    999:         <code>XMLHttpRequest</code> object will dispatch an <code>error</code>
                   1000:         event here as well.</p>
                   1001:        </dd>
                   1002:        
                   1003:        <dt>Once all HTTP headers have been received</dt>
                   1004:        
                   1005:        <dd>
                   1006:         <p>If all HTTP headers have been received, before receiving the message
1.123     avankest 1007:         body (if any), run the following steps:</p>
1.60      avankest 1008: 
1.118     avankest 1009:         <ol>
                   1010:          <li><p>Synchronously switch the state to
1.123     avankest 1011:          <span title="HEADERS_RECEIVED state">HEADERS_RECEIVED</span>.</p></li>
1.118     avankest 1012: 
                   1013:          <li><p>Synchronously dispatch a <code>readystatechange</code> event on
                   1014:          the object.</p></li>
1.123     avankest 1015:         </ol>
                   1016:        </dd>
                   1017:        
                   1018:        <dt>Once the first byte (or more) of the response entity body has been
                   1019:        received</dt>
                   1020:        <dt>If there is no response entity body</dt>
1.153     avankest 1021: 
1.123     avankest 1022:        <dd>
                   1023:         <ol>
1.118     avankest 1024:          <li><p>Synchronously switch the state to
                   1025:          <span title="LOADING state">LOADING</span>.</p></li>
                   1026: 
                   1027:          <li><p>Synchronously dispatch a <code>readystatechange</code> event on
                   1028:          the object.</p></li>
                   1029:         </ol>
                   1030:        </dd>
                   1031:       </dl>
1.153     avankest 1032: 
1.124     avankest 1033:       <p>Finally, once the complete resource has been downloaded go to the next
1.118     avankest 1034:       step.</p>
1.58      avankest 1035:      </li>
                   1036: 
1.82      avankest 1037:      <li><p>When the request has successfully completed loading, synchronously
1.96      avankest 1038:      switch the state to <span title="DONE state">DONE</span> and then
                   1039:      synchronously dispatch a <code>readystatechange</code> event on the
                   1040:      object and return the method call in case of <var>async</var> being
                   1041:      <code>false</code>.</p></li>
1.58      avankest 1042:     </ol>
1.14      avankest 1043: 
1.91      avankest 1044:     <p>If the user agent allows the user to configure a proxy it
1.22      avankest 1045:     <em class="ct">should</em> modify the request appropriately;
1.42      avankest 1046:     <abbr title="in other words">i.e.</abbr>, connect to the proxy host
                   1047:     instead of the origin server, modify the <code>Request-Line</code> and
                   1048:     send <code>Proxy-Authorization</code> headers as specified.</p>
1.12      avankest 1049: 
1.42      avankest 1050:     <p>If the user agent supports HTTP Authentication it
1.22      avankest 1051:     <em class="ct">should</em> consider requests originating from this object
1.42      avankest 1052:     to be part of the protection space that includes the accessed URIs and
                   1053:     send <code>Authorization</code> headers and handle <code>401
1.137     avankest 1054:     Unauthorized</code> requests appropriately. If authentication fails, user
1.42      avankest 1055:     agents <em class="ct">should</em> prompt the users for credentials.
                   1056:     [<cite><span>RFC2617</span></cite>]</p>
                   1057: 
1.57      avankest 1058:     <p>If the user agent supports HTTP State Management it
1.42      avankest 1059:     <em class="ct">should</em> persist, discard and send cookies (as received
                   1060:     in the <code>Set-Cookie</code> and <code>Set-Cookie2</code> response
                   1061:     headers, and sent in the <code>Cookie</code> header) as applicable.
                   1062:     [<cite><span>RFC2965</span></cite>]</p>
                   1063: 
1.163     avankest 1064:     <!-- It has been said that RFC2965 does not match reality. -->
                   1065: 
1.42      avankest 1066:     <p>If the user agent implements a HTTP cache it <em class="ct">should</em>
                   1067:     respect <code>Cache-Control</code> request headers set by the script
                   1068:     (<abbr title="for example">e.g.</abbr>, <code>Cache-Control:
                   1069:     no-cache</code> bypasses the cache). It <em class="ct">must not</em> send
                   1070:     <code>Cache-Control</code> or <code>Pragma</code> request headers
1.137     avankest 1071:     automatically unless the user explicitly requests such behavior
1.42      avankest 1072:     (<abbr>e.g.</abbr>, by (force-)reloading the page). <code>304 Not
1.22      avankest 1073:     Modified</code> responses that are a result of a user agent generated
                   1074:     conditional request <em class="ct">must</em> be presented as <code>200
1.57      avankest 1075:     OK</code> responses with the appropriate content. The user agent
1.39      avankest 1076:     <em class="ct">must</em> allow scripts to override automatic cache
1.22      avankest 1077:     validation by setting request headers (e.g., <code>If-None-Match</code>,
1.42      avankest 1078:     <code>If-Modified-Since</code>), in which case <code>304 Not
                   1079:     Modified</code> responses <em class="ct">must</em> be passed through.
                   1080:     [<cite><span>RFC2616</span></cite>]</p>
1.12      avankest 1081: 
1.8       avankest 1082:     <p>If the user agent implements server-driven content-negotiation
1.161     avankest 1083:     it <em class="ct">should</em> set <code>Accept-Encoding</code> and
                   1084:     <code>Accept-Charset</code> headers as appropriate; it
1.162     avankest 1085:     <em class="ct">must not</em> automatically set the <code>Accept</code>.
                   1086:     If the <code>Accept-Language</code> header is not set using
                   1087:     <code>setRequestHeader()</code> user agents <em class="ct">should</em>
                   1088:     provide it. Responses to such requests <em class="ct">must</em> have the
                   1089:     content-encodings automatically decoded.
                   1090:     [<cite><span>RFC2616</span></cite>]</p>
1.8       avankest 1091:    </dd>
1.12      avankest 1092: 
1.131     avankest 1093:    <dt><dfn id="abort"><code>abort()</code></dfn>, method</dt>
1.12      avankest 1094: 
1.5       avankest 1095:    <dd>
1.60      avankest 1096:     <p>When invoked, the user agent <em class="ct">must</em> run the following
1.96      avankest 1097:     steps (unless otherwise noted):</p>
1.60      avankest 1098: 
                   1099:     <ol>
1.108     avankest 1100:      <li><p><span title="abort send()">Abort the <code>send()</code>
                   1101:      algorithm</span>, set the <span>response entity body</span> to "null",
1.135     avankest 1102:      the <span>error flag</span> to "true" and remove any registered request
                   1103:      headers.</p></li>
1.60      avankest 1104: 
1.108     avankest 1105:      <li><p>The user agent <em class="ct">should</em> cancel any network
                   1106:      activity for which the object is responsible.</p></li>
1.60      avankest 1107: 
1.83      avankest 1108:      <li>
1.85      avankest 1109:       <p>If the state is <span title="UNSENT state">UNSENT</span>,
1.134     avankest 1110:       <span title="OPENED state">OPENED</span> and the <span><code>send()</code>
1.87      avankest 1111:       flag</span> is "false", or <span title="DONE state">DONE</span> go to
                   1112:       the next step.</p>
1.85      avankest 1113: 
1.135     avankest 1114:       <p>Otherwise, switch the state to
                   1115:       <span title="DONE state">DONE</span>, set the
                   1116:       <span><code>send()</code> flag</span> to "false" and synchronously
                   1117:       dispatch a <code>readystatechange</code> event on the object.</p>
1.83      avankest 1118:      </li>
1.67      avankest 1119: 
1.60      avankest 1120:      <li>
1.97      avankest 1121:       <p>Switch the state to <span title="UNSENT state">UNSENT</span>. (Do not
1.71      avankest 1122:       dispatch the <code>readystatechange</code> event.)</p>
1.60      avankest 1123: 
1.82      avankest 1124:       <p class="note">It is likely that a future version of the
                   1125:       <code>XMLHttpRequest</code> object will dispatch an
                   1126:       <code title="">abort</code> event here as well.</p>
1.60      avankest 1127:      </li>
                   1128:     </ol>
1.5       avankest 1129:    </dd>
1.12      avankest 1130: 
1.131     avankest 1131:    <dt><dfn id="getallresponseheaders"><code>getAllResponseHeaders()</code></dfn>,
1.22      avankest 1132:    method</dt>
1.12      avankest 1133: 
1.5       avankest 1134:    <dd>
1.60      avankest 1135:     <p>When invoked, the user agent <em class="ct">must</em> run
1.58      avankest 1136:     the following steps:</p>
                   1137: 
                   1138:     <ol>
1.124     avankest 1139:      <li><p>If the state is <span title="UNSENT state">UNSENT</span> or
1.134     avankest 1140:      <span title="OPENED state">OPENED</span> raise an
1.98      avankest 1141:      <code>INVALID_STATE_ERR</code> exception and terminate these
                   1142:      steps.</p></li>
1.124     avankest 1143:      
                   1144:      <li><p>If the <span>error flag</span> is "true" return <code>null</code>
                   1145:      and terminate these steps.</p></li>
1.96      avankest 1146: 
1.167     avankest 1147:      <li><p>Return all the HTTP headers, as a single string, with each
                   1148:      header line separated by a U+000D (CR) U+000A (LF) pair excluding the
                   1149:      status line.</p></li>
1.58      avankest 1150:     </ol>
1.24      avankest 1151: 
1.5       avankest 1152:     <div class="example">
1.58      avankest 1153:      <pre><code>// The following script:
1.5       avankest 1154: var client = new XMLHttpRequest();
1.14      avankest 1155: client.open("GET", "test.txt", true);
1.5       avankest 1156: client.send();
1.12      avankest 1157: client.onreadystatechange = function() {
1.13      avankest 1158:  if(this.readyState == 3) {
1.12      avankest 1159:   print(this.getAllResponseHeaders());
                   1160:  }
                   1161: }
1.5       avankest 1162: 
                   1163: // ...should output something similar to the following text:
                   1164: Date: Sun, 24 Oct 2004 04:58:38 GMT
                   1165: Server: Apache/1.3.31 (Unix)
                   1166: Keep-Alive: timeout=15, max=99
                   1167: Connection: Keep-Alive
                   1168: Transfer-Encoding: chunked
1.58      avankest 1169: Content-Type: text/plain; charset=utf-8</code></pre>
1.5       avankest 1170:     </div>
                   1171:    </dd>
1.12      avankest 1172: 
1.131     avankest 1173:    <dt><dfn id="getresponseheader" title="getresponseheader"><code>getResponseHeader(<var>header</var>)</code></dfn>,
1.22      avankest 1174:    method</dt>
1.12      avankest 1175: 
1.1       avankest 1176:    <dd>
1.58      avankest 1177:     <p>When the method is invoked, the user agent <em class="ct">must</em> run
                   1178:     the following steps:</p>
1.14      avankest 1179: 
1.58      avankest 1180:     <ol>
1.124     avankest 1181:      <li><p>If the state is <span title="UNSENT state">UNSENT</span> or
1.134     avankest 1182:      <span title="OPENED state">OPENED</span> raise an
1.98      avankest 1183:      <code>INVALID_STATE_ERR</code> exception and terminate these
                   1184:      steps.</p></li>
1.58      avankest 1185: 
1.149     avankest 1186:      <li><p>If the <var>header</var> argument does not match the
                   1187:      <span><code>field-name</code> production</span> return the empty string
1.124     avankest 1188:      and terminate these steps.</p></li>
                   1189: 
1.149     avankest 1190:      <li><p>If the <span>error flag</span> is "true" return
                   1191:      <code>null</code> and terminate these steps.</p></li>
1.58      avankest 1192: 
1.80      avankest 1193:      <li><p>If the <var>header</var> argument
                   1194:      <span title="case-insensitive match">case-insensitively matches</span>
1.127     avankest 1195:      multiple HTTP headers for the last request sent, return the values of
1.149     avankest 1196:      these headers as a single concatenated string separated from each
1.167     avankest 1197:      other by an U+002C followed by an U+0020 character and terminate
1.149     avankest 1198:      these steps.</p></li>
1.58      avankest 1199: 
1.80      avankest 1200:      <li><p>If the <var>header</var> argument
1.149     avankest 1201:      <span title="case-insensitive match">case-insensitively matches</span>
                   1202:      a single HTTP header for the last request sent return the  value of
                   1203:      that header and terminate these steps.</p></li>
1.58      avankest 1204: 
1.96      avankest 1205:      <li><p>Return <code>null</code>.</p></li>
1.58      avankest 1206:     </ol>
1.12      avankest 1207: 
1.1       avankest 1208:     <div class="example">
1.58      avankest 1209:      <pre><code>// The following script:
1.1       avankest 1210: var client = new XMLHttpRequest();
1.14      avankest 1211: client.open("GET", "test.txt", true);
1.5       avankest 1212: client.send();
1.12      avankest 1213: client.onreadystatechange = function() {
1.13      avankest 1214:  if(this.readyState == 3) {
1.14      avankest 1215:   print(client.getResponseHeader("Content-Type"));
1.12      avankest 1216:  }
                   1217: }
1.1       avankest 1218: 
1.5       avankest 1219: // ...should output something similar to the following text:
1.163     avankest 1220: text/plain; charset=utf-8</code></pre>
1.1       avankest 1221:     </div>
1.5       avankest 1222:    </dd>
1.12      avankest 1223: 
1.131     avankest 1224:    <dt><dfn id="responsetext"><code>responseText</code></dfn> of type
1.22      avankest 1225:    <code>DOMString</code>, readonly</dt>
1.12      avankest 1226: 
1.5       avankest 1227:    <dd>
1.88      avankest 1228:     <p>On getting, the user agent <em class="ct">must</em> run the following
                   1229:     steps:</p>
                   1230: 
                   1231:     <ol>
1.169   ! avankest 1232:      <li><p>If the state is not <span title="LOADING state">LOADING</span>
        !          1233:      or <span title="DONE state">DONE</span> return the empty string and
        !          1234:      terminate these steps.</p></li>
1.12      avankest 1235: 
1.88      avankest 1236:     <li><p>Return the <span>text response entity body</span>.</p></li>
                   1237:     </ol>
1.5       avankest 1238:    </dd>
1.12      avankest 1239: 
1.131     avankest 1240:    <dt><dfn id="responsexml"><code>responseXML</code></dfn> of type
1.22      avankest 1241:    <code>Document</code>, readonly</dt>
1.12      avankest 1242: 
1.8       avankest 1243:    <dd>
1.75      avankest 1244:     <p>On getting, the user agent <em class="ct">must</em> run the following
                   1245:     steps:</p>
1.79      avankest 1246: 
1.75      avankest 1247:     <ol>
1.169   ! avankest 1248:      <li><p>If the state is not <span title="DONE state">DONE</span> return
        !          1249:      <code>null</code> and terminate these steps.</p></li>
1.75      avankest 1250: 
1.88      avankest 1251:      <li><p>Return the <span>XML response entity body</span>.</p></li>
1.75      avankest 1252:     </ol>
1.5       avankest 1253:    </dd>
1.12      avankest 1254: 
1.131     avankest 1255:    <dt><dfn id="status"><code>status</code></dfn> of type <code>unsigned
1.22      avankest 1256:    short</code>, readonly</dt>
1.12      avankest 1257: 
1.5       avankest 1258:    <dd>
1.72      avankest 1259:     <p>On getting, if available, it <em class="ct">must</em> return the HTTP
                   1260:     status code sent by the server (typically <code>200</code> for a
                   1261:     successful request). Otherwise, if not available, the user agent
                   1262:     <em class="ct">must</em> raise an <code>INVALID_STATE_ERR</code>
                   1263:     exception.</p>
1.12      avankest 1264:    </dd>
                   1265: 
1.131     avankest 1266:    <dt><dfn id="statustext"><code>statusText</code></dfn> of type
1.22      avankest 1267:    <code>DOMString</code>, readonly</dt>
1.12      avankest 1268: 
1.5       avankest 1269:    <dd>
1.72      avankest 1270:     <p>On getting, if available, it <em class="ct">must</em> return the HTTP
                   1271:     status text sent by the server (appears after the status code). Otherwise,
                   1272:     if not available, the user agent <em class="ct">must</em> raise an
                   1273:     <code>INVALID_STATE_ERR</code> exception.</p>
1.1       avankest 1274:    </dd>
                   1275:   </dl>
1.12      avankest 1276: 
1.121     avankest 1277: 
1.31      avankest 1278:   <h3 id="events">Events for the <code title="">XMLHttpRequest</code>
                   1279:   Object</h3>
1.12      avankest 1280: 
1.134     avankest 1281:   <p>This section describes the various events that can be dispatched on
                   1282:   objects implementing the <code>XMLHttpRequest</code> interface. For this
1.22      avankest 1283:   version of the specification only one event is defined.</p>
1.12      avankest 1284: 
1.1       avankest 1285:   <dl>
1.131     avankest 1286:    <dt><dfn id="readystatechange"><code>readystatechange</code></dfn></dt>
1.24      avankest 1287: 
1.72      avankest 1288:    <dd>When the user agent dispatches a <code title="">readystatechange</code>
                   1289:    event (as indicated above) it <em class="ct">must not</em> bubble,
                   1290:    <em class="ct">must not</em> be cancelable and <em class="ct">must</em>
                   1291:    implement the <code>Event</code> interface. Its <code>namespaceURI</code>
                   1292:    attribute <em class="ct">must</em> be <code>null</code>.
1.155     avankest 1293:    [<cite><span>DOM2Events</span></cite>]</dd>
1.1       avankest 1294:   </dl>
1.32      avankest 1295: 
1.31      avankest 1296:   <h3 id="exceptions">Exceptions for the <code title="">XMLHttpRequest</code>
                   1297:   Object</h3>
1.138     avankest 1298:   
                   1299:   <p>Several algorithms in this specification may result in an exception
                   1300:   being thrown. These exceptions are all part of the group
                   1301:   <code>ExceptionCode</code> and use the <code>DOMException</code> object
                   1302:   which is defined in DOM Level 3 Core. In addition this specification
                   1303:   extends the <code>ExceptionCode</code> group with several new
                   1304:   constants as indicated below. [<cite><span>DOM3Core</span></cite>]</p>
1.31      avankest 1305: 
1.138     avankest 1306:   <pre class="idl">const unsigned short <span>SECURITY_ERR</span> = 18;
1.121     avankest 1307: const unsigned short <span>NETWORK_ERR</span> = 101;
                   1308: const unsigned short <span>ABORT_ERR</span> = 102;</pre>
1.31      avankest 1309: 
1.138     avankest 1310:   <p>The <dfn id="security-err"><code>SECURITY_ERR</code></dfn> exception is
                   1311:   raised if an attempt is made to perform an operation or access some data
                   1312:   in a way that would be a security risk or a violation of the user agent's
                   1313:   security policy.</p>
                   1314: 
                   1315:   <!-- http://lists.w3.org/Archives/Public/public-webapi/2006May/0027.html -->
                   1316: 
                   1317:   <p class="note">The <code title="">SECURITY_ERR</code> exception is
                   1318:   expected to be eventually folded into an update of the the DOM Level 3
                   1319:   Core specification with an equivalent definition and identical constant
                   1320:   value. Until that happens it is defined here to guide implementors. (This
1.153     avankest 1321:   is also the reason the constant value is not in line with the other
1.138     avankest 1322:   exceptions.)</p>
                   1323: 
1.33      avankest 1324:   <p>The <dfn id="network-err"><code>NETWORK_ERR</code></dfn> exception is
1.138     avankest 1325:   raised when a network error occurs in synchronous requests.</p>
1.121     avankest 1326: 
1.138     avankest 1327:   <p>The <dfn id="abort-err"><code>ABORT_ERR</code></dfn> exception is
                   1328:   raised when the user aborts a request in synchronous requests.</p>
1.121     avankest 1329: 
                   1330: 
1.11      avankest 1331: 
1.29      avankest 1332:   <h2 class="no-num" id="notcovered">Not in this Specification</h2>
                   1333: 
1.143     avankest 1334:   <p><em>This section is non-normative.</em></p>
1.29      avankest 1335: 
1.72      avankest 1336:   <p>This specification does not include the following features which are
                   1337:   being considered for a future version of this specification:</p>
1.29      avankest 1338: 
                   1339:   <ul>
                   1340:    <li><code>load</code> event and <code>onload</code> attribute;</li>
                   1341:    <li><code>error</code> event and <code>onerror</code> attribute;</li>
                   1342:    <li><code>progress</code> event and <code>onprogress</code> attribute;</li>
                   1343:    <li><code title="">abort</code> event and <code>onabort</code> attribute;</li>
                   1344:    <li>Timers have been suggested, perhaps an <code>ontimeout</code>
                   1345:     attribute;</li>
                   1346:    <li>Property to disable following redirects;</li>
1.30      avankest 1347:    <li><code title="">responseXML</code> for <code>text/html</code>
                   1348:    documents;</li>
1.40      avankest 1349:    <li>Cross-site <code title="">XMLHttpRequest</code>;</li>
1.87      avankest 1350:    <li><code>responseBody</code> to deal with byte streams;</li>
1.114     avankest 1351:    <li><code>overrideMimeType</code> to fix up MIME types;</li>
1.87      avankest 1352:    <li><code>getRequestHeader()</code> and
                   1353:    <code>removeRequestHeader()</code>.</li>
1.29      avankest 1354:   </ul>
                   1355: 
1.1       avankest 1356:   <h2 class="no-num" id="bibref">References</h2>
1.11      avankest 1357: 
1.6       avankest 1358:   <dl>
1.155     avankest 1359:    <dt>[<dfn id="ref-dom2events">DOM2Events</dfn>]</dt>
                   1360:    <dd><cite><a href="http://www.w3.org/TR/DOM-Level-2-Events/">Document
1.160     avankest 1361:    Object Model (DOM) Level 2 Events Specification</a></cite>, T. Pixley,
                   1362:    editor. W3C, November 2000.</dd>
1.155     avankest 1363: 
1.145     avankest 1364:    <dt>[<dfn id="ref-dom3core">DOM3Core</dfn>]</dt>
1.11      avankest 1365:    <dd><cite><a href="http://www.w3.org/TR/DOM-Level-3-Core">Document Object
1.92      avankest 1366:    Model (DOM) Level 3 Core Specification</a></cite>, A. Le Hors, P. Le
1.139     avankest 1367:    H&eacute;garet, L. Wood, G. Nicol, J. Robie, M. Champion, S. Byrne,
                   1368:    editors. W3C, April 2004.</dd>
1.11      avankest 1369: 
1.117     avankest 1370:    <dt>[<dfn id="ref-ecmascript">ECMAScript</dfn>]</dt>
1.92      avankest 1371:    <dd><cite><a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMAScript
                   1372:    Language Specification</a></cite>, Third Edition. ECMA, December 1999.</dd>
1.142     avankest 1373:    
1.145     avankest 1374:    <dt>[<dfn id="ref-html5">HTML5</dfn>]</dt>
1.142     avankest 1375:    <dd><cite><a href="http://www.whatwg.org/specs/web-apps/current-work/">HTML&nbsp;5</a></cite>
1.146     avankest 1376:    (work in progress), Ian Hickson, editor. WHATWG, 2007.</dd>
1.14      avankest 1377: 
1.145     avankest 1378:    <dt>[<dfn id="ref-rfc2119">RFC2119</dfn>]</dt>
1.117     avankest 1379:    <dd><cite><a href="http://ietf.org/rfc/rfc2119">Key words for use in RFCs to
                   1380:    Indicate Requirement Levels</a></cite>, S. Bradner. IETF, March 1997.</dd>
1.12      avankest 1381: 
1.145     avankest 1382:    <dt>[<dfn id="ref-rfc2616">RFC2616</dfn>]</dt>
1.11      avankest 1383:    <dd><cite><a href="http://ietf.org/rfc/rfc2616">Hypertext Transfer Protocol
1.92      avankest 1384:    -- HTTP/1.1</a></cite>, R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L.
                   1385:    Masinter, P. Leach, T. Berners-Lee, editors. IETF, June 1999.</dd>
1.12      avankest 1386: 
1.37      avankest 1387:    <dt>[<dfn id="ref-rfc2617">RFC2617</dfn>]</dt>
1.11      avankest 1388:    <dd><cite><a href="http://ietf.org/rfc/rfc2617">HTTP Authentication: Basic
1.92      avankest 1389:    and Digest Access Authentication</a></cite>, P. Hallam-Baker, J.
                   1390:    Hostetler, S. Lawrence, P. Leach, A. Luotonen, L. Stewart, editors. IETF,
                   1391:    June 1999.</dd>
1.12      avankest 1392: 
1.37      avankest 1393:    <dt>[<dfn id="ref-rfc2965">RFC2965</dfn>]</dt>
1.19      avankest 1394:    <dd><cite><a href="http://ietf.org/rfc/rfc2965">HTTP State Management
1.92      avankest 1395:    Mechanism</a></cite>, D. Kristol, L. Montulli, editors. IETF, October
                   1396:    2000.</dd>
1.19      avankest 1397: 
1.37      avankest 1398:    <dt>[<dfn id="ref-rfc3986">RFC3986</dfn>]</dt>
1.11      avankest 1399:    <dd><cite><a href="http://ietf.org/rfc/rfc3986">Uniform Resource Identifier
1.92      avankest 1400:    (URI): Generic Syntax</a></cite>, T. Berners-Lee, R. Fielding, L. Masinter,
                   1401:    editors. IETF, January 2005.</dd>
1.141     avankest 1402:    
                   1403:    <dt>[<dfn id="ref-rfc3987">RFC3987</dfn>]</dt>
                   1404:    <dd><cite><a href="http://ietf.org/rfc/rfc3987">Internationalized
                   1405:    Resource Identifiers (IRIs)</a></cite>, M. Duerst, M. Suignard, editors.
                   1406:    IETF, January 2005.</dd>
1.28      avankest 1407: 
1.92      avankest 1408:    <dt>[<dfn id="ref-xml">XML</dfn>]</dt>
                   1409:    <dd><cite><a href="http://www.w3.org/TR/xml/">Extensible Markup Language
                   1410:    (XML) 1.0 (Fourth Edition)</a></cite>, T. Bray, J. Paoli, C.
1.117     avankest 1411:    Sperberg-McQueen, E. Maler, F. Yergeau, editors. W3C, September 2006.</dd>
1.41      avankest 1412: 
1.92      avankest 1413:    <dt>[<dfn id="ref-xmlns">XMLNS</dfn>]</dt>
                   1414:    <dd><cite><a href="http://www.w3.org/TR/xml-names/">Namespaces in XML
1.117     avankest 1415:    (Second Edition)</a></cite>, T. Bray, D. Hollander, A. Layman, R. Tobin,
                   1416:    editors. W3C, August 2006.</dd>
1.1       avankest 1417:   </dl>
1.11      avankest 1418: 
1.130     avankest 1419:   <h2 class="no-num" id="acknowledgments">Acknowledgments</h2>
1.11      avankest 1420: 
1.159     avankest 1421:   <p>The editor would like to thank
1.12      avankest 1422: 
1.163     avankest 1423:   Addison Phillips,
1.159     avankest 1424:   Ahmed Kamel,
                   1425:   Alex Hopmann,
                   1426:   Alex Vincent,
                   1427:   Alexey Proskuryakov,
                   1428:   Asbj&oslash;rn Ulsberg,
                   1429:   Boris Zbarsky,
                   1430:   Bj&ouml;rn H&ouml;hrmann,
                   1431:   Cameron McCormack,
                   1432:   Christophe Jolif,
                   1433:   Charles McCathieNevile,
                   1434:   Dan Winship,
                   1435:   David H&aring;s&auml;ther,
                   1436:   Dean Jackson,
                   1437:   Denis Sureau,
                   1438:   Doug Schepers,
                   1439:   Douglas Livingstone,
                   1440:   Elliotte Harold,
                   1441:   Eric Lawrence,
1.163     avankest 1442:   Geoffrey Sneddon,
1.159     avankest 1443:   Gideon Cohn,
                   1444:   Gorm Haug Eriksen,
                   1445:   Hallvord R. M. Steen,
                   1446:   H&aring;kon Wium Lie,
                   1447:   Ian Davis,
                   1448:   Ian Hickson,
                   1449:   Ivan Herman,
                   1450:   Jeff Walden,
                   1451:   Jens Lindstr&ouml;m,
                   1452:   Jim Deegan,
                   1453:   Jim Ley,
                   1454:   Joe Farro,
                   1455:   Jonas Sicking,
                   1456:   Julian Reschke,
                   1457:   Karl Dubost,
                   1458:   Maciej Stachowiak,
                   1459:   Magnus Kristiansen,
                   1460:   Marc Hadley,
                   1461:   Marcos Caceres,
                   1462:   Mark Baker,
                   1463:   Mark Nottingham,
                   1464:   Mohamed Zergaoui,
                   1465:   Pawel Glowacki,
                   1466:   Robin Berjon,
                   1467:   Ruud Steltenpool,
                   1468:   Simon Pieters,
                   1469:   Stewart Brodie,
                   1470:   Sunava Dutta,
                   1471:   Tom Magliery and
                   1472:   Zhenbin Xu
                   1473:   
                   1474:   for their contributions to this specification.</p>
1.12      avankest 1475: 
1.1       avankest 1476:   <p>Special thanks to the Microsoft employees who first implemented the
1.143     avankest 1477:   <code title="">XMLHttpRequest</code> interface, which was first widely
                   1478:   deployed by the Windows Internet Explorer browser.</p>
1.12      avankest 1479: 
1.143     avankest 1480:   <p>Special thanks also to the WHATWG for drafting an initial version of
                   1481:   this specification in their Web Applications 1.0 document (now renamed to
                   1482:   HTML&nbsp;5). [<cite><span>HTML5</span></cite>]</p>
1.12      avankest 1483: 
1.143     avankest 1484:   <p>Thanks also to all those who have helped to improve this specification
                   1485:   by sending suggestions and corrections. (Please, keep bugging us with your
1.22      avankest 1486:   issues!)</p>
1.1       avankest 1487:  </body>
                   1488: </html>

Webmaster