为啥 XMLHttpRequest 响应的长度与请求文件的大小不同?

Posted

技术标签:

【中文标题】为啥 XMLHttpRequest 响应的长度与请求文件的大小不同?【英文标题】:Why length of XMLHttpRequest response differs from size of requested file?为什么 XMLHttpRequest 响应的长度与请求文件的大小不同? 【发布时间】:2015-03-17 14:11:35 【问题描述】:

如果文件的实际大小为 6327 字节(响应头中的内容长度为 6327),

那么为什么 XMLHttpRequest 响应的长度(下面代码中 xhr.response.length 的值)不同:

Chrome(41 版)中的 6085 和 Firefox(36 版)中的 5961?

//run this code somewhere on google.com to avoid access error
var xhr = new XMLHttpRequest();
xhr.open('GET','https://www.google.com/images/errors/robot.png',true);
xhr.onreadystatechange=function(e)
    if(xhr.readyState==4&&xhr.status==200)
        console.log(xhr.response.length);
    
;
xhr.send();

命令

xhr.setRequestHeader('Content-Type','image/png');

或命令

xhr.setRequestHeader('Content-Type','application/zip');

没有帮助。

【问题讨论】:

【参考方案1】:

MIME 类型必须被覆盖:

var xhr = new XMLHttpRequest();
xhr.open('GET','https://www.google.com/images/errors/robot.png',true);
xhr.overrideMimeType('text/plain; charset=x-user-defined');
xhr.onreadystatechange=function(e)
    if(xhr.readyState==4&&xhr.status==200)
        console.log(xhr.response.length);
    
;
xhr.send();

实际上,它不是问题的最佳答案,但可以正常工作(xhr.response.length 的值等于文件大小)。

【讨论】:

Ii html5 然后以下代码也可以正常工作(即使在资源管理器中): var xhr = new XMLHttpRequest(); xhr.open('GET','google.com/images/errors/robot.png',true); xhr.responseType='blob'; xhr.onload=function(e) if(this.status==200) console.log(this.response.size); ; xhr.send();

以上是关于为啥 XMLHttpRequest 响应的长度与请求文件的大小不同?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 为啥这个 HTTP 请求响应数组的长度未定义?

为啥 XMLHttpRequest 没有回复?

为啥叫 XMLHttpRequest?

Microsoft Enterprise Library 简介与请大家下载Microsoft Enterprise Li

为啥 XMLHttpRequest 上传在 Firefox 中没有正确失败?

为啥一些跨域 XMLHttpRequest 请求不返回 CORS 错误