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

标签 javascript jquery spring-mvc cross-domain cors

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

服务器 - 响应 header :

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 。产地 http://a.bar.com Access-Control-Allow-Origin 不允许。

问题

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

感谢您的指点和帮助。

最佳答案

我没有为 OPTIONS 请求设置响应 header 。我将其设置为 GET/POST 请求。

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

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

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。

关于javascript - 即使服务器将 Access-Control-Allow-Origin 设置为 '*' 后也会出现 javascript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11855739/

相关文章:

javascript - 可以读取更多的按键吗?

jquery - 在单个网页上过滤大量图像 - 没有数据库

java - 在 Spring Boot 中以编程方式注册 Spring Converter

javascript - THREE.js 3d 球体上的 MouseEvent 未在正确的位置触发

javascript - 如何仅从内部修改指令范围属性

javascript - 为什么 prism.js 通过将语言类插入周围的 <pre> 标签来修改 DOM?

Java- hibernate : Generate sequence column based on another field

javascript - 右键单击时显示便签

jquery - 如何选择具有多个类的元素?

java - Spring multipartFile PUT 请求