即使服务器将Access-Control-Allow-Origin设置为'*',也会出现javascript错误

时间:2012-08-07 23:50:27

标签: javascript jquery spring-mvc cross-domain cors

服务器已被修改为发送正确的请求标头。

服务器 - 响应标头:

Access-Control-Max-Age: 86400
Access-Control-Allow-Methods: GET, OPTIONS, POST
Access-Control-Allow-Origin: * 
Access-Control-Allow-Headers: Content-Type, X-Requested-With

我正在使用Spring web mvc作为服务器(a.foo.com),并使用mvc拦截器来设置HttpResponseHeaders。

我还尝试将原点设置为请求的域,而不是'*'。

客户端 - jQuery代码

我正在使用jQuery / AJAX - jquery 1.7.1 以下是POST请求的摘要。

var settings = {};
settings.url = "http://a.foo.com/api";
settings.type = 'POST';
settings.data = JSON.stringify(request);
settings.dataType = 'json';
settings.contentType = 'application/json; charset=utf-8';
settings.crossDomain = true; // adding or removing this, didn't make a difference
.... (setup callbacks etc)
jQuery.ajax(settings);

网站 - html / js托管于a.bar.com

客户端错误 - javascript控制台(在chrome上测试)

XMLHttpRequest无法加载http://a.foo.com/api。 Access-Control-Allow-Origin不允许原点http://a.bar.com

问题

还有什么我想念的吗?我想避免使用JSONP,主要是因为我需要POST支持。

感谢您的任何指示,以及您的帮助。

1 个答案:

答案 0 :(得分:1)

我没有为OPTIONS请求设置响应标头。我正在为GET / POST请求设置它。

关注此博客后: http://zhentao-li.blogspot.com/2012/06/enable-cors-support-in-rest-services.html

现在当我使用请求方法OPTIONS / GET / POST命中端点(a.foo.com/api/*)时,我得到以下标题:

Date: Wed, 08 Aug 2012 02:58:05 GMT  
Connection: keep-alive  
Content-Length: 0   
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS   
Server: Apache-Coyote/1.1   
Access-Control-Max-Age: 1800  
Access-Control-Allow-Methods: GET, POST, PUT, DELETE  
Content-Type: text/plain; charset=UTF-8   
Access-Control-Allow-Origin: *  
Access-Control-Allow-Headers: Content-Type

我在Chrome上对此进行了测试。我想知道IE是否会出现问题! :) 我也希望能与IE9一起工作,但从我读到的内容来看,我不应该抱有希望。

感谢@Strelok的建议。还有@sth和@xdazz。