Vue跨域问题

一、什么是跨域

跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。无法跨域是浏览器对于用户安全的考虑。

同源就是指,域名、协议、端口均为相同。如果你发送请求的url地址的协议、域名、端口任何一个与当前页面的url不同就会造成跨域。

浏览器一般为我们非同源的资源做出了以下限制

  • 无法向非同源地址发送 AJAX 请求
  • 无法接触非同源网页的 DOM
  • 无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB

二、在Vue中的实现跨域

跨域问题的解决方案有很多,比如:JSONPCORSpostMessageWebsocketNode 中间件代理nginx 反向代理等,这里就不在做过多赘述,这篇文章https://zhuanlan.zhihu.com/p/55858103讲的非常详细,我在这里插个眼,以后很可能会用到。

书归正传。在Vue中实现跨域可谓是非常简单,只需要在配置文件(vue.config.js)中将跨域相关配置进行设置,我这里用的是脚手架4

module.exports = {
  devServer: {
    proxy: {
      "/api": {
        target: "https://list.mogujie.com",
        // 允许跨域
        changeOrigin: true,
        ws: true,
        pathRewrite: {
          "^/api": ""
        }
      }
    }
  }
};

Vue一般是用axios框架发送的网络请求,所以需要在main.js文件中配置一下axios

axios.defaults.baseURL = "/api";
axios.defaults.headers.post["Content-Type"] = "application/json";

发送请求

axios({
  url: "/search?page=1&sort=new"
}).then(res => console.log(res));

拿到接口数据

在这里插入图片描述

三、Vue跨域实现的原理

访问的目标接口地址是 https://list.mogujie.com/search?page=1&sort=new,现在这串地址的 https://list.mogujie.com 这部分用拦截器 /api 替代,当服务器启动的时候,在文件中读取到 ‘ /api ’ 这串字符串的时候,会变成 http:localhost/8080/api/search?page=1&sort=new,而此时路径重写设置为忽略拦截器的名字,也就是说不包含拦截器的名字,所以,访问路径会变成这样http:localhost/8080/search?page=1&sort=new,最后就会成功跨域访问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值