我正在使用 jQuery 的 ajax 调用来发出 CORS 请求,如果我设置它就会工作
var headers = {};
但是由于我想要获取的内容相当大,我想发送范围 header 。
(这全部经过测试并在同一域中工作)
所以,当我这样做时:
var headers = {"Range":"bytes=" + start + "-" + end};
$.ajax({
url:url,
type:type,
headers:headers,
dataType:dataType,
success:function (data, status, jqXHR) {
//
}, error:function (data, status, jqXHR) {
//
}
});
对于我们的其他域,请求在最新的 Chrome 和 FF 中被取消。
如果我关闭 header ,一切正常,但随后我会收到兆字节的数据,并且浏览器无法处理/解析这么多数据。
这是来自服务器的 header (我控制它,所以我可以编辑它)
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: OPTIONS, GET, POST
Access-Control-Allow-Headers: Content-Type, Authorization, Accept, Range, Origin
Access-Control-Expose-Headers: Content-Range
Access-Control-Max-Age: 3600
我是否做错了什么,或者通过 CORS 发送范围请求在最新的浏览器中尚未正确实现?
(旁注,即使我允许在 Expose-Headers 中使用它们,chrome 也不会返回 header ,但这是 chromium 邮件列表上的已知错误,但我可以先发出一个 get 请求来找出文件大小)
最佳答案
我在处理上一个项目时遇到了类似的问题。 这是我所做的:
1) 在服务器端处理返回访问控制 header 的 OPTIONS 请求,例如:
Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST, OPTIONS Access-Control-Max-Age: 1000 Access-Control-Allow-Headers: Origin, Content-Type, Accept
2) 在服务器上处理 POST 方法并添加 header
Access-Control-Allow-Origin: *
3) 在 JavaScript 中:
jQuery.ajax({ url: gate, type: "POST", data: JSON.stringify(post_data), contentType: "application/json; charset=UTF-8", crossDomain: true, success: function(data){ // }, });
希望对你有帮助
关于发送范围请求时,jQuery CORS 请求不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9822709/