在新同事的建议下,我们开发的接口统一改为符合 restful 规范的形式。
尝试改造后,前端同事以 DELETE 方式请求接口时,出现了 405 (跨域)错误。
由于在之前的工程中有同事解决过这个问题,所以跟他请教了一下,得到的答案是:
“在原工程中,搜索 ‘<filter-name>CorsFilter</filter-name>’ 就行 ”。
按照他的提示在原工程的 web.xml 文件中找到了相关配置,但后来发现当前工程中也有相同的配置。
在详细看了配置信息之后,我做了如下的尝试:
在其中的
<init-param> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> </init-param>
PUT 之后加上 DELETE:
<init-param> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE,PATCH</param-value> </init-param>
问题解决
以下是配置详情:
<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,DELETE,PATCH</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>