发送范围请求时jQuery CORS请求不起作用

Posted

技术标签:

【中文标题】发送范围请求时jQuery CORS请求不起作用【英文标题】:jQuery CORS request not working when sending Range request 【发布时间】:2012-04-07 00:57:04 【问题描述】:

我正在使用 jQuery 的 ajax 调用来发出 CORS 请求,如果我设置了它就可以工作

var headers = ;

但由于我要获取的内容相当大,我想发送范围标头。

(所有这些都经过测试并在同一个域中工作)

所以,当我这样做时:

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 中被取消。

如果我关闭标头,一切正常,但随后我得到数兆字节的数据,而浏览器无法处理/解析该数量的数据。

这是来自服务器的标题(我控制它,所以我可以编辑它)

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 也不会返回标题,但这是 chromium 邮件列表中已知的错误,但我可以先发出一个获取请求以找出文件大小)

【问题讨论】:

您是否尝试过设置服务器的标头以返回对Access-Control-Allow-Origin 而不是* 提出请求的实际域? 是您请求的可用于测试的跨域网址 【参考方案1】:

我在上一个项目工作时遇到了类似的问题。 这是我所做的:

1) 在服务器端处理 OPTIONS 请求返回 Access-Control 标头,如:

访问控制允许来源:* 访问控制允许方法:POST、OPTIONS 访问控制最大年龄:1000 访问控制允许标头:来源、内容类型、接受

2) 在服务器上处理 POST 方法并添加标头

访问控制允许来源:*

3) 在javascript中:

jQuery.ajax( 网址:门, 类型:“发布”, 数据:JSON.stringify(post_data), contentType: "应用程序/json; charset=UTF-8", 跨域:是的, 成功:函数(数据) // , );

希望对你有帮助

【讨论】:

以上是关于发送范围请求时jQuery CORS请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CORS 同步请求在 Firefox 中不起作用

尽管使用了 CORS,但对 expressjs 的 POST 请求不起作用

CORS POST 请求不起作用 - 选项(错误请求) - 不允许来源

CORS XHR 重定向不起作用

FireFox 不发送 CORS 请求(使用 jQuery)

收到ajax POST请求时PHP mail()不起作用