我不知何故无法让它工作。我有一个在Tomcat 7服务器上运行的Java Servlet(在localhost:8080上运行),我想从不同的Web服务(在localhost:80上运行)发出PUT-Request。我已经在 Servlet-Code 和 Tomcat 配置中添加了 CORS-Accept-Header,但不知何故,当我尝试发出 PUT 请求时,我总是收到此错误:
[Error] Failed to load resource: Origin http://localhost is not allowed by Access-Control-Allow-Origin.
在我的Java Servlet中,我定义了以下标头:
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.addHeader("Access-Control-Max-Age", "86400");
在使用 response.addHeader 之前,我使用了 response.setHeader,但这对我的情况没有区别。在tomcat web.xml配置文件中,我添加了以下行:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
</init-param>
<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>
如 tomcat-7-docs 中所述:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter
我真的看不到我错过了什么
好的,我知道了。这个问题很简单,但它给我带来了很多麻烦。我正在使用 eclipse 编程,我是这个 IDE 的新手。Eclipse似乎在我的工作区的二进制.metadata文件夹中使用了它自己的Tomcat副本。如果其他人有这个问题:要么更改 eclipse 的 .metadata-文件夹中的 web.xml-File(它里面有 1:1 的 tomcat 副本),要么将 eclipse 设置为不使用它自己的 tomcat 副本。