XMLHttpRequest 206 部分内容

XMLHttpRequest 206 Partial Content(XMLHttpRequest 206 部分内容)
本文介绍了XMLHttpRequest 206 部分内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从 javascript 中的 XMLHttpRequest 对象发出部分内容请求.我正在从服务器加载一个大的二进制文件,我宁愿从服务器流式传输它,类似于处理 html5 视频的方式.

I would like to issue a partial content request from an XMLHttpRequest object in javascript. I'm loading a large binary file from the server, and I'd rather stream it from the server similar to how html5 video is handled.

我可以使用 setRequestHeader 来设置 Range 标头.Chrome 中的网络检查器显示 Range 标头设置成功.但是,Accept-Encoding 标头设置为gzip,deflate",Chrome 不允许我设置该标头(来自 W3C 标准).

I can use setRequestHeader to set the Range header. The Network inspector in Chrome shows that the Range header is set successfully. However, the Accept-Encoding header is set to "gzip,deflate", and Chrome will not let me set that header (from W3C standards).

有什么方法可以强制服务器只响应来自 javascript 的 XMLHttpRequest 对象的 206 部分内容?

Is there any way to force the server to respond with a 206 partial content from the XMLHttpRequest object only from javascript?

推荐答案

我想我知道为什么 206 请求不起作用了.启用 gzip 压缩后,如果可以对传出数据进行 gzip 压缩,则范围标头将被忽略.

I think I figured out why the 206 request wasn't working. With gzip compression enabled, the range header gets ignored if the outgoing data can be gzipped.

我请求的文件是一个大型二进制文件,nginx 将其解释为具有 mimetype application/octet-stream.这是被 gzip 压缩的 mimetype 之一.如果我将文件重命名为 .png 文件类型,则图像/png mimetype 不会被压缩,因此范围请求可以正常工作.

The file I was requesting was a large binary file, which nginx interpreted as having mimetype application/octet-stream. This is one of the mimetypes that gets gzipped. If I renamed the file to have a .png filetype, the image/png mimetype is not gzipped, and hence the range request works correctly.

这也是为什么将带有 curl 的 Accept-Encoding 标头设置为 identity 也允许范围请求正常工作的原因.但是,我无法从 XHR 更改该标题.

This is also why setting the Accept-Encoding header with curl to identity also allows the range request to work fine. However, I cannot change that header from an XHR.

解决方案:更改服务器上的 mimetype 表!

Solution: Change the mimetype table on the server!

这篇关于XMLHttpRequest 206 部分内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)