AngularJS在CORS预检响应后没有发送请求

时间:2014-10-29 19:42:27

标签: angularjs http-headers cors

使用AngularJS调用RESTFUL API。

在IOS上使用Chrome浏览器时,CORS预检请求(OPTIONS请求)Accept标头设置为*/*,image/webp。响应很好,但实际的GET请求永远不会被发送。正如您在响应中看到的那样,Content-Type标头设置为image/webp,我怀疑这会导致AngularJS中的问题继续向前推进GET请求。

我的假设是否正确?如果是,那么强制服务器将Content-Type设置为其他内容的解决方案是什么?

完整请求标头:

OPTIONS http://www.example.com:8080/resourceABC HTTP/1.1
Host: www.example.com:8080
Connection: keep-alive
Access-Control-Request-Headers: accept, authorization, origin
Access-Control-Request-Method: GET
Origin: http://www.example.com
Accept: */*,image/webp
Referer: http://www.example.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/38.0.2125.67 Mobile/12B411 Safari/600.1.4
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

完整回复标题:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Allow: GET,OPTIONS,HEAD
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS
Access-Control-Allow-Headers: X-HTTP-Method-Override, Content-Type, x-requested-with, authorization, accept
Access-Control-Max-Age: 3600
Content-Type: image/webp
Content-Length: 0
Date: Wed, 29 Oct 2014 19:26:37 GMT

1 个答案:

答案 0 :(得分:1)

HY。 我在AngularJS-Service的不同域上访问REST服务时也有同样的事情。

检查发送到我的REST服务的请求标头,看看我是否允许从客户端请求的所有内容导致以下内容:

设置'访问控制 - 允许 - 标题'以确保它包含“访问控制 - 请求 - 标题”中的所有项目的方式。为我解决了。

Marc我在您的“访问控制 - 请求 - 标题”中看到了这一点。标题"起源"请求,但在您的"访问控制允许标题"它不见了。

在我的情况下发送以下Response-Headers( appkey是我在标题中的内部auth-key ):

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Headers: appkey,content-type

希望这很清楚,这有帮助。 最好的祝福, 基督教

P.S。:"访问控制允许标题:*"在我的情况下不起作用

<强>更新

要通过POST-Request允许表单提交,我必须添加&#39; content-type&#39;到访问控制允许标题&#39;