启用 CORS Apache Tomcat 7.0.52 [重复]
Posted
技术标签:
【中文标题】启用 CORS Apache Tomcat 7.0.52 [重复]【英文标题】:Enable CORS Apache Tomcat 7.0.52 [duplicate] 【发布时间】:2015-07-22 04:40:47 【问题描述】:我一直在尝试在我的 Microsoft Azure Apache Tomcat 服务器上启用 CORS,并且我尝试了很多技术,但我仍然无法启动并运行 CORS。我已将此添加到 web.xml 文件中,但没有成功启用它。
<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>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我不断收到错误:
XMLHttpRequest 无法加载 url&output=json。不 请求中存在“Access-Control-Allow-Origin”标头 资源。 Origin 'http://url.net' 因此不允许访问。
关于如何快速实现这一目标的任何建议?我一直在网上查看大量资源,不幸的是我无法让它工作。期待您的建议。
【问题讨论】:
我已经尝试过了,但我没有发现这个答案有帮助,我认为我的服务器上仍然没有启用 CORS,尽管我做了上面提到的。还有更多步骤来验证这一点吗? 好的,米卡维利。我试一试。我会在一分钟后回复我的发现。 【参考方案1】:您的web.xml
看起来不错,所以我希望它会按要求设置响应标头(您的问题并没有说明这一点)。
但是在某些现代浏览器(Chrome、Firefox 等)上,您会发现它们不允许通配符来源:
<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-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>http://otherdomain.com</param-value>
</init-param>
有用的是,来源列表可以用逗号分隔:
可以指定 * 以允许从任何来源访问资源。 否则,可以提供逗号分隔来源的白名单。例如: http://www.w3.org,https://www.apache.org。默认值:*(任何来源都是 允许访问资源)
来源:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html
【讨论】:
感谢您的回答。我在提出请求时仍然遇到错误,并且我觉得 CORS 尚未启用。我正在从 apache-tomcat-7.0.52/conf/web.xml 区域更改 web.xml。我收到一个错误:"readyState":0,"status":0,"statusText":"NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'url'." 我的 DOM 显示我在问题中提到的错误。 服务器响应标头是什么样的?您可以在浏览器的开发人员视角中的网络选项卡中查看它们。 服务器响应头看起来没问题,并给出了正确的响应,即 200。Content-Length:66 Content-Type:application/json;charset=UTF-8 Date:Mon, 11 May 2015 15:45:43 GMT Server:Apache-Coyote/1.1
看看***.com/q/21792759/827480。过去我遇到过类似的 CORS 问题,并最终将调试器附加到 Tomcat 以逐步通过过滤器。如果有记忆,您可以修改记录器选项以查看过滤器中的调试语句,但我无法从此处访问源代码,并且不能很好地记住它们。
最重要的是确保您发送的所有标头都在 CORS 过滤器定义中。区分大小写。您可以使用 fiddler 或 charles 之类的代理(甚至是浏览器工具,具体取决于您的请求来自何处),并检查所有允许的标头是否都列在您的 CORS 定义中。以上是关于启用 CORS Apache Tomcat 7.0.52 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何启用 CORS tomcat 8.5 过滤器来访问静态文件?
Tomcat 启用 CORS:来自 Safari 的 POST 请求返回 200,Chrome 和 Firefox 返回 403