美文网首页
跨域问题总结

跨域问题总结

作者: 西北有高楼lee | 来源:发表于2021-04-27 16:36 被阅读0次

跨域问题的总结

1、为什么会有跨域问题

原因是浏览器为了安全,而采用的同源策略(Same origon policy)

2、什么是同源策略

  • 同源策略是由Netscape提出的一个和著名的安全策略,现在所有支持javascript的浏览器都会使用这个策略
  • web是构建在同源策略基础上的,浏览器只是针对同源策略的一种实现
  • 所谓同源是指:协议,域名(IP),端口必须完全相同,即只有三者都相同才能算是在一个域里

备注:规则列举如下(假设已有网站地址为:http://study.cn

请求地址 形式 结果
http://study.cn/test/a.html 协议,域名,端口均相同 成功
http://study.cn/user/a.html 协议,域名,端口均相同 成功
http://a.study.cn/test/a.html 域名不同 失败
http://study.cn:8080/test/a.html 端口号不同 失败
https://study.cn/test/a.html 协议不同 失败

3、没有同源策略的危险场景

有一天你刚睡醒,收到一封邮件,说是你的银行账号有风险,赶紧点进www.yinghang com改密码。你着急的赶紧点进去,还是熟悉的银行登录界面,你果断输入你的账号密码,登录进去看看钱有没有少了,睡眼朦胧的你没看清楚,平时访问的银行网站是www.yinhang.com,而现在访问的是www.yinghang.com,随后你来了一条短信,钱没了,这个钓鱼网站做了什么呢?大概是如下思路:

    <iframe id="baidu" src="https://www.baidu.com"></iframe>
    <script>
        const iframe=window.frames["baidu"];
        const inputNode=iframe.document.getElementById("输入敏感信息的input框的id");
        console.log(inputNode.value);//获取用户所输入的内容
    </script>

4、非同源受到哪些限制

  • Cookie不能读取
  • DOM无法获得
  • Ajax请求不能发送

5、JSONP解决跨域问题

(1)jsonp是什么

JSONP(JSON with Padding),是一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来,只支持get请求。

(2)jsonp的原理

在网页有一些标签天生具有跨域能力,比如:img link iframe script。JSONP就是利用script标签的跨域能力来发送请求的。

(3)jsonp的使用
  • 原生JS封装jsonp

    前端流程:

    --创建script标签,指定src,利用标签把请求发出去

    --定义好一个数据处理的函数

    --把数据处理函数的名称传递给后端

    <button id="btn">点我发送请求</button>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
    <script>
        let btn=document.getElementById("btn");
        btn.onclick=function(){
            //1.动态创建script标签
            let scriptNode=document.createElement("script");
            //2.定义一个接收数据的函数
            window.getData=function(data){
                console.log(data);
            };
            //3.利用标签把请求发出去
            scriptNode.src="http://localhost:3000/test_get?callback=getData";
            //4.将标签放入页面,目的是把请求发出去
            document.body.appendChild(scriptNode);
        };
    </script>

后端返回符合js函数调用语法的字符串:

app.get("/test_get",(request,response)=>{
    let {callback}=request.query;
    let arr=[{name:"dexter",age:25},{name:"messi",age:32}];
    response.send(`${callback}(${JSON.stringify(arr)})`);
})
  • jQuery封装jsonp

使用jQuery封装jsonp(标准写法)

$.ajax("http://localhost:3000/test_get",{
    method:"GET",
    dataType:"jsonp",
    data:{
        name:"zhangsan",
        age:32
    },
    success:function(data){
        console.log(data);
    },
    error:function(err){
        console.log(err);
    }
})

使用jQuery封装jsonp(简写)

$.getJSON("http://localhost:3000/test_get?callback=?",{
    name:"zhangsan",
    age:32}, (data)=>{
            console.log(data);
            })

后端代码与原生JS封装的一样

(4)jsonp的局限性

只能解决GET请求的跨域问题

必须要后端人员的配合

6、CORS解决跨域问题

(1)CORS是什么

CORS(Cross-Origin Resource Sharing),跨域资源共享。CORS是官方的跨域解决方案,它的特点是不需要在客户端做任何特殊的操作,完全在服务器中进行处理,支持get和post请求。

(2)CORS的工作原理

CORS是通过设置一个响应头来告诉浏览器,该请求允许跨域,浏览器收到该响应以后就会对响应放行。

(3)CORS的使用

只需要在服务器中设置一行响应头就可以解决跨域问题

response.set("Access-Control-Allow-Origin","*");

*表示允许所有的跨域请求,也可以写指定的端口号

相关文章

  • HTML-获取iframe元素的正确方法

    跨域相关文章详解js跨域问题JavaScript跨域总结与解决办法 解释最清楚的jsonpWhat is JSON...

  • 深入跨域问题(3) - 利用 JSONP 解决跨域

    深入跨域问题(1) - 初识 CORS 跨域资源共享;深入跨域问题(2) - 利用 CORS 解决跨域深入跨域问题...

  • 跨域与常用方案

    本文源自一次内部关于跨域的讨论分享的总结 理解跨域的重点在于:了解跨域产生的场景、原理 跨域问题只在浏览器客户端环...

  • 跨域问题总结

    跨域, 为什么需要跨域?跨域有什么不好?怎么实现跨域? 一、什么是跨域 只要协议、域名、端口有任何一个不同,都被当...

  • 跨域问题总结

    跨域, 为什么需要跨域?跨域有什么不好?怎么实现跨域? 一、什么是跨域 只要协议、域名、端口有任何一个不同,都被当...

  • 跨域问题总结

    跨域问题的总结 1、为什么会有跨域问题 原因是浏览器为了安全,而采用的同源策略(Same origon polic...

  • 深入跨域问题(2) - 利用 CORS 解决跨域

    阅读目录: 深入跨域问题(1) - 初识 CORS 跨域资源共享;深入跨域问题(2) - 利用 CORS 解决跨域...

  • 跨域详谈(未完待续)

    作为一个前端,不论工作还是面试,跨域问题都是我们避不开的难点,所以我想写篇文章总结下跨域问题的正确的解决方式。 跨...

  • 深入跨域问题(4) - 利用代解解决跨域

    阅读目录 深入跨域问题(1) - 初识 CORS 跨域资源共享;深入跨域问题(2) - 利用 CORS 解决跨域深...

  • 浅谈前端跨域问题

    最近由于公司的一个项目需求需要前端解决跨域问题,因此学习了下跨域的相关知识,这里做一个总结,方便后期查阅。在讲跨域...

网友评论

      本文标题:跨域问题总结

      本文链接:https://www.haomeiwen.com/subject/jpcprltx.html