该错误是因为浏览器发现发送的请求涉及到跨域,会先发送一个OPTIONS类型的预检请求,该请求需要服务器返回指定的Access-Control-Allow-*头信息,以表示允许跨域等。因此,可以在服务器端进行相应的设置,来避免该错误的出现。
一种解决方式是在Tomcat的web.xml文件中添加如下Filter:
CorsFilter
org.apache.catalina.filters.CorsFilter
cors.allowed.origins
*
cors.allowed.methods
GET,POST,HEAD,OPTIONS,PUT,DELETE
CorsFilter
/*
或者,修改Tomcat的conf/catalina.properties文件,添加如下配置:
cors.allowed.origins=*
cors.allowed.methods=GET,POST,HEAD,OPTIONS,PUT,DELETE
以上两种方式的实现效果是一样的,都会在Tomcat中添加一个Cors过滤器,用于处理跨域请求。其中,cors.allowed.origins
参数表示允许访问的源地址,*
表示任意源地址;cors.allowed.methods
参数表示允许访问的HTTP方法。
需要注意的是,以上方式只适用于Tomcat 7及以上版本。
参考资料:
https://tomcat.apache.org/tomcat-9.0-doc/config/filter.html#CORS_Filter
https://tomcat.apache.org/tomcat-9.0-doc/config/systemprops.html#CORS_Filter