服务器已被修改为发送正确的请求标头。
服务器 - 响应标头:
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 Code
我正在使用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。访问控制允许原产地不允许源 http://a.bar.com。
问题
我还缺少什么吗?我想避免使用JSONP,主要是因为我需要POST支持。
感谢您的任何指示和帮助。
我没有为 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。