收藏区别技术点优化安全

跨域

2021-11-22  本文已影响0人  易路先登

发生地点:浏览器端
原因:浏览器的同源策略(安全策略)
限制对象:网页内发起的异步请求(ajax,fetch,axios)
统一资源定位符的构成:协议+ip+端口+资源路径(是否同源由协议+Ip+端口决定),这三个有任何一个不一样,就会造成跨域问题。
1、代理各脚手架都有提供配置方式,package.json里也可以,而且nginx配置
2、cores解决跨域,在响应头中设置对应字段"Access-Control-Allow-Origin":"*"
3、jsonp
(1)浏览器端的js代码动态生成一个scirpt标签,加载完文本就立即执行
(2)后端做的配合是返回一个js文本,响应类型改为text/plain
(3)前后端对变量名或函数名要做一个约定
服务端

const Koa = require('koa')
const router = require('koa-router')(); //注意:引入的方式
const app = new Koa()
const path = require('path')

router.get('/getdata',(ctx,next)=>{
    //ctx.set('Access-Control-Allow-Origin', '*')
    console.log('有人请求这个接口')
    let { callback } = ctx.query;
    ctx.type = 'text/plain'
    let arr = [1,2,3,4,5,6]
    ctx.body = `console.log("3333333${callback}");${callback}(${JSON.stringify(arr)})`
})
app.use(router.routes()); //作用:启动路由
app.use(router.allowedMethods());

// 静态资源
app.use(require('koa-static')(path.join(__dirname) + '/static'))


app.use(async (ctx) => {
  ctx.body = 'static file server'
})


app.listen(3033, () => {
  console.log('build success')
})

页面端

<!DOCTYPE html>
<html lang="en">
<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>Document</title>
</head>
<body>
    <div id="div">
       10922班优秀高薪 666
    </div>
    <script> 
         function returndata(data){
            console.log(data,'前端打印666666666666')
             return data
                
        }
        if(window.location.href.indexOf("3033")>0){
            console.log(window.location.href)
            console.log('服务端响应的页面')
            fetch('http://localhost:3033/getdata')
            .then(function(response) {
                return response.json();
            })
            .then(function(myJson) {
                console.log(myJson);
            });
        }else{
            console.log('野页面')
            // fetch('http://localhost:3033/getdata')
            // .then(function(response) {
            //     return response.json();
            // })
            // .then(function(myJson) {
            //     console.log(myJson);
            // });
            var script = document.createElement('script');
            script.setAttribute('id','99999')
            script.setAttribute('src','http://localhost:3033/getdata?callback=returndata');
            document.body.appendChild(script)
           
            setTimeout(()=>{//callback
                //console.log(data,'-----')
            },1000)
            
        }
    </script>

</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读