跨域访问

什么是跨域访问

出于安全考虑,浏览器中设置了同源策略。限制从JS脚本发起的跨源HTTP请求
同源策略:要求发送请求的url地址和返回响应的url地址必须保证, 协议、IP地址、端口号不能够发生改变;只要这三个位置有一个发生变化, 那么浏览器就会认为这个响应不安全, 会拒绝接收响应数据, 就是跨域请求访问.

响应方能收到请求,也会返回响应,但是响应被请求方拒绝接收。
页面之间的跳转(即使带有数据),也不属于跨域访问。


DOM 层面的同源策略:限制了来自不同源的”Document”对象或 JS 脚本,对当前“document”对象的读取或设置某些属性
Cookie和XMLHttprequest层面的同源策略:禁止 Ajax 直接发起跨域HTTP请求(其实可以发送请求,结果被浏览器拦截,不展示),同时 Ajax 请求不能携带与本网站不同源的 Cookie。
同源策略的非绝对性:<script><img><iframe><link><video><audio>等带有src属性的标签可以从不同的域加载和执行资源。

解决方案

1、Jsonp

jquery如果发送ajax请求, 可以将数据类型设置为jsonp, 
原理是jquery在发送数据的同时, 会在数据中生成一个令牌, controller接收到数据后进行处理, 
返回响应的时候, 将令牌原样返回, jquery会判断令牌是否是当初自己发送的, 如果是接收响应, 如果不是, 会拒绝接收.

2、Cors

是w3c标准支持的解决方案, 原理是在响应头设置信息'Access-Control-Allow-Origin
如果使用了springMvc4.2以上版本, 可以使用@Cross注解, 就相当于设置了响应头信息.

CORS请求默认不发送Cookie, 如果要把Cookie发到服务器,指定Access-Control-Allow-Credentials字段。

response.setHeader("Access-Control-Allow-Origin", "http://localhost:8088");
response.setHeader("Access-Control-Allow-Credentials", "true");

示例补充

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值