CORS 不适用于 jQuery 和 Java

Posted

技术标签:

【中文标题】CORS 不适用于 jQuery 和 Java【英文标题】:CORS not working with jQuery and Java 【发布时间】:2014-02-09 19:46:24 【问题描述】:

我在尝试使用 jQuery 调用我的 Java RESTFUL API 时有点卡住了。

调试我发现 OPTIONS 和 GET 方法都被调用了,但是当 GET 方法在服务器中完成时,没有检索到 json 并且在浏览器中出现错误。

选项请求

OPTIONS /PTGServices/ptgapi/v1/clients/1/ngos HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
Access-Control-Request-Method: GET
Origin: http://localhost:8181
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/32.0.1700.76 Safari/537.36
Access-Control-Request-Headers: accept, cache-control, x-custom-1, x-custom-2, authorization
Accept: */*
Referer: http://localhost:8181/jquerysample/local/index.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: es-ES,es;q=0.8,en;q=0.6

选项响应

HTTP/1.1 204 Sin Contenido
Server: Apache-Coyote/1.1
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:8181
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Authorization,Cache-control,Content-Type,Origin,X-requested-with,X-custom-1,X-custom-2,WithCredentials
Access-Control-Max-Age: 60
Date: Mon, 20 Jan 2014 14:49:25 GMT

获取请求

Accept:*/*
Authorization:Basic dXNlcjp1c2Vy
Cache-Control:no-cache
Origin:http://localhost:8181
Referer:http://localhost:8181/jquerysample/local/index.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36
X-custom-1:value1
X-custom-2:value2

在 Chrome 中,此 GET 请求显示橙色警告,指示:“注意:显示临时标头”并且没有 GET 响应

在 Firefox 中,没有警告但响应也是空的。

经过一番研究,我发现这篇文章表明两个响应(OPTIONS 和 GET)都必须具有 Allow-Control 标头,所以我放了它但仍然不起作用...

http://kodemaniak.de/2010/07/cross-domain-ajax-with-restlet-and-jquery/

有什么想法吗?

谢谢!

更新 1:

我发现它可能是一个 Spring 集成“问题”,因为当我检索 Access-Allow-* 标头时,它正在映射到“X-Access-Allow-*”

【问题讨论】:

请显示您的服务器根据代理发送的所有GET响应头。 我已经更新了我的问题,因为我认为我已经解决了问题。 Antonio,您应该将DefaultHttpHeaderMapper 配置为userDefinedHeaderPrefix = null 或空字符串。默认是X- 谢谢!此时我发现这篇帖子forum.spring.io/forum/spring-projects/integration/… 表明了这种行为。 【参考方案1】:

Antonio,您应该将DefaultHttpHeaderMapper 配置为userDefinedHeaderPrefix = null 或空String。默认是X-

关于此事的JIRA票:https://jira.springsource.org/browse/INT-1722

【讨论】:

你好,安东尼奥!最好以某种方式完成这个问题。我们将重新考虑X- 行为,顺便说一句:jira.spring.io/browse/INT-3903

以上是关于CORS 不适用于 jQuery 和 Java的主要内容,如果未能解决你的问题,请参考以下文章

Java Spring REST API CORS 不适用于通过 jQuery 和 Chrome 的 DELETE 请求

CORS 不适用于 hapijs 和 socket.io

Cors 不适用于删除和放入 web api2

CORS 不适用于 .NET Core API 和 Angular 前端

xmlHttp.getResponseHeader + 不适用于 CORS

Go Restful API:CORS 配置适用于 React 但不适用于 Angular