ajax跨域解决方案以及spring mvc中的支持

前端之家收集整理的这篇文章主要介绍了ajax跨域解决方案以及spring mvc中的支持前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

ajax跨域问题主要有有三种解决方法

1、使用代理将需要跨域的地址挂载到本域下面

2、使用jsonp

3、使用Access-Control-Allow-Origin响应头


第一种方案需要引入代理服务器,生产环境中一般都会用Nginx或者apache http做负载均衡,可以很容易实现,自己的开发环境一般都没有这东西,需要引入,增加了复杂性

第二种方案需要修改返回的数据,跨域请求的响应需要封装成callback('{a:''b"}')的格式

第三种是W3C为解决跨域问题引入的新特性(好像是HTML5引入的),目前大部分教新的浏览器都支持,只需要在响应头中加入Access-Control-Allow-Origin就可实现跨域


springmvc4.2开始提供开箱即用的跨域支持,只需要在mvc的配置文件中加入以下代码详细的配置参考官方文档

<mvc:annotation-driven/>

<mvc:cors>
<mvc:mapping path="/**"/>
</mvc:cors>


注意一定要加上<mvc:annotation-driven/>,之前用的是自定义的requestmapping,没有使用<mvc:annotation-driven/>导致跨域失败,调试后才发现,如果没有<mvc:annotation-driven/>,mvc获取不到cors的配置信息


默认情况下,ajax跨域请求是不会携带cookies的,有时候我们需要cookies,这时候就要加入跨域认证支持

<mvc:annotation-driven/>
<mvc:cors>
<mvc:mapping path="/rest/**"
allowed-origins="http://localhost"
allow-credentials="true"/>
</mvc:cors>


allow-credentials=true代表开启跨域认证,这样会增加一个响应头

  1. Access-Control-Allow-Credentials:
    true

allowed-origins代表可以跨域请求的域名,这里需要注意,如果加入了跨域认证支持allowed-origins必须是明确的域名,不能使用“*”通配

浏览器收到此响应头,下次请求就会将cookies带上

猜你在找的Ajax相关文章