- From: Kris Zyp <kzyp@sitepen.com>
- Date: Tue, 19 Feb 2008 08:55:18 -0700
- To: <public-webapi@w3.org>, "Mark Baker" <distobj@acm.org>
- Message-ID: <0b2b01c8730f$d41b1ef0$4200a8c0@kris>
Multipart Support Multipart support specifies that when an XHR request is made with multipart enabled, the XHR response should be parsed as a multipart message, where each part triggers the XHR response sequence. Multipart handling is enabled by setting the multipart property on the XHR object to true. When the response begins to stream into the user agent, the XHR response sequence should be triggered for each part as it is received, and the user agent should not wait for the entire HTTP response to be received. When multipart is enabled, the user agent should perform multipart handling for responses with a MIME type of any multipart type. That is, when a response includes a Content-Type header with value of multipart/* where the subtype can be any value, then multipart handling should be performed. When handling a multipart message, the XHR object should expose an additional property multipartState. The multipartState property should provide the status of the XHR request exactly as the readyState property would when multipart handling is not enabled. As each part is received is being received, the multipartState should be 3 and when the response is finished the multipartState should be 4. The XHR object should also provide two additional methods, getPartHeader(headerName) and getAllPartHeaders(). These methods should provide access to the headers of each part. When a part is encountered, and the headers have been received (readyState of 2 or higher), the getPartHeader can be called to with a name of a header, and the method should return the value for that header within the currently processed part. The getAllPartHeaders can be called after the headers have been received and it should return the entirety of the header block text for that part. When the leading boundary prior to each part is received, the onreadystatechange handler should be called with the readyState property set to 1, and responseText should be an empty string. When the headers have been received for the part (that is, two line breaks are encountered), the onreadystatechange handler should be called with the readyState property set to 2 and the getPartHeader and getAllPartHeaders should be able to return header information. When any of the content of the part is received, the onreadystatechange handler should be called with the readyState property set to 3 and the responseText property with the available content. This may be called multiple times as content is streamed in. When the ending boundary is encountered, the onreadystatechange handler should be called with the readyState property set to 4, and the responseText property with the content of the part and the onload handler should be called. Note that since the ending boundary is the starting boundary for the next part the beginning onreadystatechange handler should be called for the next part immediately following the last call for the previous part. The following is an example of usage: var xhr = new XMLHttpRequest; xhr.multipart = true; xhr.open("GET","/resource", true); xhr.onreadystatechange=function() {....} xhr.send(null); message/http Support In addition to multpart/* handling, the "message/http" MIME should also be handled. The "message/http" type consists of 1 or more HTTP response messages. This format only differs from multipart/message in that there are no boundaries. Boundaries are not necessary with HTTP messages since each message defines it's own ending (via the Content-Length header or chunked encoding termination) so boundaries are unnecessary overhead. Each HTTP message would be treated as a part, with the responseText being set to the response entity and getPartHeader and getAllPartHeaders accessing the headers. In addition, the XHR object's status and statusText properties would reflect the status values in each of the contained HTTP messages. Differences from Mozilla Implementation Multipart support has been implemented in Mozilla with some notable usability issues that are fixed in this proposal. First, there is no way to detect when a multipart response is finished since each part triggers a readyState of 4. Therefore this proposal adds a multipartState property provides overall response status. Second, Mozilla provides no access to the headers in each part. This is corrected by adding the getPartHeaders and getAllPartHeaders methods (which behave very similar to getResponseHeader and getAllResponseHeaders, except on the part instead of the whole response). Third, when multipart is enabled, Mozilla only handles responses with the MIME type of multipart/x-mixed-replace. This greatly limits the use of more meaningful and accurate MIME types such as multipart/mixed, multipart/message, and message/http. This proposal removes this limitation and specifies that multipart handling can be used for any multipart response.
Received on Tuesday, 19 February 2008 15:55:50 UTC