有没有办法从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();
是否有其他方法可以实现此目的(假设无法在服务器上禁用内容编码)?
答案 0 :(得分:1)
您可以尝试使用旧样式模拟ajax行为,例如使用您提及的所有标头加载隐藏的iframe(并且可能允许编码标头)并从此类隐藏的iframe中获取数据。以下是使用隐藏iframe上传多部分数据的示例:example。您可以根据需要进行更改。也许它会有所帮助。