【问题标题】:Requesting specific part of web resource asynchronously异步请求 Web 资源的特定部分
【发布时间】:2014-11-03 05:23:29
【问题描述】:

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

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

当消息中包含实体主体时,该实体的数据类型 正文通过标题字段 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();

是否有其他方法可以实现这一点(假设不能在服务器上禁用内容编码)?

【问题讨论】:

    标签: javascript ajax html http xmlhttprequest


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答!我会调查它是否可以发出Accept-Encoding: identity 标头并回发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多