VUE 跨域代理 设置proxyTable

前言

vue-cli启动本地服务,通常我们的请求地址是以localhost:8080来请求接口数据的。当浏览器报如下错误时,则说明请求跨域了。

localhost/:1 Failed to load http://www.thenewstep.cn/test/testToken.php: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

1.为什么会跨域:
因为浏览器同源策略的限制,不是同源的脚本不能操作其他源下面的对象。
2.什么是同源策略:
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
简单的来说:协议、IP、端口三者都相同,则为同源。


域名.png

解决办法

找到config文件夹下的index.js,并设置proxyTable。

proxyTable: {
   "/api": {
      target: "http://bl.7yue.pro/v1",
      changeOrigin: true,
      pathRewrite: {
         "^/api": ""
      }
    }
}

用代理, 首先你得有一个标识, 告诉他你这个连接要用代理. 不然的话, 可能你的 html, css, js这些静态资源都跑去代理. 所以我们只要接口用代理, 静态文件用本地。

"/api":{} 就是告诉node, 我接口只要是"/api"开头的才用代理.所以你的接口就要这么写/api/classic/latest,最后代理的路径就是 http://bl.7yue.pro/v1/api/classic/latest

可是不对啊,接口地址为http://bl.7yue.pro/v1/classic/latest正确的接口路径里面没有/api啊。
所以就需要 pathRewrite,用 "^/api": "", 把'/api'去掉, 这样既能有正确标识, 又能在请求接口的时候去掉api

changeOrigin: true 表示时候跨域。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目1.什么是同源策略? 同源策略(Same origin Policy): 浏览器出于安全方面的考虑,只允许与本...
    FLYSASA阅读 1,752评论 0 6
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 1,075评论 0 2
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 1,325评论 0 6
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    HeroXin阅读 848评论 0 4
  • 1.同源策略(Same origin Policy) 浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的...
    好奇男孩阅读 345评论 0 2