AngularJS和rails cors标头不起作用
Posted
技术标签:
【中文标题】AngularJS和rails cors标头不起作用【英文标题】:AngularJS and rails cors headers not working 【发布时间】:2014-05-03 10:44:33 【问题描述】:我正在尝试构建一个角度水疗中心,但在使用 cors 时遇到了问题。我的 api 在 rails 上运行。
GET 请求正常工作,但 POST、PUT、DELETE 不起作用。消息是:
XMLHttpRequest cannot load http://localhost:3001/api/resources. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8888' is therefore not allowed access.
在 Rails 中,我有一个带有以下代码的 before_filter:
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS'
headers['Access-Control-Request-Method'] = '*'
headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
在路线中:
match '/*path' => 'sessions#home', :via => :options
在角度配置中我设置了这个:
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
对此有什么想法吗?我在 Mac 上,本地主机顺便说一句
编辑
此消息显示在 chrome 网络选项卡的标题中:
CAUTION: provisional headers are shown
【问题讨论】:
您是否尝试过不止一种浏览器?不管你信不信,我在 chrome 中遇到过这个问题,但它在 Firefox 中运行良好。 您可以发布请求/响应详细信息吗? 添加了我认为重要的唯一内容。见帖子 【参考方案1】:问题似乎与rails配置有关。
Here 声明:
...我们可能希望禁用对 API 的 CSRF 保护,因为它们通常被设计为无状态。也就是说,请求 API 客户端将为您处理会话,而不是 Rails....
虽然不是 Angular(我认为这个问题无关紧要),this repo(我最近准备的)可能对遇到这个问题的任何人都有帮助。它包含为使用 CORS 的 Rails SPA 准备骨架的分步指南。
【讨论】:
【参考方案2】:有一些选项可以在 Chrome 中禁用网络安全以允许跨域请求,但这绝不是最好的方法。
在 Mac 上:
open -a Google\ Chrome --args --disable-web-security
或者在您的 ajax 调用中尝试使用 dataType: 'JSONP'
。
【讨论】:
以上是关于AngularJS和rails cors标头不起作用的主要内容,如果未能解决你的问题,请参考以下文章