Javascript XMLHttpRequest LengthComputeable始终为false

Javascript XMLHttpRequest LengthComputeable始终为false,javascript,ajax,Javascript,Ajax,我需要AJAX加载大的二进制文件,因此我想显示一个进度指示器。我已经读取了Progress.event参数的lengthComputeable字段,当设置了“Content Length”标题时,该字段为true。我有这个标题,但LengthComputeable始终为false。我做错了什么 代码如下: function onProgress(evt){ if(evt.lengthComputable){ this.progress = (evt.loaded / ev

我需要AJAX加载大的二进制文件,因此我想显示一个进度指示器。我已经读取了Progress.event参数的lengthComputeable字段,当设置了“Content Length”标题时,该字段为true。我有这个标题,但LengthComputeable始终为false。我做错了什么

代码如下:

function onProgress(evt){
    if(evt.lengthComputable){
        this.progress = (evt.loaded / evt.total)*100; 
        // do something  ...
    }
}

function load(url){
    var me = this;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.responseType = 'arraybuffer';   
    xhr.onload = this.load;
    xhr.onprogress = this.updateProgress;
    xhr.send();
}
这是标题(来自Chrome):


编辑:看起来问题在于内容编码,在我的情况下,deflate:

我可以确认问题在于内容编码。我必须使用JS解压客户端。如果您正在设置一个被忽略的内容长度头,您还必须设置响应的缓冲区大小,以便能够容纳您发送的字节。否则,在HTTP 1.1中,它将恢复为对响应进行分块。
Request URL:http://localhost/cgi-bin/test.cgi
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:es-419,es;q=0.8
Connection:keep-alive
Cookie:__utma=1.1581312881.1342448904.1342729430.1342812228.5
Host:localhost
Referer:http://localhost/cgi-bin/test.cgi
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.35 (KHTML, like Gecko) Chrome/27.0.1448.0 Safari/537.35
Query String Parametersview sourceview URL encoded
idimage:3431
Response Headersview source
Connection:Keep-Alive
Content-Encoding:deflate
Content-Length:11825252
Content-Type:application/binaryfile
Date:Fri, 05 Apr 2013 11:36:06 GMT
Keep-Alive:timeout=5, max=98
Server:Apache/2.2.22 (FreeBSD) mod_ssl/2.2.22 OpenSSL/0.9.8x DAV/2 PHP/5.3.10 with Suhosin-Patch mod_python/3.3.1 Python/2.7.3 mod_perl/2.0.5 Perl/v5.10.1