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

标签 angularjs http-headers cors

使用AngularJS调用RESTFUL API。

在 IOS 上使用 Chrome 浏览器时,CORS 预检请求(OPTIONS 请求)的 Accept header 设置为 */*,image/webp。响应返回正常,但实际的 GET 请求从未发送。正如您在响应中看到的,Content-Type header 被设置为 image/webp,我怀疑这导致 AngularJS 中的 GET 请求出现问题。

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

完整请求 header :

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

完整响应 header :

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

最佳答案

嘿。 我刚刚在与 AngularJS-Service 不同的域上访问 REST-Service 时遇到了同样的事情。

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

设置“Access-Control-Allow-Headers”以确保它包含“Access-Control-Request-Headers”中的所有项目,这为我解决了这个问题。

马克,我发现在您的“Access-Control-Request-Headers”中请求了 header “origin”,但在您的“Access-Control-Allow-Headers”中缺少 header 。

发送以下响应 header 在我的情况下有效(appkey 是 header 中我的内部身份验证 key ):

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

希望这很清楚并且有帮助。 此致, 克里斯蒂安

PS:“Access-Control-Allow-Headers: *”在我的情况下不起作用

更新:

为了允许通过 POST-Request 提交表单,我必须将“content-type”添加到“Access-Control-Allow-Headers”

关于AngularJS 在 CORS 预检响应后不发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639210/

相关文章:

javascript - 在事件内使用 $scope - 谷歌地图 api

encoding - HTTP Accept-Encoding 并发送未编码的数据

css - 如果资源不允许 CORS,如何发出 "simple"GET 请求?

http - 关于 HSTS HTTP header 语法

javascript - "Access-Control-Allow-Origin"错误,当我有 "Access-Control-Allow-Origin: *"

javascript - 如何使用 Angular4 将网站下载为字符串?

java - 在 Spring Boot 中全局启用 CORS

angularjs - 如何使用 Protractor 更改计算机设备的日期和时间

function - AngularJS : From a factory, 如何调用另一个函数

javascript - Angular Directive(指令) : get input type ="number" value on keypress