异步请求Web资源的特定部分

时间:2014-11-01 19:50:30

标签: javascript ajax html5 http xmlhttprequest

有没有办法从JavaScript异步请求Web资源的特定部分(例如前100个字节)?

我认为可以通过设置XmlHttpRequest标头Range来完成此操作。但是,如果服务器应用内容编码(默认情况下大部分都是这样),则字节范围将应用于编码的数据,而不是原始数据。每HTTP/1.1

  

当一个实体主体包含在消息中时,它的数据类型      body通过标题字段Content-Type和Content-确定      编码。这些定义了一个两层有序编码模型:

     

entity-body := Content-Encoding( Content-Type( data ) )

     

HTTP中的字节范围规范适用于字节序列      实体 - [...]。

这使得检索到的内容无用,因为如果不检索(并连接)编码资源的其余部分就无法对其进行解码。

由于XMLHttpRequest prohibits Accept-Encoding被更改,显然无法从客户端禁用内容编码。

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () { /* ... */ };
xhr.open("GET", url, true);
xhr.setRequestHeader("Range", "bytes=0-99");
xhr.setRequestHeader("Accept-Encoding", "identity");  // not allowed
xhr.send();

是否有其他方法可以实现此目的(假设无法在服务器上禁用内容编码)?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用旧样式模拟ajax行为,例如使用您提及的所有标头加载隐藏的iframe(并且可能允许编码标头)并从此类隐藏的iframe中获取数据。以下是使用隐藏iframe上传多部分数据的示例:example。您可以根据需要进行更改。也许它会有所帮助。