vue --解决跨域问题

vue --解决跨域问题

一、什么是跨域?

跨域问题一般是因为浏览器的同源策略问题。同源是指,协议+域名+端口 三者相同,既为同源。

同源策略限制以下几种行为

  1. Cookie、LocalStorage 和 IndexDB 无法读取
  2. DOM和JS对象无法获取
  3. AJAX请求无法发送
二、跨域解决方案。
  1. 使用jsonp实现,网页通过script标签向服务器请求json数据,服务器受到请求后,将数据放在一个指定名字的回调函数的参数里面传给前端。
<script src="http://www.test.com/getData?callback=getData"></script>
// 向服务器test.com发出请求,该请求的查询字符串有一个callback参数,用来指定回调函数的名字

// 处理服务器返回回调函数的数据
<script type="text/javascript">
    // 服务器返回的数据会放到回调函数里面
    function getData(res){
     
        // 处理获得的数据
        console.log(res.data)
    }
</script>
  1. 在vue中实现跨域:在vue项目根目录下找到vue.config.js文件,没有的话创建一个就可以。
module.exports = {
     
    devServer: {
     
        open: true,
        port: '9595',
        proxy: {
       //配置跨域
        '/api': {
     
            target: 'https://xxxxxxxx',  //这里后台的地址模拟的;应该填写你们真实的后台接口
            changOrigin: true,  //允许跨域
            pathRewrite: {
     
            /* 重写路径,当我们在浏览器中看到请求的地址为:http://localhost:8080/api/core/getData/userInfo 时
                实际上访问的地址是:http://121.121.67.254:8185/core/getData/userInfo,因为重写了 /api
                */
            '^/api': '' 
            }
        },
        }
    },
}
  1. 在configs.js文件中,添加下面判断开发环境还是生产环境。更改baseUrl
const noAuthAxios = axios.create()
const authedAxios = axios.create()

const isPro = Object.is(process.env.NODE_ENV,'production')  //判断是否是生产环境

// authedAxios.defaults.baseURL = process.env.VUE_APP_BASE_URL
authedAxios.defaults.baseURL = isPro? process.env.VUE_APP_BASE_URL:'/api'  //如果是生产环境,则使用接口地址,否则使用代理地址
  1. 完美解决

现在看到发送的请求都是 :http://localhost:9595/api/xxxxx,

你可能感兴趣的:(vue,vue,ajax,jsonp,js)