美文网首页待看
跨域的解决方案

跨域的解决方案

作者: 大萝蓓 | 来源:发表于2021-03-01 01:25 被阅读0次

    跨域的解决方案
    script,img,link,iframe,不存在跨域请求限制。
    1、JSONP,

    script//基于script标签做的跨域
    src="http://127.0.0.1:4000/list?callvack=func"
    function func(){//这个函数必须是全局函数
    ···
    }
    

    客户端向服务器发请求,同时会把本地的一个函数传递给服务器,服务器接受客户端的请求,同时拿到了callback=func。1、准备数据data={...}。2、给客户端返回数据,返回的一个字符串‘func(’+JSON.stringify(data)+')'。客户端接受到就开始搞事情了。
    问题:1、JSONP只能处理GET请求。2、安全性不好。

    2、CORS跨域资源共享
    客户端正常发请求,
    服务器端通过设置请求头允许源发送跨域请求(需要处理options试探性请求)。
    问题是不能用cookie,因为设置所有源都可以访问,这样传来传去会导致会不安全。
    3、proxy跨域代理

    module.exports = {
        //...
        devServer: {
            proxy: {
                '/api': {
                    target: 'http://www.baidu.com/',
                    pathRewrite: {
                        '^/api': ''
                    },
                    changeOrigin: true,
                    secure: false,
                }
            }
        }
    }
    

    '/api':捕获api的标志,如果api中有这个字符,那么就开始匹配代理,比如以上例子api请求/api/login,就会被代理到 'http://www.baidu.com/api/login'
    target:代理api地址,就是需要跨域的api地址。地址可以是域名,可以是IP地址。如果是域名的话需要加一个参数changeOrigin:true,否则会代理失败。
    pathRewrite:路径重写,也就是说会修改最终请求的api路径,比如访问的api路径/api/login,设置pathRewrite:{'^/api':' '}后,最终代理访问的路径为 'http://www.baidu.com/login',这个参数的目的是重新命名后,在访问时把命名删除掉。
    changeOrigin:这个参数可以让target参数是域名。
    secure:false,不检查安全问题。设置后接受运行在https上可以使用无效证书的后段服务器。
    4、ngnix反向代理,前端知道这个不需要前端做什么。
    5、postMessage
    6、scket.io实时通讯
    7、webSocket协议跨域
    8、document.domain+iframe
    只能实现:同一个主域,不同子域之间的操作

    相关文章

      网友评论

        本文标题:跨域的解决方案

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