我现在很困惑如何让CORS在我的Tomcat服务器上正常工作。我有一个提供REST API的应用程序。通过名为Advanced Rest Client的Chrome应用程序进行测试,此API工作正常。这是我感到困惑的地方......
我可以提供您希望帮助更好地描述此问题的任何信息。这是我在这里的第一篇帖子,请原谅我们缺少任何预期的信息。如果您想看到我要拨打的电话或过滤器或我用来打电话的javascript,请直接询问。我只是不确定需要什么来帮助揭穿这样的东西。非常感谢你!
答案 0 :(得分:0)
我是否需要编辑整个Tomcat服务器的web.xml文件,或者只是我正在使用的特定Web应用程序中的文件?
取决于你的目标。如果编辑全局web.xml,则当然可以为与筛选器定义匹配的每个URL模式启用CORS。假如您插入以下内容:
<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>
然后所有进入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对象从远程服务器发送和接收数据,但它们受到相同原始策略的限制。 扩展程度不是那么有限。扩展程序可以与其来源之外的远程服务器进行通信,只要它首先请求跨域权限。