Ember js 'Access-Control-Allow-Origin' 报错,解决代码放在哪里

Posted

技术标签:

【中文标题】Ember js \'Access-Control-Allow-Origin\' 报错,解决代码放在哪里【英文标题】:Ember js 'Access-Control-Allow-Origin' error , Where to place the solution codeEmber js 'Access-Control-Allow-Origin' 报错,解决代码放在哪里 【发布时间】:2015-09-14 10:01:34 【问题描述】:

关于 CORS 和“Access-Control-Allow-Origin”错误的讨论很多,我已经尝试并阅读(现在做了 2 天)很多潜在的解决方案,但我关心的是在哪里放置解决方案代码.我需要如何以及在哪个文件中更改标头以授予对所有跨服务器调用的访问权限。 我正在使用 Ember CLI、Tomcat Apache(从数据库中获取数据)、在 Chrome 上运行并使用 ember-data。 可能是一个菜鸟问题,但我真的无法摆脱它,真的需要帮助。 提前致谢。

更新:我正在通过 Eclipse 运行 Apache Tomcat 7,并使用简单的 JAVA OracleJDBC 请求/响应来获取数据。

【问题讨论】:

我不确定在您使用 apache 时它对您的情况有多大帮助,但您可以查看我有时为 cors 写的这篇 (aameer.github.io/articles/cross-origin-resource-sharing-cors) 帖子。希望对你有帮助 @sidharth,您可以在 config/environment.js 文件中设置 ENV.contentSecurityPolicyHeader = 'Disabled-Content-Security-Policy' 以禁用错误。 @Aameer 谢谢,我从中了解到我们需要为客户端和服务器端设置 CORS 标头。我说的对吗? @phkavitha 您建议的方法没有消除“Access-Control-Allow-Origin”错误。 @sidharth 是的,你两边都需要它 【参考方案1】:

基本上这个错误不是 Ember-Cli 的。当您的 Ember 应用程序与您的服务器通信时,这就是您的服务器(在您的情况下为 tomcat)正在响应的内容。不知道你用的是什么版本的tomcat。但我将向您说明如何在 TomCat 7 中解决此问题。

打开您的web.xml 文件。它将位于apache-tomcat-directory/conf/。您可以在 XML 文件的 web-app 根之后添加过滤器以更改文件中任何位置的 CORS 行为。但我会建议你在Built in Filter Mappings 的部分之后这样做。

过滤器将如下所示:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

添加后,您将能够绕过此错误。但仅当您出于开发目的而这样做时才建议这样做。请阅读here 完整了解TomCat 的CORS filter。

【讨论】:

我正在使用 Tom Cat 7,并通过 eclipse 运行它。您的解决方案似乎没有绕过该问题,因为我仍然遇到相同的错误,尽管它将 url 方法从之前显示的“OPTION”更改为“GET”。知道为什么吗? 当我做出这些改变时,我发现了一件以前没有发生过的新事情。当我通过浏览器直接访问服务器以获取数据库时,它不显示而是给出错误:--------。>>“ >HTTP 状态 405 - 此 URL 类型不支持 HTTP 方法 GET 状态报告消息 HTTP此 URL 描述不支持方法 GET 请求的资源不允许使用指定的 HTTP 方法。" 尝试在&lt;filter&gt;下添加这些:&lt;init-param&gt;&lt;param-name&gt;cors.allowed.methods&lt;/param-name&gt;&lt;param-value&gt;GET,POST,HEAD,OPTIONS,PUT&lt;/param-value&lt;/init-param&gt; 然而,这似乎很有效 >>>>>Ember.$.getJSON('localhost:8082/connection/testdb?tablename=members', function(data) console.log(data.members[0].response) ;) 需要使用标签“ember g http-proxy posts”才能跨服务器。

以上是关于Ember js 'Access-Control-Allow-Origin' 报错,解决代码放在哪里的主要内容,如果未能解决你的问题,请参考以下文章

Ember.js - 将 ember-cli-mirage 用于假模型时未找到模型

Ember.js 和 RequireJS

Ember.js 中的视图与组件

toastr 和 ember.js

Ember.js 和玩!框架身份验证最佳实践

Ember.js:Handlebars 不显示任何内容