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

1.248     avankest    1: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
1.1       avankest    2: <html lang="en-US">
                      3:  <head>
1.207     avankest    4:   <title>XMLHttpRequest</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.203     avankest   12:    .XXX { padding:.5em; border:solid #f00 }
                     13:    p.XXX::before { content:"Issue: " }
1.119     avankest   14:    dl.switch { padding-left:2em }
1.248     avankest   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.269     avankest   17:    dl.domintro { color: green; margin: 2em 0 2em 2em; padding: 0.5em 1em; border: none; background: #DDFFDD; }
                     18:    dl.domintro dt, dl.domintro dt * { color: black; text-decoration: none; }
                     19:    dl.domintro dd { margin: 0.5em 0 1em 2em; padding: 0; }
                     20:    dl.domintro dd p { margin: 0.5em 0; }
                     21:    dl.domintro:before { display: table; margin: -1em -0.5em -0.5em auto; width: auto; content: 'This box is non-normative. Implementation requirements are given below this box.'; color: red; border: solid 2px; background: white; padding: 0 0.25em; }
1.16      avankest   22:    em.ct { text-transform:lowercase; font-variant:small-caps; font-style:normal }
                     23:    dfn { font-weight:bold; font-style:normal }
                     24:    code { color:orangered }
                     25:    code :link, code :visited { color:inherit }
1.203     avankest   26:    hr:not(.top) { display:block; background:none; border:none; padding:0; margin:2em 0; height:auto }
                     27:    table { border-collapse:collapse; border-style:hidden hidden none hidden }
                     28:    table thead { border-bottom:solid }
                     29:    table tbody th:first-child { border-left:solid }
                     30:    table td, table th { border-left:solid; border-right:solid; border-bottom:solid thin; vertical-align:top; padding:0.2em }
1.16      avankest   31:   </style>
1.147     avankest   32:   <link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/W3C-[STATUS]">
1.1       avankest   33:  </head>
                     34:  <body>
                     35:   <div class="head">
                     36:    <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   37: 
1.229     avankest   38:    <h1 class="head" id="the-xmlhttprequest-object">XMLHttpRequest</h1>
1.248     avankest   39:    
1.12      avankest   40: 
1.149     avankest   41:    <h2 class="no-num no-toc" id="w3c-doctype">[LONGSTATUS] [DATE: 3 August 2002]</h2>
1.12      avankest   42: 
1.1       avankest   43:    <dl>
1.10      avankest   44:     <dt>This Version:</dt>
1.291     avankest   45:     <dd><a href="[VERSION]/">http://www.w3.org/TR/[YEAR]/ED-XMLHttpRequest-[CDATE]/</a></dd>
1.14      avankest   46: 
1.10      avankest   47:     <dt>Latest Version:</dt>
1.1       avankest   48:     <dd><a href="http://www.w3.org/TR/XMLHttpRequest/">http://www.w3.org/TR/XMLHttpRequest/</a></dd>
1.203     avankest   49: 
1.189     avankest   50:     <dt>Latest Editor Version:</dt>
                     51:     <dd><a href="http://dev.w3.org/2006/webapi/XMLHttpRequest/">http://dev.w3.org/2006/webapi/XMLHttpRequest/</a></dd>
1.14      avankest   52: 
1.10      avankest   53:     <dt>Previous Versions:</dt>
1.248     avankest   54:     
1.291     avankest   55:     <dd><a href="http://www.w3.org/TR/2010/CR-XMLHttpRequest-20100803/">http://www.w3.org/TR/2010/CR-XMLHttpRequest-20100803/</a></dd>
1.288     avankest   56:     <dd><a href="http://www.w3.org/TR/2009/WD-XMLHttpRequest-20091119/">http://www.w3.org/TR/2009/WD-XMLHttpRequest-20091119/</a></dd>
1.231     avankest   57:     <dd><a href="http://www.w3.org/TR/2009/WD-XMLHttpRequest-20090820/">http://www.w3.org/TR/2009/WD-XMLHttpRequest-20090820/</a></dd>
1.173     avankest   58:     <dd><a href="http://www.w3.org/TR/2008/WD-XMLHttpRequest-20080415/">http://www.w3.org/TR/2008/WD-XMLHttpRequest-20080415/</a></dd>
1.154     avankest   59:     <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   60:     <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   61:     <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   62:     <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   63:     <dd><a href="http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060619/">http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060619/</a></dd>
                     64:     <dd><a href="http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/">http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405/</a></dd>
1.248     avankest   65:     
                     66:     
1.14      avankest   67: 
1.1       avankest   68:     <dt>Editor:</dt>
                     69:     <dd><a href="http://annevankesteren.nl/">Anne van Kesteren</a>
                     70:      (<a href="http://www.opera.com/">Opera Software ASA</a>)
                     71:      &lt;<a href="mailto:annevk@opera.com">annevk@opera.com</a>&gt;</dd>
                     72:    </dl>
1.14      avankest   73: 
1.1       avankest   74:    <p class="copyright"><a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a>
1.315     avankest   75:    &copy; 2010
1.51      avankest   76:    <a href="http://www.w3.org/"><acronym title="World Wide Web Consortium">W3C</acronym></a><sup>&reg;</sup>
                     77:    (<a href="http://www.csail.mit.edu/"><acronym title="Massachusetts Institute of Technology">MIT</acronym></a>,
                     78:    <a href="http://www.ercim.org/"><acronym title="European Research Consortium for Informatics and Mathematics">ERCIM</acronym></a>,
                     79:    <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved. W3C
                     80:    <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
                     81:    <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a>
                     82:    and
                     83:    <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document
                     84:    use</a> rules apply.</p>
1.1       avankest   85:   </div>
1.12      avankest   86: 
1.1       avankest   87:   <hr>
1.12      avankest   88: 
1.1       avankest   89:   <h2 class="no-num no-toc" id="specabstract">Abstract</h2>
1.10      avankest   90: 
1.248     avankest   91:   
                     92:   
1.229     avankest   93:   <p>The XMLHttpRequest specification defines an API
1.207     avankest   94:   that provides scripted client functionality for transferring data between
                     95:   a client and a server.</p>
1.248     avankest   96:   
1.12      avankest   97: 
1.1       avankest   98:   <h2 class="no-num no-toc" id="sotd">Status of this Document</h2>
1.12      avankest   99: 
1.1       avankest  100:   <p><em>This section describes the status of this document at the time of its
1.36      avankest  101:   publication. Other documents may supersede this document. A list of current
                    102:   W3C publications and the latest revision of this technical report can be
                    103:   found in the <a href="http://www.w3.org/TR/">W3C technical reports index</a>
1.117     avankest  104:   at http://www.w3.org/TR/.</em></p>
1.36      avankest  105: 
1.248     avankest  106:   <p>This is the [DATE: 3 August 2002] <!--Last Call Working Draft-->[LONGSTATUS] of
                    107:   XMLHttpRequest. Please send comments to
                    108:   <a href="mailto:public-webapps@w3.org?subject=[XHR]%20">public-webapps@w3.org</a>
1.207     avankest  109:   (<a href="http://lists.w3.org/Archives/Public/public-webapps/">archived</a>)
1.248     avankest  110:   with <samp>[XHR]</samp> at the start of the subject line.</p>
1.295     avankest  111: 
1.287     avankest  112:   
                    113:   <p>For the last Last Call Working Draft the Working Group has kept a
                    114:   <a href="http://dev.w3.org/2006/webapi/XMLHttpRequest/disposition-of-comments-3">disposition of comments</a>
1.290     avankest  115:   document. A
                    116:   <a href="http://dev.w3.org/cvsweb/2006/webapi/XMLHttpRequest/Overview.src.html">list of changes</a>
                    117:   is available via a Web view of CVS. (Due to the way the document is edited
                    118:   certain commit messages have introduced negligible changes to this
                    119:   document and are in fact only relevant for XMLHttpRequest Level 2.)</p>
1.291     avankest  120:   
1.51      avankest  121: 
1.47      avankest  122:   <p>This document is produced by the
1.248     avankest  123:   <a href="http://www.w3.org/2008/webapps/">Web Applications</a> (WebApps) Working Group.
                    124:   The WebApps Working Group is part of the
1.207     avankest  125:   <a href="http://www.w3.org/2006/rwc/Activity">Rich Web Clients Activity</a>
1.248     avankest  126:   in the W3C <a href="http://www.w3.org/Interaction/">Interaction Domain</a>.</p>
1.12      avankest  127: 
1.1       avankest  128:   <p>This document was produced by a group operating under the
1.248     avankest  129:   <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004
                    130:   W3C Patent Policy</a>. W3C maintains a
1.207     avankest  131:   <a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/42538/status">public
1.248     avankest  132:   list of any patent disclosures</a> made in connection with the deliverables of
                    133:   the group; that page also includes instructions for disclosing a patent. An
                    134:   individual who has actual knowledge of a patent which the individual believes
                    135:   contains
1.36      avankest  136:   <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential
                    137:   Claim(s)</a> must disclose the information in accordance with
                    138:   <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
                    139:   6 of the W3C Patent Policy</a>.</p>
1.12      avankest  140: 
1.291     avankest  141:   <p>Publication as a Working Draft does not imply endorsement by the W3C
1.248     avankest  142:   Membership. This is a draft document and may be updated, replaced or
                    143:   obsoleted by other documents at any time. It is inappropriate to cite this
                    144:   document as other than work in progress.</p>
1.295     avankest  145: 
1.307     avankest  146:   
1.268     avankest  147:   <h3 class="no-num no-toc" id="crec">Candidate Recommendation Exit Criteria</h3>
                    148: 
                    149:   <p>To exit the Candidate Recommendation (CR) stage the following criteria
                    150:   <em class="ct">must</em> have been met:</p>
                    151: 
                    152:   <ol>
                    153:    <li>There will be at least two interoperable implementations passing all
1.286     avankest  154:    test cases in the
                    155:    <a href="http://test.w3.org/webapps/tests/XMLHttpRequest/info.htm">test suite</a>
                    156:    for this specification. An implementation is to be available (i.e. for
                    157:    download), shipping (i.e. not private), and not experimental (i.e.
                    158:    intended for a wide audience). The working group will decide when the
1.290     avankest  159:    test suite is of sufficient quality to test interoperability and will
                    160:    produce implementation reports (hosted together with the test suite).</li>
1.268     avankest  161: 
1.291     avankest  162:    <li>A minimum of six months of the CR stage will have elapsed. This is to
1.268     avankest  163:    ensure that enough time is given for any remaining major errors to be
                    164:    caught. The CR period will be extended if implementations are slow to
1.291     avankest  165:    appear.</li> <!-- XXX need to add date -->
1.282     avankest  166: 
1.283     avankest  167:    <li>Text, which can be in a separate document, exists that explains the
                    168:    security considerations for this specification. This may be done in a
                    169:    generic manner as they are most likely applicable to various APIs. The
                    170:    working group will decide whether the text is of sufficient quality.</li>
1.268     avankest  171:   </ol>
1.307     avankest  172:   
1.207     avankest  173: 
                    174: 
1.1       avankest  175:   <h2 class="no-num no-toc" id="toc">Table of Contents</h2>
1.21      avankest  176: 
1.1       avankest  177:   <!--toc-->
1.12      avankest  178: 
1.207     avankest  179: 
                    180: 
1.1       avankest  181:   <h2 id="introduction">Introduction</h2>
1.12      avankest  182: 
1.1       avankest  183:   <p><em>This section is non-normative.</em></p>
1.12      avankest  184: 
1.183     avankest  185:   <p>The <code>XMLHttpRequest</code> object implements an interface exposed
                    186:   by a scripting engine that allows scripts to perform HTTP client
                    187:   functionality, such as submitting form data or loading data from a
                    188:   server. It is the ECMAScript HTTP API.</p>
1.24      avankest  189: 
1.1       avankest  190:   <p>The name of the object is <code>XMLHttpRequest</code> for compatibility
1.183     avankest  191:   with the Web, though each component of this name is potentially
                    192:   misleading. First, the object supports any text based format, including
                    193:   XML. Second, it can be used to make requests over both HTTP and HTTPS
                    194:   (some implementations support protocols in addition to HTTP and HTTPS, but
                    195:   that functionality is not covered by this specification). Finally, it
                    196:   supports "requests" in a broad sense of the term as it pertains to HTTP;
                    197:   namely all activity involved with HTTP requests or responses for the
                    198:   defined HTTP methods.</p>
1.12      avankest  199: 
1.14      avankest  200:   <div class="example">
1.250     avankest  201:    <p>Some simple code to do something with data from an XML document
                    202:    fetched over the network:</p>
1.16      avankest  203: 
1.308     avankest  204:    <pre><code>function processData(data) {
1.312     avankest  205:   // taking care of data
1.14      avankest  206: }
                    207: 
                    208: function handler() {
1.312     avankest  209:   if(this.readyState == this.DONE) {
                    210:     if(this.status == 200 &amp;&amp;
                    211:        this.responseXML != null &amp;&amp;
                    212:        this.responseXML.getElementById('test').textContent) {
1.308     avankest  213:       // success!
                    214:       processData(this.responseXML.getElementById('test').textContent);
                    215:       return;
                    216:     }
1.312     avankest  217:     // something went wrong
                    218:     processData(null);
1.308     avankest  219:   }
1.14      avankest  220: }
1.12      avankest  221: 
1.14      avankest  222: var client = new XMLHttpRequest();
                    223: client.onreadystatechange = handler;
1.250     avankest  224: client.open("GET", "unicorn.xml");
1.58      avankest  225: client.send();</code></pre>
1.16      avankest  226: 
1.56      avankest  227:    <p>If you just want to log a message to the server:</p>
1.16      avankest  228: 
1.58      avankest  229:    <pre><code>function log(message) {
1.308     avankest  230:   var client = new XMLHttpRequest();
                    231:   client.open("POST", "/log");
                    232:   client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
                    233:   client.send(message);
1.58      avankest  234: }</code></pre>
1.16      avankest  235: 
1.14      avankest  236:    <p>Or if you want to check the status of a document on the server:</p>
1.16      avankest  237: 
1.58      avankest  238:    <pre><code>function fetchStatus(address) {
1.308     avankest  239:   var client = new XMLHttpRequest();
                    240:   client.onreadystatechange = function() {
                    241:     // in case of network errors this might not give reliable results
1.310     avankest  242:     if(this.readyState == this.DONE)
1.308     avankest  243:       returnStatus(this.status);
                    244:   }
                    245:   client.open("HEAD", address);
                    246:   client.send();
1.58      avankest  247: }</code></pre>
1.14      avankest  248:   </div>
1.12      avankest  249: 
1.203     avankest  250: 
                    251: 
1.248     avankest  252: 
                    253:   <h2 id="conformance">Conformance Criteria</h2>
1.12      avankest  254: 
1.27      avankest  255:   <p>Everything in this specification is normative except for diagrams,
                    256:   examples, notes and sections marked non-normative.</p>
1.12      avankest  257: 
1.1       avankest  258:   <p>The key words <em class="ct">must</em>, <em class="ct">must not</em>,
1.259     avankest  259:   <em class="ct">should</em>, <em class="ct">should not</em>, and
                    260:   <em class="ct">may</em> in this document are to be interpreted as
                    261:   described in RFC 2119. [<cite><span>RFC2119</span></cite>]</p>
1.12      avankest  262: 
1.299     avankest  263:   <p>This specification defines a single conformance class:</p>
1.12      avankest  264: 
1.1       avankest  265:   <dl>
1.74      avankest  266:    <dt><dfn id="conforming-user-agent">Conforming user agent</dfn></dt>
1.24      avankest  267: 
1.74      avankest  268:    <dd>
                    269:     <p>A user agent <em class="ct">must</em> behave as described in this
1.106     avankest  270:     specification in order to be considered conformant.</p>
1.95      avankest  271: 
1.140     avankest  272:     <p>User agents <em class="ct">may</em> implement algorithms given in
                    273:     this specification in any way desired, so long as the end result is
                    274:     indistinguishable from the result that would be obtained by the
                    275:     specification's algorithms.</p>
1.110     avankest  276: 
1.95      avankest  277:     <p class="note">This specification uses both the terms "conforming user
                    278:     agent(s)" and "user agent(s)" to refer to this product class.</p>
1.74      avankest  279:    </dd>
1.1       avankest  280:   </dl>
1.32      avankest  281: 
1.153     avankest  282:   <h3 id="dependencies">Dependencies</h3>
1.33      avankest  283: 
1.29      avankest  284:   <p>This specification relies on several underlying specifications.</p>
1.248     avankest  285: 
1.29      avankest  286:   <dl>
1.248     avankest  287:    
                    288: 
1.29      avankest  289:    <dt>DOM</dt>
1.310     avankest  290:    <dd><p>A <span>conforming user agent</span> <em class="ct">must</em>
                    291:    support at least the subset of the functionality defined in DOM Events
                    292:    and DOM Core that this specification relies upon, such as various
                    293:    exceptions and <code>EventTarget</code>.
1.155     avankest  294:    [<cite><span>DOM2Events</span></cite>]
                    295:    [<cite><span>DOM3Core</span></cite>]</p></dd>
1.29      avankest  296: 
1.310     avankest  297:    
                    298: 
1.250     avankest  299:    <dt>HTML5</dt>
1.161     avankest  300:    <dd>
1.189     avankest  301:     <p>A <span>conforming user agent</span> <em class="ct">must</em> support
1.250     avankest  302:     at least the subset of the functionality defined in HTML5 that
1.197     avankest  303:     this specification relies upon, such as the basics of the
                    304:     <code>Window</code> object and serializing a <code>Document</code>
                    305:     object. [<cite><span>HTML5</span></cite>]</p>
1.161     avankest  306: 
                    307:     <p class="note">The
                    308:     <a href="http://www.w3.org/TR/2006/WD-Window-20060407/">Window Object
                    309:     1.0</a> draft is not referenced normatively as it appears to be no
1.250     avankest  310:     longer maintained and HTML5 defines the <code>Window</code> object in
                    311:     more detail. This specification already depends on HTML5 for other
                    312:     reasons so there is not much additional overhead because of this.</p>
1.299     avankest  313:    </dd>
1.161     avankest  314: 
1.29      avankest  315:    <dt>HTTP</dt>
1.299     avankest  316:    <dd><p>A <span>conforming user agent</span> <em class="ct">must</em>
                    317:    support some version of the HTTP protocol. Requirements regarding HTTP
                    318:    are made throughout the specification.
1.248     avankest  319:    [<cite><span>RFC2616</span></cite>]</p></dd>
1.189     avankest  320: 
1.181     avankest  321:    <dt>Web IDL</dt>
1.248     avankest  322:    <dd><p>A <span>conforming user agent</span> <em class="ct">must</em> also
                    323:    be a conforming implementation of the IDL fragments in this
                    324:    specification, as described in the Web IDL specification.
1.299     avankest  325:    [<cite><span>WebIDL</span></cite>]</p></dd>
1.248     avankest  326: 
1.299     avankest  327:    <dt>XML</dt>
                    328:    <dd><p>A <span>conforming user agent</span> <em class="ct">must</em> be a
                    329:    conforming XML processor that reports violations of namespace
                    330:    well-formedness. [<cite><span>XML</span></cite>]</p></dd>
1.29      avankest  331:   </dl>
1.12      avankest  332: 
1.157     avankest  333: 
1.153     avankest  334:   <h3 id="terminology">Terminology</h3>
1.209     avankest  335: 
1.281     avankest  336:   <p><dfn id="dfn-obtain-unicode">Convert a DOMString to a sequence of Unicode characters</dfn>
1.233     avankest  337:   is defined by the Web IDL specification.
                    338:   [<cite><span>WebIDL</span></cite>]</p>
1.266     avankest  339: 
1.248     avankest  340:   
1.292     avankest  341: 
1.200     avankest  342:   <p>The terms and algorithms
1.257     avankest  343:   <dfn id="url-fragment"><code>&lt;fragment></code></dfn>,
                    344:   <dfn id="url-scheme"><code>&lt;scheme></code></dfn>,
1.265     avankest  345:   <dfn id="cookie-free-document-object">cookie-free <code>Document</code> object</dfn>,
1.203     avankest  346:   <dfn id="document-base-url">document base URL</dfn>,
1.244     avankest  347:   <dfn id="document-character-encoding">document's character encoding</dfn>,
1.205     avankest  348:   <dfn id="event-handler-attributes-0">event handler attributes</dfn>,
1.203     avankest  349:   <dfn id="event-handler-event-type">event handler event type</dfn>,
1.260     avankest  350:   <dfn id="fetch">fetch</dfn>,
1.203     avankest  351:   <dfn id="fully-active">fully active</dfn>,
1.206     avankest  352:   <dfn id="function"><code>Function</code></dfn>,
1.302     avankest  353:   <dfn id="html-documents">HTML documents</dfn>,
1.225     avankest  354:   <dfn id="dom-innerhtml" title="dom-innerHTML"><code>innerHTML</code></dfn>,
1.200     avankest  355:   <dfn id="origin">origin</dfn>,
1.232     avankest  356:   <dfn id="preferred-mime-name">preferred MIME name</dfn>,
1.203     avankest  357:   <dfn id="resolve-a-url">resolve a URL</dfn>,
                    358:   <dfn id="same-origin">same origin</dfn>,
                    359:   <dfn id="storage-mutex">storage mutex</dfn>,
                    360:   <dfn id="task">task</dfn>,
                    361:   <dfn id="task-source">task source</dfn>,
1.252     avankest  362:   <dfn id="task-queues">task queues</dfn>,
1.203     avankest  363:   <dfn id="url">URL</dfn>,
1.232     avankest  364:   <dfn id="url-character-encoding">URL character encoding</dfn>,
                    365:   <dfn id="queue-a-task">queue a task</dfn>, and
                    366:   <dfn id="valid-mime-type">valid MIME type</dfn>
1.250     avankest  367:   are defined by the HTML5 specification.
1.157     avankest  368:   [<cite><span>HTML5</span></cite>]</p>
1.210     avankest  369: 
1.203     avankest  370:   <p>The term <dfn id="entity-body">entity body</dfn> is used as described
                    371:   in RFC 2616. <dfn id="method-token">Method token</dfn> is used as
                    372:   described in section 5.1.1 of RFC 2616. <dfn><code>field-name</code></dfn>
                    373:   and <dfn><code>field-value</code></dfn> are used as described in section
                    374:   4.2 of RFC 2616. [<cite><span>RFC2616</span></cite>]</p>
1.218     avankest  375: 
1.258     avankest  376:   <p>To <dfn>deflate a DOMString into a byte sequence</dfn> means to create
                    377:   a sequence of bytes such that the <var title="">n</var>th byte of the
                    378:   sequence is equal to the low-order byte of the <var title="">n</var>th
                    379:   code point in the original DOMString.</p>
                    380: 
                    381:   <p>To <dfn>inflate a byte sequence into a DOMString</dfn> means to create
                    382:   a DOMString such that the <var title="">n</var>th code point has 0x00 as
                    383:   the high-order byte and the <var title="">n</var>th byte of the byte
                    384:   sequence as the low-order byte.</p>
1.256     avankest  385: 
1.203     avankest  386:   <p><dfn><code>userinfo</code></dfn> is used as described in section 3.2.1
                    387:   of RFC 3986. [<cite><span>RFC3986</span></cite>]</p>
                    388: 
                    389:   <p>To <dfn id="dispatch-readystatechange-event">dispatch a
                    390:   <code>readystatechange</code> event</dfn> means that an event with the
1.273     avankest  391:   name <code title="event-xhr-readystatechange">readystatechange</code>, which does not bubble and is not
1.232     avankest  392:   cancelable, and which uses the <code>Event</code> interface, is to be
                    393:   dispatched at the <code>XMLHttpRequest</code> object.</p>
1.80      avankest  394: 
1.248     avankest  395:   
                    396: 
1.153     avankest  397:   <h3 id="extensibility">Extensibility</h3>
1.12      avankest  398: 
1.250     avankest  399:   <p>User agents, Working Groups, and other interested parties are
                    400:   <em>strongly encouraged</em> to discuss extensions on a relevant public
                    401:   forum, preferably
                    402:   <a href="mailto:public-webapps@w3.org">public-webapps@w3.org</a>. If this
                    403:   is for some reason not possible prefix the extension in some way and start
                    404:   the prefix with an uppercase letter. E.g. if company Foo wants to add a
                    405:   private method <code>bar()</code> it could be named <code>FooBar()</code>
                    406:   to prevent clashes with a potential future standardized
                    407:   <code>bar()</code>.</p>
1.12      avankest  408: 
1.153     avankest  409: 
1.223     avankest  410:   <h2>The <code title="">XMLHttpRequest</code> Interface</h2>
1.12      avankest  411: 
1.58      avankest  412:   <p>The <code>XMLHttpRequest</code> object can be used by scripts to
1.22      avankest  413:   programmatically connect to their originating server via HTTP.</p>
1.12      avankest  414: 
1.228     avankest  415:   <pre class="idl">[NoInterfaceObject]
                    416: interface <dfn id="xmlhttprequesteventtarget">XMLHttpRequestEventTarget</dfn> : EventTarget {
                    417:   // for future use
                    418: };
                    419: 
1.240     avankest  420: [<span title="dom-XMLHttpRequest">Constructor</span>]
1.228     avankest  421: interface <dfn id="xmlhttprequest">XMLHttpRequest</dfn> : <span>XMLHttpRequestEventTarget</span> {
1.206     avankest  422:   // <a href="#event-handler-attributes">event handler attributes</a>
1.273     avankest  423:            attribute <span>Function</span> <span title="handler-xhr-onreadystatechange">onreadystatechange</span>;
1.58      avankest  424: 
1.205     avankest  425:   // <a href="#states">states</a>
1.272     avankest  426:   const unsigned short <span title="dom-XMLHttpRequest-UNSENT">UNSENT</span> = 0;
                    427:   const unsigned short <span title="dom-XMLHttpRequest-OPENED">OPENED</span> = 1;
                    428:   const unsigned short <span title="dom-XMLHttpRequest-HEADERS_RECEIVED">HEADERS_RECEIVED</span> = 2;
                    429:   const unsigned short <span title="dom-XMLHttpRequest-LOADING">LOADING</span> = 3;
                    430:   const unsigned short <span title="dom-XMLHttpRequest-DONE">DONE</span> = 4;
1.277     avankest  431:   readonly attribute unsigned short <span title="dom-XMLHttpRequest-readyState">readyState</span>;
1.58      avankest  432: 
1.205     avankest  433:   // <a href="#request">request</a>
1.274     avankest  434:   void <span title="dom-XMLHttpRequest-open">open</span>(DOMString <var>method</var>, DOMString <var title="">url</var>);
                    435:   void <span title="dom-XMLHttpRequest-open">open</span>(DOMString <var>method</var>, DOMString <var title="">url</var>, boolean <var>async</var>);
                    436:   void <span title="dom-XMLHttpRequest-open">open</span>(DOMString <var>method</var>, DOMString <var title="">url</var>, boolean <var>async</var>, DOMString? <var>user</var>);
                    437:   void <span title="dom-XMLHttpRequest-open">open</span>(DOMString <var>method</var>, DOMString <var title="">url</var>, boolean <var>async</var>, DOMString? <var>user</var>, DOMString? <var>password</var>);
1.279     avankest  438:   void <span title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader</span>(DOMString <var>header</var>, DOMString <var>value</var>);
1.271     avankest  439:   void <span title="dom-XMLHttpRequest-send">send</span>();
1.305     avankest  440:   void <span title="dom-XMLHttpRequest-send">send</span>(<span>Document</span> <var>data</var>);
1.271     avankest  441:   void <span title="dom-XMLHttpRequest-send">send</span>([AllowAny] DOMString? <var>data</var>);
1.275     avankest  442:   void <span title="dom-XMLHttpRequest-abort">abort</span>();
1.58      avankest  443: 
1.205     avankest  444:   // <a href="#response">response</a>
1.276     avankest  445:   readonly attribute unsigned short <span title="dom-XMLHttpRequest-status">status</span>;
                    446:   readonly attribute DOMString <span title="dom-XMLHttpRequest-statusText">statusText</span>;
1.278     avankest  447:   DOMString <span title="dom-XMLHttpRequest-getResponseHeader">getResponseHeader</span>(DOMString <var>header</var>);
                    448:   DOMString <span title="dom-XMLHttpRequest-getAllResponseHeaders">getAllResponseHeaders</span>();
1.276     avankest  449:   readonly attribute DOMString <span title="dom-XMLHttpRequest-responseText">responseText</span>;
1.305     avankest  450:   readonly attribute <span>Document</span> <span title="dom-XMLHttpRequest-responseXML">responseXML</span>;
1.228     avankest  451: };</pre>
1.8       avankest  452: 
1.235     avankest  453: 
1.124     avankest  454: 
1.203     avankest  455:   <h3>Origin and Base URL</h3>
                    456: 
                    457:   <p>Each <code>XMLHttpRequest</code> object has an associated
                    458:   <dfn id="xmlhttprequest-origin"><code>XMLHttpRequest</code> origin</dfn>
                    459:   and an
                    460:   <dfn id="xmlhttprequest-base-url"><code>XMLHttpRequest</code> base URL</dfn>.
                    461: 
                    462:   <p>This specification defines their values when the global object is
                    463:   represented by the <code>Window</code> object. When the
1.246     avankest  464:   <code>XMLHttpRequest</code> object is used in other contexts their values
1.203     avankest  465:   will have to be defined as appropriate for that context. That is
                    466:   considered to be out of scope for this specification.</p>
                    467: 
                    468:   <p>In environments where the global object is represented by the
                    469:   <code>Window</code> object the <code>XMLHttpRequest</code> object has an
                    470:   associated
                    471:   <dfn id="xmlhttprequest-document"><code>XMLHttpRequest</code> <code>Document</code></dfn>
                    472:   which is the <code>Document</code> object associated with the
                    473:   <code>Window</code> object for which the <code>XMLHttpRequest</code>
                    474:   interface object was created.</p>
                    475: 
                    476:   <p class="note">The
                    477:   <span><code>XMLHttpRequest</code> <code>Document</code></span> is used to
                    478:   determine the <span><code>XMLHttpRequest</code> origin</span> and
                    479:   <span><code>XMLHttpRequest</code> base URL</span> at a later stage.</p>
                    480: 
                    481: 
1.263     avankest  482: 
1.203     avankest  483:   <h3>Task Sources</h3>
1.218     avankest  484: 
1.251     avankest  485:   <p>The <span>task source</span> used by this specification is the
                    486:   <dfn><code>XMLHttpRequest</code> task source</dfn>.</p>
1.203     avankest  487: 
                    488: 
1.211     avankest  489:   <h3 id="constructors">Constructors</h3>
1.203     avankest  490: 
1.263     avankest  491:   
                    492: 
1.270     avankest  493:   <dl class="domintro">
                    494:    <dt><var title="">client</var> = new <code title="dom-XMLHttpRequest">XMLHttpRequest</code>()</dt>
                    495:    <dd>Returns a new <code>XMLHttpRequest</code> object.</dd>
                    496:    
                    497:   </dl>
1.295     avankest  498: 
1.203     avankest  499:   <p>When the
1.266     avankest  500:   <dfn id="dom-xmlhttprequest" title="dom-XMLHttpRequest"><code>XMLHttpRequest()</code></dfn>
1.203     avankest  501:   constructor is invoked, the user agent <em class="ct">must</em> return a
                    502:   new <code>XMLHttpRequest</code> object.</p>
                    503: 
1.263     avankest  504:   
1.203     avankest  505: 
1.205     avankest  506:   <h3 id="event-handler-attributes">Event Handler Attributes</h3>
                    507: 
1.248     avankest  508:   
                    509: 
1.205     avankest  510:   <p>The following is the
                    511:   <span title="event handler attributes">event handler attribute</span> (and
                    512:   its corresponding <span>event handler event type</span>) that
                    513:   <em class="ct">must</em> be supported as DOM attribute by the
                    514:   <code>XMLHttpRequest</code> object:</p>
                    515: 
                    516:   <table>
                    517:    <thead>
                    518:     <tr>
                    519:      <th><span title="event handler attributes">event handler attribute</span>
                    520:      <th><span>event handler event type</span>
                    521:    <tbody>
                    522:     <tr>
1.273     avankest  523:      <td><dfn id="handler-xhr-onreadystatechange" title="handler-xhr-onreadystatechange"><code>onreadystatechange</code></dfn>
                    524:      <td><code title="event-xhr-readystatechange">readystatechange</code></td>
1.205     avankest  525:   </table>
                    526: 
                    527: 
                    528:   <h3 id="states">States</h3>
1.295     avankest  529: 
1.277     avankest  530:   <dl class="domintro">
                    531:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-readyState">readyState</code></dt>
                    532:    <dd><p>Returns the current state.</p></dd>
                    533:   </dl>
1.203     avankest  534: 
                    535:   <p>The <code>XMLHttpRequest</code> object can be in several states. The
1.277     avankest  536:   <dfn id="dom-xmlhttprequest-readystate" title="dom-XMLHttpRequest-readyState"><code>readyState</code></dfn>
                    537:   attribute <em class="ct">must</em> return the current state, which
1.203     avankest  538:   <em class="ct">must</em> be one of the following values:</p>
                    539: 
                    540:   <dl>
1.272     avankest  541:    <dt><dfn id="dom-xmlhttprequest-unsent" title="dom-XMLHttpRequest-UNSENT"><code>UNSENT</code></dfn>
1.203     avankest  542:    (numeric value 0)</dt>
                    543:    <dd><p>The object has been constructed.</p></dd>
                    544: 
1.272     avankest  545:    <dt><dfn id="dom-xmlhttprequest-opened" title="dom-XMLHttpRequest-OPENED"><code>OPENED</code></dfn>
1.203     avankest  546:    (numeric value 1)</dt>
1.274     avankest  547:    <dd><p>The <code title="dom-XMLHttpRequest-open">open()</code> method has been successfully invoked.
1.203     avankest  548:    During this state request headers can be set using
1.279     avankest  549:    <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>
                    550:    and the request can be made using the
1.271     avankest  551:    <code title="dom-XMLHttpRequest-send">send()</code> method.</p></dd>
1.203     avankest  552: 
1.272     avankest  553:    <dt><dfn id="dom-xmlhttprequest-headers_received" title="dom-XMLHttpRequest-HEADERS_RECEIVED"><code>HEADERS_RECEIVED</code></dfn>
1.203     avankest  554:    (numeric value 2)</dt>
1.257     avankest  555:    <dd><p>All redirects (if any) have been followed and all HTTP headers of
                    556:    the final response have been received. Several response members of the
                    557:    object are now available.</p></dd>
1.203     avankest  558: 
1.272     avankest  559:    <dt><dfn id="dom-xmlhttprequest-loading" title="dom-XMLHttpRequest-LOADING"><code>LOADING</code></dfn>
1.203     avankest  560:    (numeric value 3)</dt>
                    561:    <dd><p>The <span>response entity body</span> is being received.</p></dd>
                    562: 
1.272     avankest  563:    <dt><dfn id="dom-xmlhttprequest-done" title="dom-XMLHttpRequest-DONE"><code>DONE</code></dfn>
1.203     avankest  564:    (numeric value 4)</dt>
                    565:    <dd><p>The data transfer has been completed or something went wrong
                    566:    during the transfer (e.g. infinite redirects).</p></dd>
                    567:   </dl>
                    568: 
1.272     avankest  569:   <p>The <span title="dom-XMLHttpRequest-OPENED">OPENED</span> state has an associated
1.203     avankest  570:   <dfn id="send-flag"><code>send()</code> flag</dfn> that indicates whether
1.271     avankest  571:   the <code title="dom-XMLHttpRequest-send">send()</code> method has been
                    572:   invoked. It can be either true or false and has an initial value of
                    573:   false.</p>
1.203     avankest  574: 
1.310     avankest  575:   <p>The <dfn id="error-flag">error flag</dfn> indicates some type of
                    576:   network error or abortion. It is used during the
                    577:   <span title="dom-XMLHttpRequest-DONE">DONE</span> state. It can be either
                    578:   true or false and has an initial value of false.</p>
1.203     avankest  579: 
                    580: 
1.205     avankest  581:   <h3 id="request">Request</h3>
1.203     avankest  582: 
                    583:   <p>The <code>XMLHttpRequest</code> object holds the following request
                    584:   metadata variables:</p>
                    585: 
1.204     avankest  586:   <dl>
                    587:    <dt>The <dfn>asynchronous flag</dfn></dt>
1.266     avankest  588:    <dd>True when <span title="fetch">fetching</span> is done asychronously.
                    589:    False when fetching is done synchronously.</dd>
1.204     avankest  590: 
                    591:    <dt>The <dfn>request method</dfn></dt>
1.310     avankest  592:    <dd>The HTTP method used in the request.</dd>
1.204     avankest  593: 
                    594:    <dt>The <dfn>request URL</dfn></dt>
1.312     avankest  595:    <dd>The resolved <span>URL</span> used in the request.</dd>
1.218     avankest  596: 
1.204     avankest  597:    <dt>The <dfn>request username</dfn></dt>
                    598:    <dd>The username used in the request or null if there is no
                    599:    username.</dd>
1.218     avankest  600: 
1.204     avankest  601:    <dt>The <dfn>request password</dfn></dt>
                    602:    <dd>The password used in the request or null if there is no
                    603:    password.</dd>
1.218     avankest  604: 
1.204     avankest  605:    <dt>The <dfn id="author-request-headers">author request headers</dfn></dt>
                    606:    <dd>A list consisting of HTTP header name/value pairs to be used in the
                    607:    request.</p>
1.203     avankest  608: 
1.204     avankest  609:    <dt>The <dfn>request entity body</dfn></dt>
1.310     avankest  610:    <dd>The <span>entity body</span> used in the request or null if there is
                    611:    no <span>entity body</span>.</dd>
1.295     avankest  612: 
1.248     avankest  613:    
1.204     avankest  614:   </dl>
1.203     avankest  615: 
1.248     avankest  616:   
                    617: 
1.203     avankest  618: 
                    619:   <h4>The <code title="">open()</code> method</h4>
1.295     avankest  620: 
1.269     avankest  621:   <dl class="domintro">
1.274     avankest  622:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-open">open(<var title="">method</var>,
                    623:    <var title="">url</var>, <var title="">async</var>, <var title="">user</var>,
                    624:    <var title="">password</var>)</code></dt>
1.269     avankest  625: 
1.280     avankest  626:    <dd>
                    627:     <p>Sets the <span>request method</span>, <span>request URL</span>,
                    628:     <span>asynchronous flag</span>, <span>request username</span>, and
                    629:     <span>request password</span>.</p>
1.295     avankest  630: 
1.280     avankest  631:     <p>Throws a <code>SYNTAX_ERR</code> exception if one of the following is
                    632:     true:</p>
1.295     avankest  633: 
1.280     avankest  634:     <ul>
                    635:      <li><var title="">method</var> is not a valid HTTP method.</li>
                    636:      <li><var title="">url</var> cannot be resolved.</li>
                    637:      <li><var title="">url</var> contains the <code>"user:password"</code>
                    638:      format in the <code>userinfo</code> production.</li>
                    639:     </ul>
1.295     avankest  640: 
1.280     avankest  641:     <p>Throws a <code>SECURITY_ERR</code> exception if
                    642:     <var title="">method</var> is a case-insensitive match for
                    643:     <code>CONNECT</code>, <code>TRACE</code> or <code>TRACK</code>.</p>
1.295     avankest  644: 
1.300     avankest  645:     <p>Throws an <code>INVALID_ACCESS_ERR</code> exception if either
                    646:     <var title="">user</var> or <var title="">password</var> is passed as
                    647:     argument and the <span>origin</span> of <var title="">url</var> does not
                    648:     match the <span><code>XMLHttpRequest</code> origin</span>.</p>
1.280     avankest  649:    </dd>
1.269     avankest  650:   </dl>
1.88      avankest  651: 
1.274     avankest  652:   <p>When the
                    653:   <dfn id="dom-xmlhttprequest-open" title="dom-XMLHttpRequest-open"><code>open(<var title="">method</var>, <var title="">url</var>, <var title="">async</var>, <var title="">user</var>, <var title="">password</var>)</code></dfn>
                    654:   method is invoked, the user agent <em class="ct">must</em> run these steps
                    655:   (unless otherwise indicated):</p>
1.90      avankest  656: 
1.88      avankest  657:   <ol>
1.203     avankest  658:    <li>
                    659:     <p>If the <code>XMLHttpRequest</code> object has an associated
                    660:     <span><code>XMLHttpRequest</code> <code>Document</code></span> run
                    661:     these substeps:</p>
1.90      avankest  662: 
1.203     avankest  663:     <ol>
                    664:      <li><p>If the
                    665:      <span><code>XMLHttpRequest</code> <code>Document</code></span> is not
                    666:      <span>fully active</span> raise an <code>INVALID_STATE_ERR</code>
                    667:      exception and terminate the overall set of steps.</p></li>
                    668: 
                    669:      <li><p>Let <span><code>XMLHttpRequest</code> base URL</span> be the
                    670:      <span>document base URL</span> of the
                    671:      <span><code>XMLHttpRequest</code> <code>Document</code></span>.</p></li>
                    672: 
                    673:      <li><p>Let <span><code>XMLHttpRequest</code> origin</span> be the
                    674:      <span>origin</span> of the
                    675:      <span><code>XMLHttpRequest</code> <code>Document</code></span>.</p></li>
                    676:     </ol>
                    677:    </li>
1.90      avankest  678: 
1.256     avankest  679:    <li><p>If any code point in <var>method</var> is higher than
                    680:    U+00FF LATIN SMALL LETTER Y WITH DIAERESIS or after
1.294     avankest  681:    <span title="deflate a DOMString into a byte sequence">deflating</span>
1.256     avankest  682:    <var>method</var> it does not match the
1.210     avankest  683:    <span>Method token</span> production raise a <code>SYNTAX_ERR</code>
1.256     avankest  684:    exception and terminate these steps. Otherwise let <var>method</var> be
                    685:    the result of
1.294     avankest  686:    <span title="deflate a DOMString into a byte sequence">deflating</span>
1.256     avankest  687:    <var>method</var>.</p></li> <!-- This sounds lame, but it works. -->
1.118     avankest  688: 
1.115     avankest  689:    <li>
1.256     avankest  690:     <p>If <var>method</var> is a case-insensitive match for
1.203     avankest  691:     <code>CONNECT</code>, <code>DELETE</code>, <code>GET</code>,
                    692:     <code>HEAD</code>, <code>OPTIONS</code>, <code>POST</code>,
                    693:     <code>PUT</code>, <code>TRACE</code>, or <code>TRACK</code>
1.256     avankest  694:     subtract 0x20 from each byte in the range 0x61 (ASCII a) to
                    695:     0x7A (ASCII z).</p>
1.118     avankest  696: 
1.203     avankest  697:     <p class="note">If it does not match any of the above, it is passed
                    698:     through <em>literally</em>, including in the final request.</p>
1.115     avankest  699:    </li>
1.203     avankest  700:    <!-- WebKit (and supposedly Gecko) also uppercase: COPY, INDEX, LOCK,
                    701:    M-POST, MKCOL, MOVE, PROPFIND, PROPPATCH, and UNLOCK. -->
1.118     avankest  702: 
1.111     avankest  703:    <li>
1.256     avankest  704:     <p>If <var>method</var> is a case-sensitive match for
1.259     avankest  705:     <code>CONNECT</code>, <code>TRACE</code>, or <code>TRACK</code>  raise a
                    706:     <code>SECURITY_ERR</code> exception and terminate these steps.</p>
1.117     avankest  707: 
1.203     avankest  708:     <p class="note">Allowing these methods poses a security risk.
                    709:     [<cite><span>HTTPVERBSEC</span></cite>]</p>
1.111     avankest  710:    </li>
                    711: 
1.203     avankest  712:    <li><p>Let <var title="">url</var> be a <span>URL</span>.</p></li>
                    713: 
1.209     avankest  714:    <li><p>Let <span>URL character encoding</span> of <var title="">url</var>
                    715:    be UTF-8.</p></li>
1.113     avankest  716: 
1.255     avankest  717:    <li><p><span title="Resolve a URL">Resolve</span> <var title="">url</var>
1.203     avankest  718:    relative to the <span><code>XMLHttpRequest</code> base URL</span>.
                    719:    If the algorithm returns an error raise a <code>SYNTAX_ERR</code>
                    720:    exception and terminate these steps.</p></li>
                    721: 
                    722:    <!-- Presto and Gecko override the encoding. WebKit does not. Trident
                    723:    does not support non-ASCII URLs. This matters for the <query> component,
                    724:    see HTML5. -->
                    725: 
                    726:    <li><p>Drop <code>&lt;fragment></code> from <var title="">url</var>.</p></li>
                    727: 
                    728:    <li><p>If the <code>"user:password"</code> format in the
1.301     avankest  729:    <code>userinfo</code> production is not supported for the relevant
                    730:    <code>&lt;scheme></code> and <var title="">url</var> contains this format
                    731:    raise a <code>SYNTAX_ERR</code> and terminate these steps.</p></li>
1.203     avankest  732: 
1.310     avankest  733:    <!-- XXX need to throw here for "user:password" or just "user" for
                    734:             cross-origin unless we solve this in another way -->
                    735: 
1.203     avankest  736:    <li><p>If <var title="">url</var> contains the <code>"user:password"</code>
                    737:    format let <var>temp user</var> be the user part and
                    738:    <var>temp password</var> be the password part.</p></li>
                    739: 
                    740:    <li><p>If <var title="">url</var> just contains the <code>"user"</code>
                    741:    format let <var>temp user</var> be the user part.</p></li>
                    742: 
1.211     avankest  743:    <li><p>Let <var>async</var> be the value of the <var>async</var> argument
1.266     avankest  744:    or true if it was omitted.</p></li>
1.203     avankest  745: 
                    746:    <li>
1.300     avankest  747:     <p>If the <var title="">user</var> argument was not omitted follow these
                    748:     sub steps:</p>
1.90      avankest  749: 
1.203     avankest  750:     <ol>
1.300     avankest  751:      <li><p>If <var title="">user</var> is not null and the
                    752:      <span>origin</span> of <var title="">url</var> is not
                    753:      <span>same origin</span> with the
                    754:      <span><code>XMLHttpRequest</code> origin</span> raise an
                    755:      <code>INVALID_ACCESS_ERR</code> exception and terminate the overall set
                    756:      of steps.</p></li>
1.263     avankest  757: 
1.300     avankest  758:      <li><p>Let <var>temp user</var> be <var>user</var>.</p></li>
1.203     avankest  759:     </ol>
1.88      avankest  760: 
1.203     avankest  761:     <p class="note">These steps override anything that may have been set by
                    762:     the <var title="">url</var> argument.</p>
                    763:    </li>
1.88      avankest  764: 
1.128     avankest  765:    <li>
1.300     avankest  766:     <p>If the <var title="">password</var> argument was not omitted follow
                    767:     these sub steps:</p>
1.203     avankest  768: 
                    769:     <ol>
1.300     avankest  770:      <li><p>If <var title="">password</var> is not null and the
                    771:      <span>origin</span> of <var title="">url</var> is not
                    772:      <span>same origin</span> with the
                    773:      <span><code>XMLHttpRequest</code> origin</span> raise an
                    774:      <code>INVALID_ACCESS_ERR</code> exception and terminate the overall set
                    775:      of steps.</p></li>
1.263     avankest  776: 
1.300     avankest  777:      <li><p>Let <var>temp password</var> be <var>password</var>.</p></li>
1.203     avankest  778:     </ol>
                    779: 
                    780:     <p class="note">These steps override anything that may have been set by
                    781:     the <var title="">url</var> argument.</p>
1.128     avankest  782:    </li>
1.88      avankest  783: 
1.314     avankest  784:    <li><p><span title="terminate abort()">Terminate the <code>abort()</code> algorithm</span>.</p></li>
                    785: 
                    786:    <li><p><span title="terminate send()">Terminate the <code>send()</code> algorithm</span>.</p></li>
1.203     avankest  787: 
                    788:    <li><p>The user agent <em class="ct">should</em> cancel any network
                    789:    activity for which the object is responsible.</p></li>
                    790:    <!-- we can hardly require it... -->
                    791: 
1.252     avankest  792:    <li><p>If there are any <span title="task">tasks</span> from the object's
                    793:    <span><code>XMLHttpRequest</code> task source</span> in one of the
                    794:    <span>task queues</span>, then remove those tasks.</p></li>
                    795: 
1.203     avankest  796:    <li>
                    797:     <p>Set variables associated with the object as follows:</p>
                    798: 
                    799:     <ul>
                    800: 
                    801:      <li><p>Set the <span>request method</span> to <var>method</var>.</p></li>
                    802: 
                    803:      <li><p>Set the <span>request URL</span> to <var title="">url</var>.</p></li>
1.58      avankest  804: 
1.303     avankest  805:      <li><p>Set the <span>asynchronous flag</span> to the value of
                    806:      <var>async</var>.</p></li>
                    807: 
1.203     avankest  808:      <li><p>Set the <span>request username</span> to <var>temp user</var>.</p></li>
1.12      avankest  809: 
1.203     avankest  810:      <li><p>Set the <span>request password</span> to <var>temp password</var>.</p></li>
1.12      avankest  811: 
1.303     avankest  812:      <li><p>Empty the list of <span>author request headers</span>.</p>
                    813: 
1.304     avankest  814:      
                    815: 
1.303     avankest  816:      <li><p>Set the <span><code>send()</code> flag</span> to false.</p></li>
                    817: 
                    818:      <li><p>Set <span>response entity body</span> to null.</p></li>
1.203     avankest  819:     </ul>
                    820:    </li>
1.58      avankest  821: 
1.308     avankest  822:    <li><p>Switch the state to
1.272     avankest  823:    <span title="dom-XMLHttpRequest-OPENED">OPENED</span>.</p></li>
1.58      avankest  824: 
1.203     avankest  825:    <li><p><span>Dispatch a <code>readystatechange</code> event</span>.</p></li>
                    826:   </ol>
1.280     avankest  827: 
1.58      avankest  828: 
1.14      avankest  829: 
1.203     avankest  830:   <h4>The <code title="">setRequestHeader()</code> method</h4>
1.12      avankest  831: 
1.270     avankest  832:   <dl class="domintro">
1.279     avankest  833:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader(<var title="">header</var>, <var title="">value</var>)</code></dt>
1.280     avankest  834: 
1.270     avankest  835:    <dd>
                    836:     <p>Appends an header to the list of
1.310     avankest  837:     <span>author request headers</span>, or if <var>header</var> is already
                    838:     in the list of <span>author request headers</span>, combines its value
                    839:     with <var>value</var>.</p>
1.280     avankest  840: 
                    841:     <p>Throws an <code>INVALID_STATE_ERR</code> exception if the state is
                    842:     not <span title="dom-XMLHttpRequest-OPENED">OPENED</span> or if the
                    843:     <span><code>send()</code> flag</span> is true.</p>
                    844: 
                    845:     <p>Throws a <code>SYNTAX_ERR</code> exception if
                    846:     <var title="">header</var> is not a valid HTTP header field name or if
                    847:     <var title="">value</var> is not a valid HTTP header field value.</p>
1.270     avankest  848:    </dd>
                    849:   </dl>
1.45      avankest  850: 
1.279     avankest  851:   <p class="note">As indicated in the algorithm below certain headers cannot
                    852:   be set and are left up to the user agent. In addition there are certain
                    853:   other headers the user agent will take control of if they are not set by
                    854:   the author as indicated at the end of the
1.271     avankest  855:   <code title="dom-XMLHttpRequest-send">send()</code> method section.</p>
1.203     avankest  856: 
1.248     avankest  857:   
                    858: 
1.203     avankest  859:   <p>When the
1.279     avankest  860:   <dfn id="dom-xmlhttprequest-setrequestheader" title="dom-XMLHttpRequest-setRequestHeader"><code>setRequestHeader(<var title="">header</var>, <var title="">value</var>)</code></dfn>
                    861:   method is invoked, the user agent <em class="ct">must</em> run these
                    862:   steps:</p>
1.14      avankest  863: 
1.203     avankest  864:   <ol>
1.272     avankest  865:    <li><p>If the state is not <span title="dom-XMLHttpRequest-OPENED">OPENED</span> raise
1.203     avankest  866:    an <code>INVALID_STATE_ERR</code> exception and terminate these
                    867:    steps.</p></li>
                    868: 
                    869:    <li><p>If the <span><code>send()</code> flag</span> is true raise an
                    870:    <code>INVALID_STATE_ERR</code> exception and terminate these
                    871:    steps.</p></li>
                    872: 
1.256     avankest  873:    <li><p>If any code point in <var>header</var> is higher than
                    874:    U+00FF LATIN SMALL LETTER Y WITH DIAERESIS or after
1.294     avankest  875:    <span title="deflate a DOMString into a byte sequence">deflating</span>
1.256     avankest  876:    <var>header</var> it does not match the
                    877:    <span>field-name</span> production raise a <code>SYNTAX_ERR</code>
                    878:    exception and terminate these steps. Otherwise let <var>header</var> be
                    879:    the result of
1.294     avankest  880:    <span title="deflate a DOMString into a byte sequence">deflating</span>
1.256     avankest  881:    <var>header</var>.</p></li> <!-- This sounds lame, but it works. -->
1.203     avankest  882: 
                    883:    <li>
1.256     avankest  884:     <p>If any code point in <var>value</var> is higher than
                    885:     U+00FF LATIN SMALL LETTER Y WITH DIAERESIS or after
1.294     avankest  886:     <span title="deflate a DOMString into a byte sequence">deflating</span>
1.256     avankest  887:     <var>value</var> it does not match the
                    888:     <span>field-value</span> production raise a <code>SYNTAX_ERR</code>
                    889:     exception and terminate these steps. Otherwise let <var>value</var> be
                    890:     the result of
1.294     avankest  891:     <span title="deflate a DOMString into a byte sequence">deflating</span>
1.256     avankest  892:     <var>value</var>.</p> <!-- This sounds lame, but it works. -->
1.203     avankest  893: 
                    894:     <p class="note">The empty string is legal and represents the empty
                    895:     header value.</p>
                    896:    </li>
                    897: 
                    898:    <li>
1.259     avankest  899:     <p>Terminate these steps if <var>header</var> is a case-insensitive
                    900:     match for one of the following headers:</p>
1.203     avankest  901: 
                    902:     <ul>
                    903:      <li><code>Accept-Charset</code></li>
                    904:      <li><code>Accept-Encoding</code></li>
                    905:      <li><code>Connection</code></li>
                    906:      <li><code>Content-Length</code></li>
                    907:      <li><code>Cookie</code></li>
                    908:      <li><code>Cookie2</code></li>
                    909:      <li><code>Content-Transfer-Encoding</code></li>
                    910:      <li><code>Date</code></li>
                    911:      <li><code>Expect</code></li>
                    912:      <li><code>Host</code></li>
                    913:      <li><code>Keep-Alive</code></li>
                    914:      <li><code>Referer</code></li>
                    915:      <li><code>TE</code></li>
                    916:      <li><code>Trailer</code></li>
                    917:      <li><code>Transfer-Encoding</code></li>
                    918:      <li><code>Upgrade</code></li>
                    919:      <li><code>User-Agent</code></li>
                    920:      <li><code>Via</code></li>
                    921:     </ul>
1.96      avankest  922: 
1.256     avankest  923:     <p>&hellip; or if the start of <var>header</var> is a case-insensitive
                    924:     match for <code>Proxy-</code> or <code>Sec-</code> (including when
                    925:     <var>header</var> is just <code>Proxy-</code> or <code>Sec-</code>).</p>
1.203     avankest  926: 
1.280     avankest  927:     <p class="note">The above headers are controlled by the user agent to
                    928:     let it control those aspects of transport. This guarantees data
                    929:     integrity to some extent. Header names starting with <code>Sec-</code>
                    930:     are not allowed to be set to allow new headers to be minted that are
                    931:     guaranteed not to come from <code>XMLHttpRequest</code>.</p>
1.203     avankest  932:    </li>
1.14      avankest  933: 
1.203     avankest  934:    <li><p>If <var>header</var> is not in the
                    935:    <span>author request headers</span> list append <var>header</var> with
                    936:    its associated <var>value</var> to the list and terminate these
                    937:    steps.</p></li>
                    938: 
                    939:    <li><p>If <var>header</var> is in the <span>author request headers</span>
                    940:    list either use multiple headers, combine the values or use a combination
                    941:    of those (section 4.2, RFC 2616).
                    942:    [<cite><span>RFC2616</span></cite>]</p></li>
                    943:    <!-- XXX it seems UAs always combine the values -->
                    944:   </ol>
1.45      avankest  945: 
1.271     avankest  946:   <p class="note">See also the
                    947:   <code title="dom-XMLHttpRequest-send">send()</code> method regarding user
1.203     avankest  948:   agent header handling for caching, authentication, proxies, and
                    949:   cookies.</p>
1.14      avankest  950: 
1.203     avankest  951:   <div class="example">
1.312     avankest  952:    <p>Some simple code demonstrating what happens when setting the same
                    953:    header twice:</p>
                    954: 
1.203     avankest  955:    <pre><code>// The following script:
1.14      avankest  956: var client = new XMLHttpRequest();
                    957: client.open('GET', 'demo.cgi');
                    958: client.setRequestHeader('X-Test', 'one');
                    959: client.setRequestHeader('X-Test', 'two');
                    960: client.send();
                    961: 
1.312     avankest  962: // &hellip;results in the following header being sent:
                    963: X-Test: one, two</code></pre>
1.203     avankest  964:   </div>
1.255     avankest  965: 
1.248     avankest  966:   
1.218     avankest  967: 
1.203     avankest  968: 
                    969:   <h4>The <code title="">send()</code> method</h4>
1.12      avankest  970: 
1.271     avankest  971:   <dl class="domintro">
                    972:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-send">send(<var title="">data</var>)</code></dt>
1.280     avankest  973:    <dd>
                    974:     <p>Initiates the request. The optional argument provides the
                    975:     <span>request entity body</span>. The argument is ignored if
                    976:     <span>request method</span> is <code>GET</code> or
                    977:     <code>HEAD</code>.</p>
                    978: 
                    979:     <p>Throws an <code>INVALID_STATE_ERR</code> exception if the state is
                    980:     not <span title="dom-XMLHttpRequest-OPENED">OPENED</span> or if the
                    981:     <span><code>send()</code> flag</span> is true.</p>
                    982:    </dd>
1.271     avankest  983:   </dl>
1.203     avankest  984: 
                    985:   <p>When the
1.271     avankest  986:   <dfn id="dom-xmlhttprequest-send" title="dom-XMLHttpRequest-send"><code>send(<var>data</var>)</code></dfn>
1.314     avankest  987:   method is invoked, the user agent <em class="ct">must</em> run these steps
                    988:   (unless otherwise noted). This algorithm can be
                    989:   <dfn title="terminate send()">terminated</dfn> by invoking the
                    990:   <code title="dom-XMLHttpRequest-open">open()</code> or
                    991:   <code title="dom-XMLHttpRequest-abort">abort()</code> method. When it is
                    992:   <span title="terminate send()">terminated</span> the user agent
                    993:   <em class="ct">must</em> terminate the algorithm after finishing the step
                    994:   it is on.</p>
                    995: 
                    996:   <p class="note">The <code title="dom-XMLHttpRequest-send">send()</code>
                    997:   algorithm can only be terminated when the <span>asynchronous flag</span>
                    998:   is true and only after the method call has returned.</p>
1.181     avankest  999: 
1.203     avankest 1000:   <ol>
1.272     avankest 1001:    <li><p>If the state is not <span title="dom-XMLHttpRequest-OPENED">OPENED</span> raise
1.203     avankest 1002:    an <code>INVALID_STATE_ERR</code> exception and terminate these
                   1003:    steps.</p></li>
                   1004: 
                   1005:    <li><p>If the <span><code>send()</code> flag</span> is true raise an
                   1006:    <code>INVALID_STATE_ERR</code> exception and terminate these
                   1007:    steps.</p></li>
1.58      avankest 1008: 
1.203     avankest 1009:    <li>
1.280     avankest 1010:     <p>If the <span>request method</span> is a case-sensitive match for
                   1011:     <code>GET</code> or <code>HEAD</code> act as if <var title="">data</var>
                   1012:     is null.</p>
1.295     avankest 1013: 
1.232     avankest 1014:     <p>If the <var>data</var> argument has been omitted or is
1.239     avankest 1015:     null, do not include a <span>request entity body</span>
1.232     avankest 1016:     and go to the next step.</p>
1.248     avankest 1017: 
                   1018:     <p>Otherwise, let <var>encoding</var> be null, <var>mime type</var> be
                   1019:     null, and then follow these rules:</p>
1.203     avankest 1020: 
                   1021:     <dl class="switch">
1.248     avankest 1022:      
1.295     avankest 1023: 
1.248     avankest 1024:      <dt>If <var>data</var> is a <code>Document</code>
1.203     avankest 1025: 
                   1026:      <dd>
1.232     avankest 1027:       <p>Let <var>encoding</var> be the <span>preferred MIME name</span> of
                   1028:       the
                   1029:       <span title="document's character encoding">character encoding</span>
                   1030:       of <var>data</var>. If <var>encoding</var> is UTF-16 change it to
                   1031:       UTF-8.</p>
1.295     avankest 1032: 
1.302     avankest 1033:       <p>Let <var>mime type</var> be "<code>application/xml</code>" or
                   1034:       "<code>text/html</code>" if <code>Document</code> is flagged as
                   1035:       <span title="HTML documents">HTML document</span>, followed by
                   1036:       "<code>;charset=</code>", followed by <var>encoding</var>.</p>
1.232     avankest 1037: 
                   1038:       <p>Let the <span>request entity body</span> be the result of getting
                   1039:       the <code title="dom-innerHTML">innerHTML</code> attribute on
1.233     avankest 1040:       <var>data</var>
                   1041:       <span title="convert a DOMString to a sequence of Unicode characters">converted to Unicode</span>
                   1042:       and encoded as <var>encoding</var>. Re-raise any exception this
                   1043:       raises.</p>
1.218     avankest 1044: 
1.233     avankest 1045:       <p class="note">In particular, if the document cannot be serialized an
1.217     avankest 1046:       <code>INVALID_STATE_ERR</code> exception is raised.</p>
                   1047: 
1.203     avankest 1048:       <p class="note">Subsequent changes to the <code>Document</code> have
                   1049:       no effect on what is submitted.</p>
                   1050:      </dd>
1.237     avankest 1051: 
1.248     avankest 1052:      <dt>If <var>data</var> is a <code>DOMString</code></dt>
1.237     avankest 1053: 
1.248     avankest 1054:      <dd>
                   1055:       <p>Let <var>encoding</var> be UTF-8.</p>
1.295     avankest 1056: 
1.248     avankest 1057:       <p>Let <var>mime type</var> be "<code>text/plain;charset=UTF-8</code>".</p>
                   1058: 
                   1059:       <p>Let the <span>request entity body</span> be <var>data</var>
                   1060:       <span title="convert a DOMString to a sequence of Unicode characters">converted to Unicode</span>
                   1061:       and encoded as UTF-8.</p>
                   1062:      </dd>
                   1063: 
                   1064:      
1.203     avankest 1065:     </dl>
1.58      avankest 1066: 
1.232     avankest 1067:     <p>If a <code>Content-Type</code> header is set using
1.279     avankest 1068:     <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>
                   1069:     whose value is a <span>valid MIME type</span> and has a
                   1070:     <code>charset</code> parameter whose value is not a case-insensitive
                   1071:     match for <var title="">encoding</var>, and <var title="">encoding</var>
                   1072:     is not null, set all the <code>charset</code> parameters of the
                   1073:     <code>Content-Type</code> header to <var title="">encoding</var>.</p>
1.232     avankest 1074: 
                   1075:     <p>If no <code>Content-Type</code> header has been set using
1.279     avankest 1076:     <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>
                   1077:     and <var title="">mime type</var> is not null set a
                   1078:     <code>Content-Type</code> request header with as value
                   1079:     <var title="">mime type</var>.</p>
1.236     avankest 1080: 
                   1081:     <!-- reminder: if we ever change this to always include charset it has
                   1082:     to be included as the first parameter for compatibility reasons -->
1.203     avankest 1083:    </li>
1.202     avankest 1084: 
1.203     avankest 1085:    <li><p>If the <span>asynchronous flag</span> is false release the
                   1086:    <span>storage mutex</span>.</p></li>
1.103     avankest 1087: 
1.248     avankest 1088:    
                   1089: 
1.203     avankest 1090:    <li><p>Set the <span>error flag</span> to false.</p></li>
1.218     avankest 1091: 
1.248     avankest 1092:    
                   1093: 
1.211     avankest 1094:    <li>
                   1095:     <p>If the <span>asynchronous flag</span> is true run these substeps:</p>
1.218     avankest 1096: 
1.211     avankest 1097:     <ol>
1.217     avankest 1098:      <li><p>Set the <span><code>send()</code> flag</span> to true.</p></li>
                   1099: 
1.211     avankest 1100:      <li>
                   1101:       <p><span>Dispatch a <code>readystatechange</code> event</span>.</p>
1.145     avankest 1102: 
1.211     avankest 1103:       <p class="note">The state does not change. The event is dispatched for
                   1104:       historical reasons.</p>
                   1105:      </li>
                   1106: 
1.248     avankest 1107:      
                   1108: 
1.271     avankest 1109:      <li><p>Return the <code title="dom-XMLHttpRequest-send">send()</code>
                   1110:      method call, but continue running the steps in this algorithm.</p></li>
1.211     avankest 1111:     </ol>
                   1112:    </li>
1.218     avankest 1113: 
1.203     avankest 1114:    <li>
1.300     avankest 1115:     <dl class="switch">
                   1116:      <dt>If the <span><code>XMLHttpRequest</code> origin</span> and the
                   1117:      <span>request URL</span> are <span>same origin</span></dt>
                   1118: 
                   1119:      <dd>
                   1120:       <p>These are the <dfn>same-origin request steps</dfn>.</p>
1.211     avankest 1121: 
1.261     avankest 1122:       <p><span>Fetch</span> the <span>request URL</span> from
1.260     avankest 1123:       <i title="">origin</i>
                   1124:       <span><code>XMLHttpRequest</code> origin</span>, with the
                   1125:       <i title="">synchronous flag</i> set if the
                   1126:       <span>asynchronous flag</span> is false, using HTTP method
1.248     avankest 1127:       <span>request method</span>, user <span>request username</span> (if
                   1128:       non-null) and password <span>request password</span> (if non-null),
                   1129:       taking into account the <span>request entity body</span>, list of
                   1130:       <span>author request headers</span> and the rules listed at the end of
                   1131:       this section.</p>
                   1132: 
                   1133:       <dl class="switch">
                   1134:        <dt>If the <span>asynchronous flag</span> is false</dt>
                   1135:        <dd>
                   1136:         <p>While making the request also follow the
                   1137:         <span>same-origin request event rules</span>.</p>
                   1138: 
                   1139:         <!--
                   1140:          This cannot involve any task queue whatsoever because that would
                   1141:          mean other tasks on the task queue might get processed as well
                   1142:          which is counter to the whole idea of doing things synchronous.
                   1143:         -->
                   1144: 
1.271     avankest 1145:         <p class="note">The
                   1146:         <code title="dom-XMLHttpRequest-send">send()</code> method call will
                   1147:         now be returned by virtue of this algorithm ending.</p>
1.248     avankest 1148:        </dd>
                   1149: 
                   1150:        <dt>If the <span>asynchronous flag</span> is true</dt>
                   1151:        <dd>
1.300     avankest 1152:         
1.248     avankest 1153: 
                   1154:         <p>While processing the request, as data becomes available and when
                   1155:         the user interferes with the request,
1.255     avankest 1156:         <span title="queue a task">queue tasks</span> to update the
                   1157:         <span>response entity body</span> and follow the
1.254     avankest 1158:         <span>same-origin request event rules</span>.</p>
1.248     avankest 1159:        </dd>
                   1160:       </dl>
1.300     avankest 1161:      </dd>
                   1162: 
                   1163:      <dt>Otherwise</dt>
                   1164:      <dd>
                   1165:       <p>These are the <dfn>cross-origin request steps</dfn>.</p>
                   1166: 
                   1167:       
                   1168:       <p>This is a <span>network error</span>.</p>
                   1169:       
                   1170: 
                   1171:       
                   1172:      </dd>
                   1173:     </dl>
1.203     avankest 1174:    </li>
                   1175:   </ol>
1.60      avankest 1176: 
1.203     avankest 1177:   <hr>
                   1178: 
1.227     avankest 1179:   <p>If the user agent allows the end user to configure a proxy it
1.248     avankest 1180:   <em class="ct">should</em> modify the request appropriately; i.e., connect
                   1181:   to the proxy host instead of the origin server, modify the
                   1182:   <code>Request-Line</code> and send <code>Proxy-Authorization</code>
                   1183:   headers as specified.</p>
1.295     avankest 1184: 
1.262     avankest 1185:   <hr>
1.212     avankest 1186: 
1.218     avankest 1187:   <p>If the user agent supports HTTP Authentication and
1.262     avankest 1188:   <code title="http-authorization">Authorization</code> is not in the list
                   1189:   of <span>author request headers</span>, it <em class="ct">should</em>
1.218     avankest 1190:   consider requests originating from the <code>XMLHttpRequest</code> object
                   1191:   to be part of the protection space that includes the accessed URIs and
1.262     avankest 1192:   send <code title="http-authorization">Authorization</code> headers and
                   1193:   handle <code>401 Unauthorized</code> requests appropriately.</p>
                   1194: 
                   1195:   <p>If authentication fails,
1.311     avankest 1196:   <span><code>XMLHttpRequest</code> origin</span> and the
                   1197:   <span>request URL</span> are <span>same origin</span>,
1.262     avankest 1198:   <code title="http-authorization">Authorization</code> is not in the list
                   1199:   of <span>author request headers</span>, <span>request username</span> is
                   1200:   null, and <span>request password</span> is null, user agents
                   1201:   <em class="ct">should</em> prompt the end user for their username and
                   1202:   password.</p>
1.295     avankest 1203: 
1.311     avankest 1204:   <p>Otherwise, if authentication fails, user agents
1.262     avankest 1205:   <em class="ct">must not</em> prompt the end user for their username and
                   1206:   password. [<cite><span>RFC2617</span></cite>]</p>
1.212     avankest 1207: 
1.311     avankest 1208:   <p class="note">End users are not prompted for various cases so that
                   1209:   authors can implement their own user interface.</p>
1.295     avankest 1210: 
1.262     avankest 1211:   <hr>
1.212     avankest 1212: 
                   1213:   <p>If the user agent supports HTTP State Management it
                   1214:   <em class="ct">should</em> persist, discard and send cookies (as received
1.297     avankest 1215:   in the <code>Set-Cookie</code> response header, and sent in the
                   1216:   <code>Cookie</code> header) as applicable.
1.212     avankest 1217:   [<cite><span>COOKIES</span></cite>]</p>
1.295     avankest 1218: 
1.262     avankest 1219:   <hr>
1.212     avankest 1220: 
                   1221:   <p>If the user agent implements a HTTP cache it <em class="ct">should</em>
1.248     avankest 1222:   respect <code>Cache-Control</code> request headers set by the
1.279     avankest 1223:   <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>
                   1224:   (e.g., <code>Cache-Control: no-cache</code> bypasses the cache). It
                   1225:   <em class="ct">must not</em> send <code>Cache-Control</code> or
                   1226:   <code>Pragma</code> request headers automatically unless the end user
                   1227:   explicitly requests such behavior (e.g. by reloading the page).</p>
1.212     avankest 1228: 
                   1229:   <p>For <code>304 Not Modified</code> responses that are a result of a
                   1230:   user agent generated conditional request the user agent
                   1231:   <em class="ct">must</em> act as if the server gave a <code>200 OK</code>
                   1232:   response with the appropriate content. The user agent
1.279     avankest 1233:   <em class="ct">must</em> allow
                   1234:   <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>
                   1235:   to override automatic cache validation by setting request headers (e.g.
1.248     avankest 1236:   <code>If-None-Match</code> or <code>If-Modified-Since</code>), in which
1.212     avankest 1237:   case <code>304 Not Modified</code> responses <em class="ct">must</em> be
                   1238:   passed through. [<cite><span>RFC2616</span></cite>]</p>
1.295     avankest 1239: 
1.262     avankest 1240:   <hr>
1.212     avankest 1241: 
                   1242:   <p>If the user agent implements server-driven content-negotiation
1.298     avankest 1243:   it <em class="ct">must</em> follow these constraints for the
                   1244:   <code>Accept</code> and <code>Accept-Language</code> request headers:</p>
1.231     avankest 1245: 
                   1246:   <ul>
                   1247:    <li><p>Both headers <em class="ct">must not</em> be modified if they are
1.279     avankest 1248:    already set through
                   1249:    <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>.</p></li>
1.255     avankest 1250: 
1.279     avankest 1251:    <li><p>If not set through
                   1252:    <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>
1.255     avankest 1253:    <code>Accept-Language</code> <em class="ct">should</em> be set as
1.231     avankest 1254:    appropriate.</p></li>
                   1255: 
1.279     avankest 1256:    <li><p>If not set through
                   1257:    <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>
1.231     avankest 1258:    <code>Accept</code> <em class="ct">must</em> be set with as value
                   1259:    <code>*/*</code>.</p></li>
                   1260:   </ul>
                   1261: 
                   1262:   <p>Responses <em class="ct">must</em> have the content-encodings
                   1263:   automatically decoded. [<cite><span>RFC2616</span></cite>]</p>
1.212     avankest 1264: 
1.262     avankest 1265:   <hr>
                   1266: 
1.212     avankest 1267:   <p>Besides the <span>author request headers</span> user agents
                   1268:   <em class="ct">should not</em> include additional request headers other
1.248     avankest 1269:   than those mentioned above or other than those authors are not allowed to
1.279     avankest 1270:   set using
                   1271:   <code title="dom-XMLHttpRequest-setRequestHeader">setRequestHeader()</code>.
                   1272:   This ensures that authors have a reasonably predictable API.</p>
1.218     avankest 1273: 
1.212     avankest 1274: 
                   1275:   <h4>Infrastructure for the <code title="">send()</code> method</h4>
1.216     avankest 1276: 
1.219     avankest 1277:   <p>The <dfn>same-origin request event rules</dfn> are as follows:</p>
1.118     avankest 1278: 
1.203     avankest 1279:   <dl class="switch">
1.316     avankest 1280:    <dt>If the response has an HTTP status code of 301, 302, 303, or 307</dt>
1.203     avankest 1281:    <dd>
1.300     avankest 1282:     <p>If the redirect violates infinite loop precautions this is a
                   1283:     <span>network error</span>.</p>
                   1284: 
                   1285:     <p>Otherwise, run these steps:</p>
                   1286: 
                   1287:     <ol>
                   1288:      <li><p>Set the <span>request URL</span> to the <span>URL</span>
                   1289:      conveyed by the <code>Location</code> header.</p></li>
                   1290: 
                   1291:      <li><p>If the <span><code>XMLHttpRequest</code> origin</span> and the
                   1292:      <span>origin</span> of <span>request URL</span> are
                   1293:      <span>same origin</span> transparently follow the redirect while
                   1294:      observing the <span>same-origin request event rules</span>.</p></li>
1.295     avankest 1295: 
1.300     avankest 1296:      <li><p>Otherwise, follow the <span>cross-origin request steps</span>
                   1297:      and terminate the steps for this algorithm.</p></li>
                   1298:     </ol>
1.203     avankest 1299: 
                   1300:     <p class="note">HTTP places requirements on the user agent regarding the
1.204     avankest 1301:     preservation of the <span>request method</span> and
1.248     avankest 1302:     <span>request entity body</span> during redirects, and also requires end
                   1303:     users to be notified of certain kinds of automatic redirections.</p>
1.203     avankest 1304:     <!-- XXX HTTP needs fixing here -->
1.213     avankest 1305:    </dd>
1.121     avankest 1306: 
1.285     avankest 1307:    <dt>If the end user cancels the request</dt>
1.213     avankest 1308:    <dd><p>This is an <span>abort error</span>.</p></dd>
1.60      avankest 1309: 
1.285     avankest 1310:    <dt>If there is a network error</dt>
1.213     avankest 1311:    <dd>
                   1312:     <p>In case of DNS errors, TLS negotiation failure, or other type of
                   1313:     network errors, this is a <span>network error</span>. Do not request any
1.227     avankest 1314:     kind of end user interaction.</p>
1.121     avankest 1315: 
1.213     avankest 1316:     <p class="note">This does not include HTTP responses that indicate
                   1317:     some type of error, such as HTTP status code 410.</p>
                   1318:    </dd>
1.60      avankest 1319: 
1.248     avankest 1320:    
                   1321: 
1.306     avankest 1322:    <dt>Once all HTTP headers have been received, the
1.316     avankest 1323:    <span>asynchronous flag</span> is true, and the HTTP status code of the
                   1324:    response is not 301, 302, 303, or 307</dt>
1.284     avankest 1325:    <dd><p><span>Switch to the HEADERS_RECEIVED state</span>.</p></dd>
1.186     avankest 1326: 
1.220     avankest 1327:    <dt>Once the first byte (or more) of the
                   1328:    <span>response entity body</span> has been received and the
                   1329:    <span>asynchronous flag</span> is true</dt>
                   1330:    <dt>If there is no <span>response entity body</span> and the
1.213     avankest 1331:    <span>asynchronous flag</span> is true</dt>
1.284     avankest 1332:    <dd><p><span>Switch to the LOADING state</span>.</p></dd>
1.295     avankest 1333: 
1.220     avankest 1334:    <dt>Once the whole <span>response entity body</span> has been
                   1335:    received</dt>
1.296     avankest 1336:    <dt>If there is no <span>response entity body</span> and the state is
                   1337:    <span title="dom-XMLHttpRequest-LOADING">LOADING</span></dt>
1.224     avankest 1338:    <dt>If there is no <span>response entity body</span> and the
1.296     avankest 1339:    <span>asynchronous flag</span> is false</dt>
1.284     avankest 1340:    <dd><p><span>Switch to the DONE state</span>.</p></dd>
1.213     avankest 1341:   </dl>
1.218     avankest 1342: 
1.248     avankest 1343:   
                   1344: 
1.213     avankest 1345:   <hr>
1.218     avankest 1346: 
1.241     avankest 1347:   <p>When something is said to be a <dfn>network error</dfn> run the
                   1348:   <span>request error</span> steps for exception
                   1349:   <code>NETWORK_ERR</code>.</p>
                   1350: 
                   1351:   <p>When something is said to be an <dfn>abort error</dfn> run the
                   1352:   <span>request error</span> steps for exception
                   1353:   <code>ABORT_ERR</code>.</p>
1.60      avankest 1354: 
1.248     avankest 1355:   
                   1356: 
1.242     avankest 1357:   <p>When something is said to be a <dfn>request error</dfn> for
1.248     avankest 1358:   exception <var>exception</var> run these
                   1359:   steps:</p>
1.12      avankest 1360: 
1.213     avankest 1361:   <ol>
1.254     avankest 1362:    <li><p>The user agent <em class="ct">should</em> cancel any network
                   1363:    activity for which the object is responsible.</p></li>
                   1364: 
                   1365:    <li><p>If there are any <span title="task">tasks</span> from the object's
                   1366:    <span><code>XMLHttpRequest</code> task source</span> in one of the
                   1367:    <span>task queues</span>, then remove those tasks.</p></li>
1.250     avankest 1368: 
1.213     avankest 1369:    <li><p>Set the the <span>error flag</span> to true.</p></li>
1.12      avankest 1370: 
1.272     avankest 1371:    <li><p>Switch the state to <span title="dom-XMLHttpRequest-DONE">DONE</span>.</p></li>
1.203     avankest 1372: 
1.241     avankest 1373:    <li><p>If the <span>asynchronous flag</span> is false raise an
                   1374:    <var>exception</var> exception and terminate the overall set of
1.213     avankest 1375:    steps.</p></li>
1.203     avankest 1376: 
1.248     avankest 1377:    <li>
1.249     avankest 1378:     <p><span>Dispatch a <code>readystatechange</code> event</span>.</p>
1.248     avankest 1379: 
                   1380:     <p class="note">At this point it is clear that the
                   1381:     <span>asynchronous flag</span> is true.</p>
                   1382:    </li>
                   1383: 
                   1384:    
1.213     avankest 1385:   </ol>
1.203     avankest 1386: 
1.248     avankest 1387:   
                   1388:   <p class="note">A future version of this specification will dispatch an
1.273     avankest 1389:   <code title="event-xhr-error">error</code>/<code>abort</code> event here as well. (Depending on
1.248     avankest 1390:   the type of error.)</p>
                   1391:   
1.203     avankest 1392: 
1.213     avankest 1393:   <hr>
1.203     avankest 1394: 
1.213     avankest 1395:   <p>When it is said to
1.284     avankest 1396:   <dfn id="switch-headers-received">switch to the HEADERS_RECEIVED state</dfn>
1.213     avankest 1397:   run these steps:</p>
1.203     avankest 1398: 
1.213     avankest 1399:   <ol>
1.272     avankest 1400:    <li><p>Switch the state to <span title="dom-XMLHttpRequest-HEADERS_RECEIVED">HEADERS_RECEIVED</span>.</p></li>
1.203     avankest 1401: 
1.249     avankest 1402:    <li><p><span>Dispatch a <code>readystatechange</code> event</span>.</p></li>
1.213     avankest 1403:   </ol>
1.218     avankest 1404: 
1.213     avankest 1405:   <p>When it is said to
1.284     avankest 1406:   <dfn id="switch-loading">switch to the LOADING state</dfn> run these
1.213     avankest 1407:   steps:</p>
1.218     avankest 1408: 
1.213     avankest 1409:   <ol>
1.272     avankest 1410:    <li><p>Switch the state to <span title="dom-XMLHttpRequest-LOADING">LOADING</span>.</p></li>
1.203     avankest 1411: 
1.249     avankest 1412:    <li><p><span>Dispatch a <code>readystatechange</code> event</span>.</p></li>
1.213     avankest 1413:   </ol>
1.218     avankest 1414: 
1.216     avankest 1415:   <p>When it is said to
1.284     avankest 1416:   <dfn id="switch-done">switch to the DONE state</dfn> run these steps:</p>
1.218     avankest 1417: 
1.216     avankest 1418:   <ol>
1.255     avankest 1419:    <li><p>If the <span>asynchronous flag</span> is false update the
                   1420:    <span>response entity body</span>.</p></li>
                   1421: 
1.272     avankest 1422:    <li><p>Switch the state to <span title="dom-XMLHttpRequest-DONE">DONE</span>.</p></li>
1.216     avankest 1423: 
1.248     avankest 1424:    <li><p><span>Dispatch a <code>readystatechange</code> event</span>.</p></li>
                   1425: 
1.220     avankest 1426:    
1.216     avankest 1427:   </ol>
1.218     avankest 1428: 
1.248     avankest 1429:   
                   1430: 
1.203     avankest 1431: 
                   1432:   <h4>The <code title="">abort()</code> method</h4>
1.295     avankest 1433: 
1.275     avankest 1434:   <dl class="domintro">
                   1435:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-abort">abort()</code></dt>
                   1436:    <dd>Cancels any network activity.</dd>
                   1437:   </dl>
1.203     avankest 1438: 
1.275     avankest 1439:   <p>When the
                   1440:   <dfn id="dom-xmlhttprequest-abort" title="dom-XMLHttpRequest-abort"><code>abort()</code></dfn>
                   1441:   method is invoked, the user agent <em class="ct">must</em> run these steps
1.314     avankest 1442:   (unless otherwise noted). This algorithm can be
                   1443:   <dfn title="terminate abort()">terminated</dfn> by invoking the
                   1444:   <code title="dom-XMLHttpRequest-open">open()</code> method. When it is
                   1445:   <span title="terminate abort()">terminated</span> the user agent
                   1446:   <em class="ct">must</em> terminate the algorithm after finishing the step
                   1447:   it is on.</p>
                   1448: 
                   1449:   <p class="note">The <code title="dom-XMLHttpRequest-abort">abort()</code>
                   1450:   algorithm can only be terminated by invoking
                   1451:   <code title="dom-XMLHttpRequest-open">open()</code> from an event
                   1452:   handler.</p>
1.12      avankest 1453: 
1.203     avankest 1454:   <ol>
1.314     avankest 1455:    <li><p><span title="terminate send()">Terminate the <code>send()</code> algorithm</span>.</p></li>
1.203     avankest 1456: 
                   1457:    <li><p>The user agent <em class="ct">should</em> cancel any network
                   1458:    activity for which the object is responsible.</p></li>
1.252     avankest 1459: 
                   1460:    <li><p>If there are any <span title="task">tasks</span> from the object's
                   1461:    <span><code>XMLHttpRequest</code> task source</span> in one of the
                   1462:    <span>task queues</span>, then remove those tasks.</p></li>
1.203     avankest 1463: 
                   1464:    <li><p>Set the <span>error flag</span> to true.</p></li>
                   1465: 
                   1466:    <li>
1.272     avankest 1467:     <p>If the state is <span title="dom-XMLHttpRequest-UNSENT">UNSENT</span>,
                   1468:     <span title="dom-XMLHttpRequest-OPENED">OPENED</span> with the
1.203     avankest 1469:     <span><code>send()</code> flag</span> being false, or
1.272     avankest 1470:     <span title="dom-XMLHttpRequest-DONE">DONE</span> go to the next step.</p>
1.12      avankest 1471: 
1.203     avankest 1472:     <p>Otherwise run these substeps:</p>
1.58      avankest 1473: 
                   1474:     <ol>
1.272     avankest 1475:      <li><p>Switch the state to <span title="dom-XMLHttpRequest-DONE">DONE</span>.</p></li>
1.170     avankest 1476: 
1.203     avankest 1477:      <li><p>Set the <span><code>send()</code> flag</span> to false.</p></li>
1.96      avankest 1478: 
1.203     avankest 1479:      <li><p><span>Dispatch a <code>readystatechange</code> event</span>.</p></li>
1.248     avankest 1480: 
                   1481:      
1.58      avankest 1482:     </ol>
1.250     avankest 1483: 
1.248     avankest 1484:     
1.250     avankest 1485:     <p class="note">A future version of this specification will dispatch an
1.273     avankest 1486:     <code title="event-xhr-abort">abort</code> event here.</p>
1.248     avankest 1487:     
1.203     avankest 1488:    </li>
                   1489: 
                   1490:    <li>
1.272     avankest 1491:     <p>Switch the state to <span title="dom-XMLHttpRequest-UNSENT">UNSENT</span>.</p>
1.203     avankest 1492: 
1.273     avankest 1493:     <p class="note">No <code title="event-xhr-readystatechange">readystatechange</code> event is dispatched.</p>
1.203     avankest 1494:    </li>
                   1495:   </ol>
                   1496: 
                   1497: 
                   1498: 
1.205     avankest 1499:   <h3 id="response">Response</h3>
1.203     avankest 1500: 
                   1501:   <h4>The <code title="">status</code> attribute</h4>
                   1502: 
1.276     avankest 1503:   <dl class="domintro">
                   1504:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-status">status</code></dt>
                   1505:    <dd><p>Returns the HTTP status code.</p></dd>
                   1506:   </dl>
                   1507: 
                   1508:   <p>The
                   1509:   <dfn id="dom-xmlhttprequest-status" title="dom-XMLHttpRequest-status"><code>status</code></dfn>
                   1510:   attribute <em class="ct">must</em> return the result of running these
                   1511:   steps:</p>
1.226     avankest 1512: 
1.222     avankest 1513:   <ol>
1.272     avankest 1514:    <li><p>If the state is <span title="dom-XMLHttpRequest-UNSENT">UNSENT</span> or
                   1515:    <span title="dom-XMLHttpRequest-OPENED">OPENED</span> return 0 and terminate these
1.222     avankest 1516:    steps.</p></li>
                   1517: 
1.239     avankest 1518:    <li><p>If the <span>error flag</span> is true return 0 and terminate
                   1519:    these steps.</p></li>
1.295     avankest 1520: 
1.222     avankest 1521:    <li><p>Return the HTTP status code.</p></li>
1.295     avankest 1522:   </ol>
1.203     avankest 1523: 
                   1524: 
                   1525:   <h4>The <code title="">statusText</code> attribute</h4>
                   1526: 
1.276     avankest 1527:   <dl class="domintro">
                   1528:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-statusText">statusText</code></dt>
                   1529:    <dd><p>Returns the HTTP status text.</p></dd>
                   1530:   </dl>
                   1531: 
                   1532:   <p>The
                   1533:   <dfn id="dom-xmlhttprequest-statustext" title="dom-XMLHttpRequest-statusText"><code>statusText</code></dfn>
                   1534:   attribute <em class="ct">must</em> return the result of running these
                   1535:   steps:</p>
1.295     avankest 1536: 
1.222     avankest 1537:   <ol>
1.272     avankest 1538:    <li><p>If the state is <span title="dom-XMLHttpRequest-UNSENT">UNSENT</span> or
                   1539:    <span title="dom-XMLHttpRequest-OPENED">OPENED</span> return the empty string and
1.239     avankest 1540:    terminate these steps.</p></li>
1.222     avankest 1541: 
                   1542:    <li><p>If the <span>error flag</span> is true return the empty string and
                   1543:    terminate these steps.</p></li>
1.295     avankest 1544: 
1.222     avankest 1545:    <li><p>Return the HTTP status text.</p></li>
                   1546:   </ol>
1.203     avankest 1547: 
                   1548: 
                   1549:   <h4>The <code title="">getResponseHeader()</code> method</h4>
                   1550: 
1.278     avankest 1551:   <dl class="domintro">
                   1552:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-getResponseHeader">getResponseHeader(<var title="">header</var>)</dt>
                   1553:    <dd><p>Returns the header field value from the response of which the
                   1554:    field name matches <var title="">header</var>, unless the field name is
                   1555:    <code>Set-Cookie</code> or <code>Set-Cookie2</code>.</p></dd>
                   1556:   </dl>
                   1557: 
1.203     avankest 1558:   <p>When the
1.278     avankest 1559:   <dfn id="dom-xmlhttprequest-getresponseheader" title="dom-XMLHttpRequest-getResponseHeader"><code>getResponseHeader(<var title="">header</var>)</code></dfn>
1.217     avankest 1560:   is invoked, the user agent <em class="ct">must</em> run these steps:</p>
1.203     avankest 1561: 
                   1562:   <ol>
1.272     avankest 1563:    <li><p>If the state is <span title="dom-XMLHttpRequest-UNSENT">UNSENT</span> or
                   1564:    <span title="dom-XMLHttpRequest-OPENED">OPENED</span> return null and terminate these
1.203     avankest 1565:    steps.</p></li>
                   1566: 
1.239     avankest 1567:    <li><p>If the <span>error flag</span> is true return null
1.203     avankest 1568:    and terminate these steps.</p></li>
                   1569: 
1.256     avankest 1570:    <li><p>If any code point in <var>header</var> is higher than
                   1571:    U+00FF LATIN SMALL LETTER Y WITH DIAERESIS return null and terminate
                   1572:    these steps.</p></li>
1.295     avankest 1573: 
1.256     avankest 1574:    <li><p>Let <var>header</var> be the result of
1.294     avankest 1575:    <span title="deflate a DOMString into a byte sequence">deflating</span>
1.256     avankest 1576:    <var>header</var>.</p></li> <!-- This sounds lame, but it works. -->
                   1577: 
                   1578:    <li><p>If <var>header</var> is a case-insensitive match for
                   1579:    <code>Set-Cookie</code> or <code>Set-Cookie2</code> return null and
                   1580:    terminate these steps.</p></li>
1.203     avankest 1581: 
1.256     avankest 1582:    <li><p>If <var>header</var> is a case-insensitive match for multiple HTTP
                   1583:    response headers, return the
1.294     avankest 1584:    <span title="inflate a byte sequence into a DOMString">inflated</span>
1.256     avankest 1585:    values of these headers as a single concatenated string separated from
                   1586:    each other by a U+002C COMMA U+0020 SPACE character pair and terminate
                   1587:    these steps.</p></li>
1.203     avankest 1588: 
1.256     avankest 1589:    <li><p>If <var>header</var> is a case-insensitive match for a single HTTP
                   1590:    response header, return the
1.294     avankest 1591:    <span title="inflate a byte sequence into a DOMString">inflated</span>
1.256     avankest 1592:    value of that header and terminate these steps.</p></li>
1.203     avankest 1593: 
1.239     avankest 1594:    <li><p>Return null.</p></li>
1.203     avankest 1595:   </ol>
                   1596: 
1.248     avankest 1597:   
                   1598: 
1.203     avankest 1599:   <div class="example">
1.295     avankest 1600: 
1.250     avankest 1601:    <p>For the following script:</p>
                   1602: 
                   1603:    <pre><code>var client = new XMLHttpRequest();
                   1604: client.open("GET", "unicorns-are-teh-awesome.txt", true);
1.5       avankest 1605: client.send();
1.12      avankest 1606: client.onreadystatechange = function() {
1.250     avankest 1607:   if(this.readyState == 2) {
                   1608:     print(client.getResponseHeader("Content-Type"));
                   1609:   }
                   1610: }</code></pre>
                   1611: 
                   1612:    <p>The <code>print()</code> function will get to process something
                   1613:    like:</p>
1.5       avankest 1614: 
1.250     avankest 1615:    <pre><code>text/plain; charset=UTF-8</code></pre>
1.203     avankest 1616:   </div>
1.12      avankest 1617: 
                   1618: 
1.203     avankest 1619:   <h4>The <code title="">getAllResponseHeaders()</code> method</h4>
1.14      avankest 1620: 
1.278     avankest 1621:   <dl class="domintro">
                   1622:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-getAllResponseHeaders">getAllResponseHeaders()</dt>
                   1623:    <dd><p>Returns all headers from the response, with the exception of those
                   1624:    whose field name is <code>Set-Cookie</code> or
                   1625:    <code>Set-Cookie2</code>.</p></dd>
                   1626:   </dl>
                   1627: 
1.203     avankest 1628:   <p>When the
1.293     avankest 1629:   <dfn id="dom-xmlhttprequest-getallresponseheaders" title="dom-XMLHttpRequest-getAllResponseHeaders"><code>getAllResponseHeaders()</code></dfn>
1.203     avankest 1630:   method is invoked, the user agent <em class="ct">must</em> run the
                   1631:   following steps:</p>
1.58      avankest 1632: 
1.203     avankest 1633:   <ol>
1.272     avankest 1634:    <li><p>If the state is <span title="dom-XMLHttpRequest-UNSENT">UNSENT</span> or
                   1635:    <span title="dom-XMLHttpRequest-OPENED">OPENED</span> return the empty string and
1.239     avankest 1636:    terminate these steps.</p></li>
1.203     avankest 1637: 
                   1638:    <li><p>If the <span>error flag</span> is true return the empty string and
                   1639:    terminate these steps.</p></li>
                   1640: 
1.256     avankest 1641:    <li><p>Return all the HTTP headers, excluding headers that are a
                   1642:    case-insensitive match for <code>Set-Cookie</code> or
                   1643:    <code>Set-Cookie2</code>,
1.294     avankest 1644:    <span title="inflate a byte sequence into a DOMString">inflated</span>,
1.256     avankest 1645:    as a single string, with each header line
                   1646:    separated by a U+000D CR U+000A LF pair, excluding the status line, and
1.203     avankest 1647:    with each header name and header value separated by a
                   1648:    U+003A COLON U+0020 SPACE pair.</p></li>
                   1649:   </ol>
1.58      avankest 1650: 
1.250     avankest 1651:   
                   1652: 
1.203     avankest 1653:   <div class="example">
1.250     avankest 1654:    <p>For the following script:</p>
1.295     avankest 1655: 
1.250     avankest 1656:    <pre><code>var client = new XMLHttpRequest();
                   1657: client.open("GET", "narwhals-too.txt", true);
1.5       avankest 1658: client.send();
1.12      avankest 1659: client.onreadystatechange = function() {
1.308     avankest 1660:   if(this.readyState == 2) {
                   1661:     print(this.getAllResponseHeaders());
                   1662:   }
1.250     avankest 1663: }</code></pre>
                   1664: 
                   1665:    <p>The <code>print()</code> function will get to process something
                   1666:    like:</p>
1.1       avankest 1667: 
1.250     avankest 1668:    <pre><code>Date: Sun, 24 Oct 2004 04:58:38 GMT
1.203     avankest 1669: Server: Apache/1.3.31 (Unix)
                   1670: Keep-Alive: timeout=15, max=99
                   1671: Connection: Keep-Alive
                   1672: Transfer-Encoding: chunked
                   1673: Content-Type: text/plain; charset=utf-8</code></pre>
                   1674:   </div>
                   1675: 
1.250     avankest 1676: 
1.203     avankest 1677: 
                   1678:   <h4>Response Entity Body</h4>
                   1679: 
1.248     avankest 1680:   <p>The <dfn id="response-mime-type">response MIME type</dfn> is the MIME
                   1681:   type the <code>Content-Type</code> header contains without any
                   1682:   parameters or null if the header could not be parsed properly or was
                   1683:   omitted. The <dfn id="override-mime-type">override MIME type</dfn> is
                   1684:   always null. <dfn id="final-mime-type">Final MIME type</dfn> is the
                   1685:   override MIME type unless that is null in which case it is the response
                   1686:   MIME type.</p>
                   1687: 
                   1688:   <p>The <dfn id="response-charset">response charset</dfn> is the value of
                   1689:   the <code>charset</code> parameter of the <code>Content-Type</code> header
                   1690:   or null if there was no <code>charset</code> parameter or if
                   1691:   the header could not be parsed properly or was omitted. The
                   1692:   <dfn id="override-charset">override charset</dfn> is always null.
                   1693:   <dfn id="final-charset">Final charset</dfn> is the override charset unless
                   1694:   that is null in which case it is the response charset.</p>
1.250     avankest 1695: 
1.248     avankest 1696:   
                   1697:   <p class="note"><span>Override MIME type</span> and
                   1698:   <span>override charset</span> are introduced here solely to make editing
                   1699:   several levels of XMLHttpRequest simultaneously somewhat easier. Apologies
                   1700:   for any confusion they might cause.</p>
                   1701:   
1.250     avankest 1702: 
1.248     avankest 1703:   <hr>
                   1704: 
1.203     avankest 1705:   <p>The <dfn id="response-entity-body">response entity body</dfn> is the
1.255     avankest 1706:   fragment of the <span>entity body</span> of the response received so far
1.272     avankest 1707:   (<span title="dom-XMLHttpRequest-LOADING">LOADING</span>) or the complete entity body
                   1708:   of the response (<span title="dom-XMLHttpRequest-DONE">DONE</span>). If the response
1.255     avankest 1709:   does not have an entity body the response entity body is null.</p>
                   1710: 
                   1711:   <p class="note">The <span>response entity body</span> is updated as part
1.271     avankest 1712:   of the <code title="dom-XMLHttpRequest-send">send()</code> algorithm.</p>
1.250     avankest 1713: 
1.203     avankest 1714:   <hr>
                   1715: 
                   1716:   <p>The <dfn id="text-response-entity-body">text response entity body</dfn>
1.248     avankest 1717:   is a <code>DOMString</code> representing the <span>response entity
                   1718:   body</span>. The text response entity body is the return value of the
1.203     avankest 1719:   following algorithm:</p>
                   1720: 
                   1721:   <ol>
1.248     avankest 1722:    <li><p>If the response entity body is null return the empty string and
                   1723:    terminate these steps.</p>
                   1724: 
                   1725:    <li><p>Let <var>charset</var> be the <span>final charset</span>.</p></li>
1.203     avankest 1726: 
1.248     avankest 1727:    <li><p>Let <var>mime</var> be the <span>final MIME type</span>.</p></li>
1.203     avankest 1728: 
1.248     avankest 1729:    <li><p>If <var>charset</var> is null and <var>mime</var> is null,
1.203     avankest 1730:    <code>text/xml</code>, <code>application/xml</code> or ends in
1.248     avankest 1731:    <code title="">+xml</code> use the rules set forth in the XML
                   1732:    specifications to determine the character encoding. Let
                   1733:    <var>charset</var> be the determined character encoding.</p></li>
                   1734: 
                   1735:    <li><p>If <var>charset</var> is null and <var>mime</var> is
                   1736:    <code>text/html</code> follow the rules set forth in the HTML
                   1737:    specification to determine the character encoding. Let
1.203     avankest 1738:    <var>charset</var> be the determined character encoding.
                   1739:    [<cite><span>HTML5</span></cite>]</p></li>
                   1740: 
                   1741:    <li>
                   1742:     <p>If <var>charset</var> is null then, for each of the rows in the
                   1743:     following table, starting with the first one and going down, if the first
                   1744:     bytes of <var>bytes</var> match the bytes given in the first column, then
                   1745:     let <var>charset</var> be the encoding given in the cell in the second
                   1746:     column of that row. If there is no match <var>charset</var> remains
                   1747:     null.</p>
                   1748: 
                   1749:     <table>
                   1750:      <thead>
                   1751:       <tr>
                   1752:        <th>Bytes in Hexadecimal
                   1753:        <th>Description
1.237     avankest 1754:      <tbody>
1.203     avankest 1755:       <tr>
                   1756:        <td>FE FF
                   1757:        <td>UTF-16BE BOM
                   1758:       <tr>
                   1759:        <td>FF FE
                   1760:        <td>UTF-16LE BOM
                   1761:       <tr>
                   1762:        <td>EF BB BF
1.237     avankest 1763:        <td>UTF-8 BOM
1.203     avankest 1764:     </table>
                   1765:    </li>
                   1766: 
                   1767:    <li><p>If <var>charset</var> is null let <var>charset</var> be
                   1768:    UTF-8.</p></li>
                   1769: 
                   1770:    <li><p>Return the result of decoding the response entity body using
                   1771:    <var>charset</var>. Replace bytes or sequences of bytes that are not
1.248     avankest 1772:    valid accordng to the <var>charset</var> with a single
1.315     avankest 1773:    U+FFFD REPLACEMENT CHARACTER character. Remove one leading
                   1774:    U+FEFF BYTE ORDER MARK character, if present.</p></li>
1.203     avankest 1775:   </ol>
                   1776: 
1.315     avankest 1777:   <p class="note">Authors are strongly encouraged to always encode their
                   1778:   resources using UTF-8.</p>
1.295     avankest 1779: 
1.203     avankest 1780:   <hr>
                   1781: 
1.248     avankest 1782:   <p>The <dfn id="document-response-entity-body">document response entity
                   1783:   body</dfn> is either a <code>Document</code> representing the
1.317   ! avankest 1784:   <span>response entity body</span> or null. If the
        !          1785:   <span>document response entity body</span> has no value assigned to it let
        !          1786:   it be the return value of the following algorithm:</p>
1.12      avankest 1787: 
1.203     avankest 1788:   <ol>
1.309     avankest 1789:    <li><p>If the <span>response entity body</span> is null, return null and
                   1790:    terminate these steps.</p></li>
1.12      avankest 1791: 
1.248     avankest 1792:    <li><p>If <span>final MIME type</span> is not null,
                   1793:    <code>text/xml</code>,
1.295     avankest 1794:    <code>application/xml</code>, or does not end in
1.309     avankest 1795:    <code title="">+xml</code>, return null and terminate these
                   1796:    steps.</p></li>
1.248     avankest 1797: 
                   1798:    
1.203     avankest 1799: 
                   1800:    <li>
1.265     avankest 1801:     <p>Let <var>document</var> be a
                   1802:     <span>cookie-free <code>Document</code> object</span> that represents
                   1803:     the result of parsing the response entity body into a document tree
                   1804:     following the rules from the XML specifications. If this fails
                   1805:     (unsupported character encoding, namespace well-formedness error et
1.309     avankest 1806:     cetera) return null and terminate these steps.
1.265     avankest 1807:     [<cite><span>XML</span></cite>]</p>
1.248     avankest 1808: 
                   1809:     <p class="note">Scripts in the resulting document tree will not be executed,
                   1810:     resources referenced will not be loaded and no associated XSLT will be
                   1811:     applied.</p>
1.203     avankest 1812:    </li>
1.88      avankest 1813: 
1.248     avankest 1814:    <li><p>Return <var>document</var>.</p></li>
1.203     avankest 1815:   </ol>
1.12      avankest 1816: 
1.248     avankest 1817:   
                   1818: 
                   1819: 
1.203     avankest 1820:   <h4>The <code title="">responseText</code> attribute</h4>
1.12      avankest 1821: 
1.276     avankest 1822:   <dl class="domintro">
                   1823:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-responseText">responseText</code></dt>
1.305     avankest 1824:    <dd>
                   1825:     <p>Returns the <span>text response entity body</span>.</p>
                   1826:     
                   1827:    </dd>
1.276     avankest 1828:   </dl>
                   1829: 
                   1830:   <p>The
                   1831:   <dfn id="dom-xmlhttprequest-responsetext" title="dom-XMLHttpRequest-responseText"><code>responseText</code></dfn>
                   1832:   attribute <em class="ct">must</em> return the result of running these
                   1833:   steps:</p>
1.79      avankest 1834: 
1.203     avankest 1835:   <ol>
1.305     avankest 1836:    
                   1837: 
1.272     avankest 1838:    <li><p>If the state is not <span title="dom-XMLHttpRequest-LOADING">LOADING</span> or
                   1839:    <span title="dom-XMLHttpRequest-DONE">DONE</span> return the empty string and
1.203     avankest 1840:    terminate these steps.</p></li>
1.75      avankest 1841: 
1.313     avankest 1842:    <li><p>If the <span>error flag</span> is true return the empty string and
                   1843:    terminate these steps.</p></li>
                   1844: 
1.203     avankest 1845:    <li><p>Return the <span>text response entity body</span>.</p></li>
                   1846:   </ol>
1.12      avankest 1847: 
                   1848: 
1.203     avankest 1849:   <h4>The <code title="">responseXML</code> attribute</h4>
1.12      avankest 1850: 
1.276     avankest 1851:   <dl class="domintro">
                   1852:    <dt><var title="">client</var> . <code title="dom-XMLHttpRequest-responseXML">responseXML</code></dt>
1.305     avankest 1853:    <dd>
                   1854:     <p>Returns the <span>document response entity body</span>.</p>
                   1855:     
                   1856:    </dd>
1.276     avankest 1857:   </dl>
                   1858: 
                   1859:   <p>The
                   1860:   <dfn id="dom-xmlhttprequest-responsexml" title="dom-XMLHttpRequest-responseXML"><code>responseXML</code></dfn>
                   1861:   attribute <em class="ct">must</em> return the result of running these
                   1862:   steps:</p>
1.12      avankest 1863: 
1.203     avankest 1864:   <ol>
1.305     avankest 1865:    
                   1866: 
1.272     avankest 1867:    <li><p>If the state is not <span title="dom-XMLHttpRequest-DONE">DONE</span> return
1.239     avankest 1868:    null and terminate these steps.</p></li>
1.12      avankest 1869: 
1.313     avankest 1870:    <li><p>If the <span>error flag</span> is true return null and terminate
                   1871:    these steps.</p></li>
                   1872: 
1.317   ! avankest 1873:    <li><p>Return the <span>document response entity body</span>.</p></li>
1.203     avankest 1874:   </ol>
1.121     avankest 1875: 
1.248     avankest 1876:   
                   1877: 
1.12      avankest 1878: 
1.240     avankest 1879:   <h2 id="exceptions">Exceptions</h2>
1.24      avankest 1880: 
1.138     avankest 1881:   <p>Several algorithms in this specification may result in an exception
                   1882:   being thrown. These exceptions are all part of the group
1.185     avankest 1883:   <code>ExceptionCode</code> and use the <code>DOMException</code> object,
1.138     avankest 1884:   which is defined in DOM Level 3 Core. In addition this specification
                   1885:   extends the <code>ExceptionCode</code> group with several new
                   1886:   constants as indicated below. [<cite><span>DOM3Core</span></cite>]</p>
1.203     avankest 1887: 
1.193     avankest 1888:   <p class="note">Thus, exceptions used by this specification and not
                   1889:   defined in this section are defined by DOM Level 3 Core.</p>
1.31      avankest 1890: 
1.138     avankest 1891:   <pre class="idl">const unsigned short <span>SECURITY_ERR</span> = 18;
1.199     avankest 1892: const unsigned short <span>NETWORK_ERR</span> = 19;
                   1893: const unsigned short <span>ABORT_ERR</span> = 20;</pre>
1.31      avankest 1894: 
1.138     avankest 1895:   <p>The <dfn id="security-err"><code>SECURITY_ERR</code></dfn> exception is
                   1896:   raised if an attempt is made to perform an operation or access some data
                   1897:   in a way that would be a security risk or a violation of the user agent's
                   1898:   security policy.</p>
                   1899: 
                   1900:   <!-- http://lists.w3.org/Archives/Public/public-webapi/2006May/0027.html -->
                   1901: 
1.33      avankest 1902:   <p>The <dfn id="network-err"><code>NETWORK_ERR</code></dfn> exception is
1.138     avankest 1903:   raised when a network error occurs in synchronous requests.</p>
1.121     avankest 1904: 
1.138     avankest 1905:   <p>The <dfn id="abort-err"><code>ABORT_ERR</code></dfn> exception is
                   1906:   raised when the user aborts a request in synchronous requests.</p>
1.295     avankest 1907: 
1.248     avankest 1908:   
1.203     avankest 1909: 
1.240     avankest 1910:   <p class="note">These exceptions will be folded into an update of
1.199     avankest 1911:   DOM Level 3 Core in due course, as they are appropriate for other API
                   1912:   specifications as well.</p>
1.121     avankest 1913: 
1.29      avankest 1914: 
1.203     avankest 1915: 
1.248     avankest 1916:   
                   1917: 
1.203     avankest 1918: 
1.248     avankest 1919:   <h2 class="no-num" id="references">References</h2>
1.203     avankest 1920: 
1.177     avankest 1921:   <p>Unless marked "Non-normative" these references are normative.</p>
1.11      avankest 1922: 
1.6       avankest 1923:   <dl>
1.230     avankest 1924:    <dt>[<dfn id="ref-cookies">COOKIES</dfn>]</dt>
1.268     avankest 1925:    <dd><cite><a href="http://tools.ietf.org/html/draft-ietf-httpstate-cookie">HTTP
                   1926:    State Management Mechanism</a></cite> (work in progress), A. Barth. IETF.</dd>
1.203     avankest 1927: 
1.248     avankest 1928:    
                   1929: 
1.155     avankest 1930:    <dt>[<dfn id="ref-dom2events">DOM2Events</dfn>]</dt>
                   1931:    <dd><cite><a href="http://www.w3.org/TR/DOM-Level-2-Events/">Document
1.267     avankest 1932:    Object Model (DOM) Level 2 Events Specification</a></cite>, T. Pixley.
                   1933:    W3C.</dd>
1.155     avankest 1934: 
1.145     avankest 1935:    <dt>[<dfn id="ref-dom3core">DOM3Core</dfn>]</dt>
1.11      avankest 1936:    <dd><cite><a href="http://www.w3.org/TR/DOM-Level-3-Core">Document Object
1.92      avankest 1937:    Model (DOM) Level 3 Core Specification</a></cite>, A. Le Hors, P. Le
1.267     avankest 1938:    H&eacute;garet, L. Wood, G. Nicol, J. Robie, M. Champion, S. Byrne.
                   1939:    W3C.</dd>
1.11      avankest 1940: 
1.117     avankest 1941:    <dt>[<dfn id="ref-ecmascript">ECMAScript</dfn>]</dt>
1.92      avankest 1942:    <dd><cite><a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMAScript
1.267     avankest 1943:    Language Specification</a></cite>. ECMA.</dd>
1.295     avankest 1944: 
1.248     avankest 1945:    
1.171     avankest 1946: 
1.145     avankest 1947:    <dt>[<dfn id="ref-html5">HTML5</dfn>]</dt>
1.250     avankest 1948:    <dd><cite><a href="http://www.w3.org/html/wg/html5/">HTML5</a></cite>
1.267     avankest 1949:    (work in progress), I. Hickson. W3C.</dd>
1.290     avankest 1950:    <dd><cite><a href="http://www.whatwg.org/specs/web-apps/current-work/">HTML5</a></cite>
1.267     avankest 1951:    (work in progress), I. Hickson. WHATWG.</dd>
1.198     avankest 1952: 
                   1953:    <dt>[<dfn id="ref-httpverbsec">HTTPVERBSEC</dfn>]</dt>
1.248     avankest 1954:    <dd>(Non-normative)
                   1955:    <cite><a href="http://www.kb.cert.org/vuls/id/867593">Multiple vendors'
                   1956:    web servers enable HTTP TRACE method by default</a></cite>, US-CERT.</dd>
                   1957:    <dd>(Non-normative)
                   1958:    <cite><a href="http://www.kb.cert.org/vuls/id/288308">Microsoft Internet
                   1959:    Information Server (IIS) vulnerable to cross-site scripting via HTTP
                   1960:    TRACK method</a></cite>, US-CERT.</dd>
                   1961:    <dd>(Non-normative)
                   1962:    <cite><a href="http://www.kb.cert.org/vuls/id/150227">HTTP proxy default
                   1963:    configurations allow arbitrary TCP connections</a></cite>, US-CERT.</dd>
                   1964: 
                   1965:    
                   1966: 
                   1967:    <dt>[<dfn id="ref-rfc2046">RFC2046</dfn>]</dt>
                   1968:    <dd><cite><a href="http://ietf.org/rfc/rfc2046">Multipurpose Internet Mail
                   1969:    Extensions (MIME) Part Two: Media Types</a></cite>, N. Freed, N.
1.267     avankest 1970:    Borenstein. IETF.</dd>
1.198     avankest 1971: 
1.145     avankest 1972:    <dt>[<dfn id="ref-rfc2119">RFC2119</dfn>]</dt>
1.117     avankest 1973:    <dd><cite><a href="http://ietf.org/rfc/rfc2119">Key words for use in RFCs to
1.267     avankest 1974:    Indicate Requirement Levels</a></cite>, S. Bradner. IETF.</dd>
1.12      avankest 1975: 
1.248     avankest 1976:    <dt>[<dfn id="rfc-rfc2616">RFC2616</dfn>]</dt>
1.11      avankest 1977:    <dd><cite><a href="http://ietf.org/rfc/rfc2616">Hypertext Transfer Protocol
1.92      avankest 1978:    -- HTTP/1.1</a></cite>, R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L.
1.267     avankest 1979:    Masinter, P. Leach, T. Berners-Lee. IETF.</dd>
1.12      avankest 1980: 
1.37      avankest 1981:    <dt>[<dfn id="ref-rfc2617">RFC2617</dfn>]</dt>
1.11      avankest 1982:    <dd><cite><a href="http://ietf.org/rfc/rfc2617">HTTP Authentication: Basic
1.92      avankest 1983:    and Digest Access Authentication</a></cite>, P. Hallam-Baker, J.
1.267     avankest 1984:    Hostetler, S. Lawrence, P. Leach, A. Luotonen, L. Stewart. IETF.</dd>
1.12      avankest 1985: 
1.37      avankest 1986:    <dt>[<dfn id="ref-rfc3986">RFC3986</dfn>]</dt>
1.11      avankest 1987:    <dd><cite><a href="http://ietf.org/rfc/rfc3986">Uniform Resource Identifier
1.267     avankest 1988:    (URI): Generic Syntax</a></cite>, T. Berners-Lee, R. Fielding, L.
                   1989:    Masinter. IETF.</dd>
1.184     avankest 1990: 
1.248     avankest 1991:    <dt>[<dfn id=ref-rfc3987>RFC3987</dfn>]</dt>
                   1992:    <dd><cite><a href="http://ietf.org/rfc/rfc3987">Internationalized
1.267     avankest 1993:    Resource Identifiers (IRIs)</a></cite>, M. Duerst, M. Suignard.
                   1994:    IETF.</dd>
1.248     avankest 1995: 
1.203     avankest 1996:    <dt>[<dfn id="ref-webidl">WebIDL</dfn>]</dt>
1.200     avankest 1997:    <dd><cite><a href="http://dev.w3.org/2006/webapi/WebIDL/">Web
1.267     avankest 1998:    IDL</a></cite> (work in progress), C. McCormack. W3C.</dd> <!-- XXX add Sam -->
1.181     avankest 1999: 
1.92      avankest 2000:    <dt>[<dfn id="ref-xml">XML</dfn>]</dt>
                   2001:    <dd><cite><a href="http://www.w3.org/TR/xml/">Extensible Markup Language
1.267     avankest 2002:    (XML) 1.0</a></cite>, T. Bray, J. Paoli, C. Sperberg-McQueen, E. Maler,
                   2003:    F. Yergeau. W3C.</dd>
                   2004:    <dd><cite><a href="http://www.w3.org/TR/xml-names/">Namespaces in
                   2005:    XML</a></cite>, T. Bray, D. Hollander, A. Layman, R. Tobin, H. S.
                   2006:    Thompson. W3C.</dd>
1.1       avankest 2007:   </dl>
1.11      avankest 2008: 
1.203     avankest 2009: 
                   2010: 
1.130     avankest 2011:   <h2 class="no-num" id="acknowledgments">Acknowledgments</h2>
1.11      avankest 2012: 
1.159     avankest 2013:   <p>The editor would like to thank
1.12      avankest 2014: 
1.163     avankest 2015:   Addison Phillips,
1.159     avankest 2016:   Ahmed Kamel,
                   2017:   Alex Hopmann,
                   2018:   Alex Vincent,
                   2019:   Alexey Proskuryakov,
                   2020:   Asbj&oslash;rn Ulsberg,
                   2021:   Boris Zbarsky,
                   2022:   Bj&ouml;rn H&ouml;hrmann,
                   2023:   Cameron McCormack,
                   2024:   Christophe Jolif,
                   2025:   Charles McCathieNevile,
                   2026:   Dan Winship,
1.248     avankest 2027:   David Andersson,
1.159     avankest 2028:   David H&aring;s&auml;ther,
1.248     avankest 2029:   David Levin,
1.159     avankest 2030:   Dean Jackson,
                   2031:   Denis Sureau,
                   2032:   Doug Schepers,
                   2033:   Douglas Livingstone,
                   2034:   Elliotte Harold,
                   2035:   Eric Lawrence,
1.196     avankest 2036:   Erik Dahlstr&ouml;m,
1.163     avankest 2037:   Geoffrey Sneddon,
1.159     avankest 2038:   Gideon Cohn,
                   2039:   Gorm Haug Eriksen,
1.247     avankest 2040:   H&aring;kon Wium Lie,
1.159     avankest 2041:   Hallvord R. M. Steen,
1.247     avankest 2042:   Huub Schaeks,
1.159     avankest 2043:   Ian Davis,
                   2044:   Ian Hickson,
                   2045:   Ivan Herman,
                   2046:   Jeff Walden,
                   2047:   Jens Lindstr&ouml;m,
                   2048:   Jim Deegan,
                   2049:   Jim Ley,
                   2050:   Joe Farro,
                   2051:   Jonas Sicking,
                   2052:   Julian Reschke,
                   2053:   Karl Dubost,
1.175     avankest 2054:   Lachlan Hunt,
1.159     avankest 2055:   Maciej Stachowiak,
                   2056:   Magnus Kristiansen,
                   2057:   Marc Hadley,
                   2058:   Marcos Caceres,
                   2059:   Mark Baker,
1.203     avankest 2060:   Mark Birbeck,
1.159     avankest 2061:   Mark Nottingham,
1.267     avankest 2062:   Mark S. Miller,
1.248     avankest 2063:   Martin Hassman,
1.159     avankest 2064:   Mohamed Zergaoui,
1.256     avankest 2065:   Olli Pettay,
1.159     avankest 2066:   Pawel Glowacki,
1.231     avankest 2067:   Peter Michaux,
1.264     avankest 2068:   Philip Taylor,
1.159     avankest 2069:   Robin Berjon,
1.248     avankest 2070:   Rune Halvorsen,
1.159     avankest 2071:   Ruud Steltenpool,
1.310     avankest 2072:   Sergiu Dumitriu,
1.159     avankest 2073:   Simon Pieters,
                   2074:   Stewart Brodie,
                   2075:   Sunava Dutta,
1.186     avankest 2076:   Thomas Roessler,
1.203     avankest 2077:   Tom Magliery, and
1.159     avankest 2078:   Zhenbin Xu
1.181     avankest 2079: 
1.159     avankest 2080:   for their contributions to this specification.</p>
1.12      avankest 2081: 
1.1       avankest 2082:   <p>Special thanks to the Microsoft employees who first implemented the
1.143     avankest 2083:   <code title="">XMLHttpRequest</code> interface, which was first widely
                   2084:   deployed by the Windows Internet Explorer browser.</p>
1.12      avankest 2085: 
1.143     avankest 2086:   <p>Special thanks also to the WHATWG for drafting an initial version of
                   2087:   this specification in their Web Applications 1.0 document (now renamed to
1.250     avankest 2088:   HTML5). [<cite><span>HTML5</span></cite>]</p>
1.12      avankest 2089: 
1.143     avankest 2090:   <p>Thanks also to all those who have helped to improve this specification
                   2091:   by sending suggestions and corrections. (Please, keep bugging us with your
1.22      avankest 2092:   issues!)</p>
1.1       avankest 2093:  </body>
                   2094: </html>

Webmaster