【问题标题】:CORS issue with TomcatTomcat的CORS问题
【发布时间】:2016-01-13 02:04:29
【问题描述】:

我们有一个 tomcat 网络服务器 (server1),它托管了几个包含 JavaScript 的网页,以调用托管在不同网络服务器 (server2) 上的后端 API。

当我导航到 server1 上的网页时,它会抛出错误 -

“跨域请求被阻止:同源策略不允许读取 server2/api 上的远程资源。(原因:CORS 请求失败)。”

当我直接从 POST 客户端调用 server2 上的 api 时,我能够得到响应。

我了解我们必须在服务器上启用 CORS。但是我们应该在哪个服务器上启用 CORS?是托管网页的 Tomcat 服务器 (server1) 还是托管 API 的 API 服务器 (server2)?

此外,我们尝试通过按照http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter 添加过滤器在 Tomcat 上启用 CORS 但这没有帮助。

请指教。

问候, 瑞特维克

【问题讨论】:

  • 它将是 API 服务器 (server2)。如果您正确配置它应该可以工作,但是您需要提供有关 server2 上设置的更多信息,以便任何人都能够帮助您 - 什么为您的 API 提供服务?小服务程序?有什么框架吗?您是否正确映射了路径?等
  • 您可以查看here
  • @CupawnTae,一个后续问题 - 为什么现在请求甚至没有到达 server2?我可以看到请求进入 server1 并返回 http304。但我什至看不到进入 server2 网络日志的请求。

标签: javascript api tomcat7 cors


【解决方案1】:

CORS 需要呼叫的接收者来允许或禁止。在您的场景中,您需要 server2 来允许 server1 的连接。

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

确保您的白名单包含正确的 URL,例如 https://server1:8081/,因为所有协议、主机和端口都需要匹配!

http://enable-cors.org/server_tomcat.html

【讨论】:

  • 是的,这是一个很好的资源,可以帮助您了解 CORS。
  • @Marged,感谢您的回复。我有个问题。我什至没有看到请求到达 server2。在 server1 上,我看到 HTTP 304。在 server2 上启用 CORS 是否会确保请求到达 server2 并且 server2 能够为其提供服务?
  • @Ritwik 是的,它会的。我见过隐藏预检 CORS 请求的浏览器,它可能不会显示在 server2 的日志文件中。查看它们的最安全方法是使用浏览器或 Wireshark 提供的网络跟踪。
猜你喜欢
  • 2017-10-27
  • 2017-02-26
  • 2021-10-27
  • 1970-01-01
  • 2018-04-04
  • 2015-06-29
  • 2021-11-16
  • 2017-04-22
相关资源
最近更新 更多