我想从JavaScript中的XMLHttpRequest对象发出部分内容请求。我正在从服务器加载一个大的二进制文件,而宁愿从服务器流式传输它,类似于html5视频的处理方式。
我可以使用setRequestHeader设置Range标头。Chrome中的网络检查器显示Range标头设置成功。但是,Accept- Encoding标头设置为“ gzip,deflate”,Chrome不允许我设置该标头(根据W3C标准)。
有什么方法可以强制服务器仅通过javascript用XMLHttpRequest对象的206部分内容进行响应?
我想我知道了为什么206请求无法正常工作。启用gzip压缩后,如果可以对传出数据进行gzip压缩,则将忽略范围标头。
我要的文件是一个很大的二进制文件,nginx将该文件解释为具有mimetype application / octet- stream。这是被压缩的模仿类型之一。如果我将文件重命名为.png文件类型,则不会压缩image / png MIME类型,因此范围请求可以正常工作。
这也是为什么将带有curl的Accept-Encoding标头设置为identity也可以使范围请求正常工作的原因。但是,我无法从XHR更改该标头。
解决方案:更改服务器上的mimetype表!