需要帮助在 tomcat 上设置 CORS

Posted

技术标签:

【中文标题】需要帮助在 tomcat 上设置 CORS【英文标题】:Need help setting up CORS on tomcat 【发布时间】:2014-09-28 13:25:21 【问题描述】:

我现在很困惑如何让 CORS 在我的 Tomcat 服务器上正常工作。我有一个提供 REST API 的应用程序。通过使用名为 Advanced Rest Client 的 Chrome 应用程序进行测试,此 API 可以正常工作。这就是我感到困惑的地方......

    我需要编辑整个 Tomcat 服务器的 web.xml 文件还是只编辑我正在使用的特定 Web 应用程序中的那个? 为什么我的呼叫是通过 Advanced Rest Client(它是浏览器中的网络应用程序)而不是通过我的网页进行的?

我可以提供您希望帮助更好地描述此问题的任何信息。这是我在这里的第一篇文章,所以请原谅缺乏任何预期的信息。如果您想查看我正在放置的呼叫或过滤器或我用来拨打电话的 javascript,请询问。我只是不确定需要什么来帮助揭穿这样的事情。非常感谢!

【问题讨论】:

【参考方案1】:

我需要编辑整个 Tomcat 服务器的 web.xml 文件还是只编辑我正在使用的特定 Web 应用程序中的那个?

取决于你在做什么。如果您编辑全局 web.xml,您当然会为每个匹配过滤器定义的 URL 模式启用 CORS。如果您插入以下内容,请说:

CorsFilterorg.apache.catalina.filters.CorsFilter过滤器> CorsFilter/*

然后,所有转到 http://myhost.mydomain/myapp/* 的 AJAX 调用都将启用 CORS。您还可以使用 this filter 将 CORS 限制为仅一个 WAR 文件 - 当然优势是:您不必编辑全局 web.xml 文件

为什么我的呼叫是通过 Advanced Rest Client(它是浏览器中的网络应用程序)而不是通过我的网页进行的?

不可能说没有请求/响应通信的日志,但这个 Advanced Rest Client 很可能是受信任的,因此不需要进行 CORS 调用(毕竟,它不是从站点 A 加载并尝试访问站点 B通过 AJAX,但由您(用户)明确安装)。您可以在 Chrome 开发工具中找到:查看每个 GET/POST 请求是否有 Origin: http://foo.example 标头。如果是,那么它是 CORS,如果不是,那么不是。

Chrome extensions developer page 中的这一段表明了这一点:

常规网页可以使用 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到同源策略的限制。 扩展并没有那么有限。扩展程序可以与其源之外的远程服务器通信,只要它首先请求跨域权限。

【讨论】:

以上是关于需要帮助在 tomcat 上设置 CORS的主要内容,如果未能解决你的问题,请参考以下文章

在 Hibernate 5、Tomcat 8 中配置数据源

tomcat设置httpOnly

如何访问阿里云服务器上的tomcat

需要帮助解决使用 Tomcat 在 Spring 应用程序中启用异步支持的问题

Tomcat在Linux服务器上的BIONIOAPR模式设置

需要帮助以了解和实施基本的 Web 应用程序安全性