我有一台需要从中下载文件的设备。在某些情况下,文件的content-encoding
可能不正确。特别是,当未压缩或以任何方式压缩时,它的内容编码可能为“gzip”。
因此,将文件压缩后,使用基本的ajax GET获取内容很简单:
$.ajax({
url: 'http://' + IP + '/test.txt',
type: 'GET'
})
.done(function(data) {
alert(data);
});
但是,当内容编码错误时,这会失败,正如您可能预期的那样。
需要明确的是,我不是在寻找在浏览器中导航到给定URL时绕过
ERR_CONTENT_DECODING_FAILED
的解决方案。我希望能够将例如csv加载到javascript中的字符串中以进行进一步解析。我是否可以获取文件,并强制其跳过尝试解码的过程,或者覆盖响应的内容编码,等等?
最佳答案
根据WHATWG的XHR spec,这根本不可能通过客户端JavaScript来完成,而Fetch Standard利用了WHATWG ojit_a的提取操作。
客户端脚本只能读取浏览器环境提供的响应对象。提取标准定义了浏览器环境在提取操作的第2步中必须如何构建响应对象的body属性(尤其要注意第2到4子步骤):
处理内容编码的 Action 是:
通过此定义,我们可以看到响应对象从不公开其body属性中的编码字节。在将字节添加到正文之前,必须先对它们进行解码。客户端脚本永远无法访问规范称为“传输的字节”的内容(即通过网络发送的实际编码字节)。
解码完全由Content-Encoding
header 确定。客户端JavaScript无法通过任何机制来操纵响应对象的响应 header ,因此Content-Encoding
必须是服务器最初发送的内容。
您的服务器正在做什么是错误的。您唯一的选择是:
Content-Encoding
响应 header 到达客户端之前对其进行修复。 关于javascript - 如何忽略内容编码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29376101/