2021-04-20-JavaWeb项目跨域解决方案

1、为什么会有跨域问题的存在?

JavaScript出于安全方面的考虑,不允许跨域调用其他项目的对象,即同源政策。
所谓同源是指:协议相同,域名相同,端口相同。

比如:http://www.example.com/zw/index.html
协议是:http://
域名是:www.example.com
端口号是:80(默认端口可以省略),
它的同源情况如下:
http://www.example.com/zwxk/manager.html 同源
https://www.example.com/zw/index.html 不同源
http://examle.com/zw/index.html 不同源
http://www.example.com:81zw/index.html 不同源

2、同源政策的目的

同源策略的目的是为了保证用户信息的安全。防止恶意的网站盗取数据。
设想这样一个情景:A网站是一家银行,用户登录以后,又去浏览其他的网站B,如果网站B可以读取A网站的Cookie,会发生什么问题?

3、非同源限制范围

随着互联网的发展,“同源政策”越来越严格。目前,如果非同源,共有三种行为受到限制。

  • Cookie、LocalStorage和IndexDB无法获取。
  • DOM无法获得。
  • AJAX请求不能发送。

4、解决跨域问题方案

  • 1、表单提交(http:xxxx):加上http://
  • 2、a标签,也要加上http://
  • 3、location.href和a标签一样,加上http://
  • 4、JavaScript<script>标签,src里面添加http://。。。
  • 5、Ajax的JSONP
    $.ajax({
    url:“http://localhost:8080/hello”,
    dataType:“jsonp”,
    jsonpCallback:“callback”,
    success:function (data) {
    alert(data);
    }
    });

jsonp会自动帮我们在浏览器内创建一个callbak(data)的函数,只需后台返回该函数即可实现跨域发送请求,并接收数据
@RequestMapping(value = “/hello”)
@ResponseBody
@CrossOrigin
public String hello(String callback){
System.out.println(“HelloController.hello”);
return callback != null?callback+"(‘msg’)":“msg”;
}

后面的是防止有人在地址栏敲,callback+"(‘msg’)"是响应给浏览器一个函数名字,让浏览器去找到jsonp帮我们创建的等同名字的函数
上面两个要配套使用

  • 6、@CrossOrigin
    @CrossOrigin注解给响应头中添加了一个Access-Control-Allow-Origin: *属性来完成跨域

  • 7、通过修改document.domain来跨子域

  • 8、使用window.name来进行跨域:window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值