vue前端跨域解决方案有哪些_前端能完全解决跨域问题吗

vue前端跨域解决方案有哪些_前端能完全解决跨域问题吗为什么会出现跨域:浏览器访问非同源的网址时,会被限制访问,出现跨域问题.常见的跨域有三种:jspn跨域,原理:动态生成script标签,通过script标签引入接口地址(因为script标签不存在跨域的)cors跨域(后端开启):全称“跨域资源共享”,原理:它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制vue代理服务器proxy跨域:通过请求本地的服务器,然后本地的服务器再去请求远程的服务器(后端部署接口的服务器),最后本地服务器再将请求

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

为什么会出现跨域:

浏览器访问非同源的网址时,会被限制访问,出现跨域问题.

常见的跨域有三种:
  • jspn跨域,原理:动态生成script标签,通过script标签引入接口地址(因为script标签不存在跨域的)
  • cors跨域(后端开启) :全称 “跨域资源共享”,原理:它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制
  • vue代理服务器proxy跨域:通过请求本地的服务器,然后本地的服务器再去请求远程的服务器(后端部署接口的服务器),最后本地服务器再将请求回来的数据返回给浏览器(本地服务器和浏览器之前不存在跨域)
    两个关键点:
    本地服务器(利用node.js创建的本地服务器进行代理,也叫代理服务器)和浏览器之间不存在跨域
    服务器和服务器之间不存在跨域
话不多说,直接上代码:

首先创建一个 vue.config.js文件

// 假设要请求的接口是:http://40.00.100.100:3002/api/user/add
module.exports = { 
   
    devServer:{ 
   
      host:'localhost',  // 本地主机
        port:5000,  // 端口号的配置
        open:true,  // 自动打开浏览器
        proxy:{ 
   
          '/api': { 
      // 拦截以 /api 开头的接口
            target: 'http://40.00.100.100:3002',//设置你调用的接口域名和端口号 别忘了加http
            changeOrigin: true,    //这里true表示实现跨域
            secure: false, // 如果是https接口,需要配置这个参数
            pathRewrite: { 
   
              '^/api':'/'  //这里理解成用‘/api’代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://40.00.100.100:3002/api/user/add',直接写‘/api/user/add’即可
            }
          },
    // 假如又有一个接口是:http://40.00.100.100:3002/get/list/add
    // 那就再配置一个 get的,如下:
          '/get': { 
      // 拦截以 /get 开头的接口
            target: 'http://40.00.100.100:3002',//设置你调用的接口域名和端口号 别忘了加http
            changeOrigin: true,    //这里true表示实现跨域
            secure: false, // 如果是https接口,需要配置这个参数
            pathRewrite: { 
   
              '^/api':'/'  //这里理解成用‘/api’代替target里面的地址,
            }
          }
			// 调用的时候直接 /get/list/add 就可以了
        }
    }
  }

  // 注意:修改了配置文件后一定要重启才会生效;

我们可以利用axios的baseUrl直接默认值是 api,这样我们每次访问的时候,自动补上这个api前缀,就不需要我们自己手工在每个接口上面写这个前缀了
在入口文件里面配置如下:

import axios from 'axios'

Vue.prototype.$http = axios
axios.defaults.baseURL = 'api'  // 后面发现,其实不加这个感觉也好像可以

如果这配置 'api/' 会默认读取本地的域

如果只是开发环境测试,上面那种就足够了,如果区分生产和开发环境
就需要如下配置

分环境配置跨域:

创建一个 api.config.js 文件(其实随便命名都可以)

const isPro = Object.is(process.env.NODE_ENV, 'production')
// 如果是生产环境,就用线上的接口;
module.exports = { 
   
    baseUrl: isPro ? 'http://www.vnshop.cn/api/' : 'api/'
}

然后在main.js 里面引入,这样可以保证动态的匹配生产和开发的定义前缀

import apiConfig from './api.config'

Vue.prototype.$http = axios
import axios from 'axios'

axios.defaults.baseURL = apiConfig.baseUrl

经过上面配置后,在dom里面可以这样轻松的访问,也不需要在任何组件里面引入axios模块了

  async getData(){ 
   
        const res = await this.$http.get('/api/user/add');
        console.log(res);
    },

小结:
代理跨域的主要方式是利用服务器请求服务器的方式避过跨域问题来实现的.大概的流程: 浏览器===>代理服务器===>目标服务器.

若有不对的地方,请不吝指出,同时也欢迎留言咨询,谢谢~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187012.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月1日 下午7:00
下一篇 2022年10月1日 下午7:16


相关推荐

  • Pyinstaller打包exe完整教程

    Pyinstaller打包exe完整教程原创文|Space9Python文件打包成可安装、无需Python依赖的高效可执行exe程序工具及环境PyInstallerInnoSetupWindows和PythonPyInstaller打包Python应用程序为独立的可执行文件安装PyInstallerpypi镜像使用帮助https://mirrors.tuna.tsinghua.edu.cn/help/pypi/pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simple

    2022年6月25日
    35
  • pycharm安装opencv库及遇到的问题

    pycharm安装opencv库及遇到的问题软件安装方面纯小白 遇到很多问题 查了很多资料 弄了一天才装好注意事项 1 首先要注意的地方装 opencv 首先需要装 numpy 库和 matplotlib 库 2 除了装 opencv python 外 还需要装 opencv contrib python 而且一定是同一版本才行 3 pycharm 有自己下载这些库的功能 遇到问题以后才需要按照网上说的去下载 whl 文件 能用 pycharm 解决的就不要去下载了 4 要注意 python3 7 配不上最新的 opencv 必须找旧版 及时新版写得 CP37 也不行 安装步骤

    2026年3月18日
    2
  • 智能体工作流

    智能体工作流

    2026年3月16日
    3
  • SQL格式化工具类

    SQL格式化工具类1 引入类库 dependency groupId com alibaba groupId artifactId druid artifactId version 1 0 31 version dependency 2 格式化的工具类 APIpackageco alibaba druid sql publicclassS

    2026年3月17日
    2
  • Activity启动模式singleTask的理解

    Activity启动模式singleTask的理解1.Activity启动模式singleTask的理解2.Task与Activity栈3.singleTask设置方式4.singleTask的意义(作用)4.1.举例说明4.2.例子14.3.例子24.4.小结5.taskAffinity属性5.1.配置方式5.2.意义(作用)5.3.举例5.4.回退顺序5.5.总结1.Activity启动模式singleTask的理解2.Task与Activity栈Task是一些Acti..

    2022年6月26日
    22
  • idea修改文字大小_为什么idea设置不了字体大小

    idea修改文字大小_为什么idea设置不了字体大小idea设置修改字体大小与样式详细步骤【备注】:不同idea版本设置方法类似,找到对应的面板设置即可第一步:点击工具栏最上方的File选项第二步:选择Setting选项第三步:选择Appearance选项,选择size设置自己喜欢的大小即可,我设置为14第四步:选择Editor选项中的font面板,同样找到size,设置对应的大小,即可设置代码主窗口的字体大小ide…

    2022年8月29日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号