解决ajax跨域访问和Content-Type问题,报No 'Access-Control-Allow-Origin' header错误

首先是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真的是神奇的东西。

猜你喜欢

转载自blog.csdn.net/qq_37804737/article/details/81297002