可以't设法使CORS请求工作
Can't manage to make CORS request working
我正试图从另一个域上的Web服务获取一些数据,但遇到了一些CORS问题。
我的控制器里有这样的东西:
$http({method: 'GET', url : 'http://somewebserviceapi.com?idAppli=' + appId, headers: {'Authorization': 'Basic dXNlcm5hbWU6cGFzc3dvcmQ='}}).
success(function(data, status, headers, config) {
console.log(data);
}).
error(function() {
console.log("An error occured");
});
我得到了以下错误:
选项http://somewebserviceapi.com?idLangue=1&idAppli=2153 b@angular.js:9866n@angular js:9667$get.f@angular js:9383js:829
和
XMLHttpRequest无法加载http://somewebserviceapi.com?idLangue=1&idAppli=2153。请求的资源上不存在"Access Control Allow Origin"标头。原点'http://localhost:63342因此不允许访问。响应的HTTP状态代码为401。
现在是标题:
当它从我的控制器调用时:(似乎没有进行身份验证)
(响应)
Connection: Keep-Alive
Content-Length: 0
Date: Mon, 29 Jun 2015 14:33:09 GMT
Keep-Alive: timeout=5, max=100
Server: Apache
WWW-Authenticate: Negotiate
Basic realm="AD-ITS.SOME-COMPANY.COM"
(请求)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Access-Control-Request-Headers: authorization
Access-Control-Request-Methods: GET
Connection: keep-alive
Host: somewebserviceapi.com
Origin: http://localhost:63342
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
当我自己去网址:
(响应)
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type, Origin, Accept, Authorization
Access-Control-Allow-Methods: GET, POST, DELETE, PUT
Access-Control-Allow-Origin: *
Connection: Keep-Alive
Content-Length: 394
Content-Type: application/json;charset=UTF-8
Date: Mon, 29 Jun 2015 15:21:08 GMT
Keep-Alive: timeout=5, max=99
Server: Apache
(请求)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Connection: keep-alive
Cookie: JSESSIONID=89C1EC542BCBC42421C6207767EF8FA1
Host: http://somewebserviceapi.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
在Chrome上,除了响应和请求标头之外,还有一个可见的通用标头:在这个标题中,我有:
根据我的控制器请求:Request Method:OPTIONS
当我自己去URL时:Request Method:GET
显然,OPTIONS
方法是CORS处理某些事情的方式,但我需要在某个地方添加OPTIONS方法吗?
服务器端,我确实有Access-Control-Allow-Origin: *
行,所以我不知道如何解决这个问题。
这是典型的CORS问题,当您从JS进行调用并应用CORS逻辑时,将进行的第一个调用是OPTIONS
,它应该返回
200 OK
响应为空(不确定是否真的必须为空)
和标题:
Access-Control-Allow-Methods: GET, POST, DELETE, PUT
Access-Control-Allow-Origin: *
当OPTIONS
被正确配置时,如果该方法可以在Access-Control-Allow-Methods: GET, POST, DELETE, PUT
中找到,则将进行另一个调用
尽管CCD_ 10必须添加到CCD_ 11
这似乎与飞行前请求(OPTIONS请求)有关。请看一下这个SO问题:为什么经过身份验证的CORS请求的飞行前选项请求在Chrome中有效,而在Firefox中无效?:
如何使OPTIONS请求能够一致地发送和响应?
只需让服务器(本例中为API)响应OPTIONS请求而不需要身份验证。
Kinvey很好地扩展了这一点,同时也链接到了一个问题推特API概述了这个确切的第二十二条问题有趣的是,在出现任何浏览器问题前的几周已归档。
看看它是否适合你。(此外,由于这似乎也是一个与浏览器相关的问题,请查看不同的浏览器,看看会发生什么)
- 向localhost发出带有grunt的代理CORS请求
- Node.js cors请求-异步示例不起作用
- 是 CORS 请求,预检耗时
- Pingfederate opentoken模块CORS请求返回302,而不是200
- 在JQuery中启用CORS后,CORS请求被阻止
- 从CORS请求中捕获异步异常
- 无法在 jquery 中获取 Ajax CORS 请求以工作
- 将 CORS 请求发布到运行 sailsjs 的 HTTPS 域
- 授权标头仅在 AJAX CORS 请求中追加一次
- 使用 jQuery 的 CORS 请求 - $.ajax()
- 尝试处理 CORS 请求时出现 ParseError
- Firefox 不允许 CORS 请求,即使服务器返回了相应的响应标头
- CORS 请求与 Safari 一起工作
- IE11未启动CORS请求
- Safari阻止对Express API的CORS请求
- AngularJS不允许CORS请求
- CORS请求处于反应状态
- 为什么此CORS请求失败
- CORS请求结构很难理解,你能帮我解释一下吗
- 如何使用XMLHttpRequest发出CORS请求