为啥 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 请求响应数组的长度未定义?
Microsoft Enterprise Library 简介与请大家下载Microsoft Enterprise Li