Javascript 如何正确编写http响应以便使用XHR进度事件侦听器
我想使用XHR对象的“进度”事件来获取下载进度 下面是来自 我编写了类似的代码,但progress事件的Javascript 如何正确编写http响应以便使用XHR进度事件侦听器,javascript,http,http-headers,xmlhttprequest,httpresponse,Javascript,Http,Http Headers,Xmlhttprequest,Httpresponse,我想使用XHR对象的“进度”事件来获取下载进度 下面是来自 我编写了类似的代码,但progress事件的lengthComputeable字段结果为false。加载的字段是某个有限值,但总计设置为零 从上面代码示例中的注释可以看出,浏览器在HTTP响应中没有获得足够的信息来计算有意义的下载进度 写响应的正确方法是什么?我在测试中看到的响应有传输编码:chunked和内容长度:8。我是从Tornado Web服务器生成的。在中,响应的总长度不是由服务器指示的,因此客户端事先不知道 你可以尝试两件事
lengthComputeable
字段结果为false。加载的字段是某个有限值,但总计设置为零
从上面代码示例中的注释可以看出,浏览器在HTTP响应中没有获得足够的信息来计算有意义的下载进度
写响应的正确方法是什么?我在测试中看到的响应有传输编码:chunked
和内容长度:8
。我是从Tornado Web服务器生成的。在中,响应的总长度不是由服务器指示的,因此客户端事先不知道
你可以尝试两件事
- 使用
内容长度
禁用分块传输编码以支持正常方法。这就是进度事件规范的内容。但我不知道这是否/如何可能与龙卷风有关
- 或者,在自定义响应头中包括总长度,如
X-total-length
。然后,使用如下代码确定您的百分比:
function updateProgress(evt) {
var total = evt.lengthComputable ?
evt.total : parseInt(req.getResponseHeader('X-Total-Length'));
if (total) {
var percentComplete = evt.loaded / total;
// ...
}
}
在中,响应的总长度不是由服务器指示的,因此客户端事先不知道
你可以尝试两件事
- 使用
内容长度
禁用分块传输编码以支持正常方法。这就是进度事件规范的内容。但我不知道这是否/如何可能与龙卷风有关
- 或者,在自定义响应头中包括总长度,如
X-total-length
。然后,使用如下代码确定您的百分比:
function updateProgress(evt) {
var total = evt.lengthComputable ?
evt.total : parseInt(req.getResponseHeader('X-Total-Length'));
if (total) {
var percentComplete = evt.loaded / total;
// ...
}
}
第二个技巧有点奏效。我需要这样做是因为gzip压缩。gzip始终使LengthComputeable==false,内容长度标头对于压缩大小是正确的,并允许加载页面。我必须估计压缩水平,并相应地调整总数。希望有更好的方法做到这一点。第二个技巧有点奏效。我需要这样做是因为gzip压缩。gzip始终使LengthComputeable==false,内容长度标头对于压缩大小是正确的,并允许加载页面。我必须估计压缩水平,并相应地调整总数。希望有更好的方法做到这一点。