[10]浏览器的同源策略你清楚吗?

 

概述

我们结合生活去再理解一下: 假如你们家的房子,是不是不允许陌生人进入,如果可以随便进入,那么就有可能被盗了,那么这个时候,锁和钥匙就出现了为了保证家的安全。这个锁和钥匙就是这里的同源策略

同源策略:要求一个服务器上的网页,只能请求这个服务器上的资源

同源策略就是指必须在同一个协议,域名,端口号下,而且三者必须一致的。

 

处理方案

①CORS

CORS是基于http1.1的一种跨域解决方案,它的全称是Cross-Origin Resource Sharing,跨域资源共享。

它的总体思路是:如果浏览器要跨域访问服务器的资源,需要获得服务器的允许

Access-Control-Allow-Origin: http://a.com

 

②反向代理

 

 

nginx的配置反向代理

 

③jsonp

只支持get请求,还很麻烦

利用了script脚本不受同源策略限制

  

  前端部分: 
  
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>JSONP简单实现</title>
   </head>
      <body>
         <button id="btn">点击发送请求</button>
         <script>
            function getJsonpData(data) {
               console.log("获取数据成功")
               console.log(data) //{name:'tom'}
            }
            var btn = document.getElementById("btn");
            btn.onclick = function () {
               //创建script标签
               var script = document.createElement("script");
               script.src = 'http://localhost:3000/user?callback=getJsonpData';
               document.body.appendChild(script);
               script.onload = function () {
                  document.body.removeChild(script)
               }
              //getJsonpData({name:"tom"})
            }
         </script>
      </body>
   </html>


后端:

 //路由配置
   app.get("/user",(req,res)=>{
      //1.获取客户端发送过来的回调函数的名字
      let fnName = req.query.callback;
      //2.得到要通过JSONP形式发送给客户端的数据
      const data = {name:'tom'}
      //3.根据前两步得到的数据,拼接出个函数调用的字符串
      let result = `${fnName}({name:"tom"})`
      //4.把上步拼接得到的字符串,响应给客户端的<script> 标签进行解析执行
      res.send(result);
     
      //getJsonpData({name:"tom"})
   })

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值