首先是No ‘Access-Control-Allow-Origin’ header is present on the requested resource。报这个错误不一定就是服务端不允许跨域访问,如果你已经允许服务端跨域了。
在Tomcat服务器下conf/web.xml中,或者项目WEB-INF/web.xml中,我选择的是在项目下配置过滤器。我验证了两个,一个是tomcat下自带的cors过滤器,一个是cors-filter-1.7.jar下的过滤器。
http://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter
这个是一个包,可以复制一个,然后在pom文件中添加,然后在项目的web.xml中加
<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>
其实不引入包也可以解决跨域问题,但是必须要在自己的项目web.xml中加CorsFilter。我估计是因为tomcat中有这个包了,所以不需要在项目中再导入包了。
当你引入这个你就以为结束了吗??如果ajax中不加content-type,是不可以有参数的,如果有参数,依然会报No ‘Access-Control-Allow-Origin’ header错误。
$.ajax({
type : 'post',
url : 'http:localhost:8080/test',
dataType : 'json',
data : {
user:11
},
success : function(data) {
console.log('test=>>>',data)
}
});
如果不加user:11,则一定会报错。哪怕url是不需要参数的链接,如果你不加也会报错。
如果一定不加参数,则加上”Content-Type: application/json;charset:utf-8”,就不会报错了。
百度搜索到这些内容:当不加Content-Type时,则默认为
application/x-www-form-urlencoded 。 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)。
百度又搜了一下,报No ‘Access-Control-Allow-Origin’ header错误的原因又很多,不只是这两个原因。
header真的是神奇的东西。