Angular + Rails访问控制标头

时间:2015-07-28 13:10:54

标签: javascript ruby-on-rails ruby angularjs ruby-on-rails-4

在我的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   连接:保持活力

0 个答案:

没有答案