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

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

Webmaster