发送Range请求时jQuery CORS请求不起作用

时间:2012-03-22 12:55:16

标签: jquery ajax http-headers cross-domain cors

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

1 个答案:

答案 0 :(得分:9)

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

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

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方法并添加标题

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){
            //
        },
    });

希望它会有所帮助