在我的Rails应用程序中从Angular控制器对opencalais API执行$ http.post时,我收到了一个Access-Control-Allow-Origin错误:
XMLHttpRequest无法加载https://api.thomsonreuters.com/permid/calais?access-token=APIKEY。 “Access-Control-Allow-Origin”标头的值“http://developer.permid.org”不等于提供的原点。因此,不允许原点“http://localhost:3000”访问。
这是我的Angular控制器中的API调用:
function fetchTags() {
var token = API-KEY,
query = $scope.brief.description;
$http.post('https://api.thomsonreuters.com/permid/calais?access-token=' + token, query, {
headers: {
'Content-Type': 'text/raw',
'OutputFormat': 'application/json',
'X-AG-Access-Token': API-KEY,
'Access-Control-Allow-Origin': '*'
}
}).success(function(data) {
console.log(data);
});
}
我已经阅读并尝试了几种不同的设置Access-Control标头的方法,可以通过Angular请求,也可以通过Rails application_controller.rb中的before_filter之类的东西,但它们似乎都会产生相同的响应。
此外,我已经在Postman中复制了请求,只需将URL和Headers设置为与上面相同,就可以完美地运行。
非常感谢任何想法或链接,谢谢
编辑:以下是Chrome的请求/响应标头:
请求:
OPTIONS / permid / calais?access-token = API-KEY HTTP / 1.1 主持人:api.thomsonreuters.com 连接:保持活力 访问控制请求方法:POST 来源:http://localhost:3000 用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10_10_4)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 44.0.2403.107 Safari / 537.36 Access-Control-Request-Headers:accept,access-control-allow-origin,content-type,outputformat,x-ag-access-token,x-csrf-token 接受: / DNT:1 推荐人:http://localhost:3000/ Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en; q = 0.8
响应:
HTTP / 1.1 200好的 Content-Type:application / json Access-Control-Allow-Origin:http://developer.permid.org Access-Control-Allow-Headers:accept,x-ag-access-token,authorization,outputformat,content-type,x-openmatch-numberofmatchesperrecord,x-openmatch-datatype,x-calais-language Access-Control-Max-Age:3628800 访问控制允许方法:GET,POST,OPTIONS 来源:http://localhost:3000 内容长度:0 连接:保持活力