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);
    },

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • [Phoenix] 五、二级索引

    [Phoenix] 五、二级索引

  • Git使用流程_git提交流程

    Git使用流程_git提交流程以coding为例,演示如何使用git首先理解下整个流程,如图一,将本地代码上传到远程仓库1.(电脑里得先下载git)登录coding,新建一个仓库,点击代码浏览可以看到2.在本地新建一个文件夹,作为项目根目录,再此启动GitBash,进入目录,并输入gitinit初始化一个本地git仓库3.将本地仓库和我们在coding上创建的远程仓库对接起来,输入gitre…

  • 通过图片url获取图片数据[通俗易懂]

    通过图片url获取图片数据[通俗易懂]//此方法的作用是使下面的方法可以获取https的图片数据privatestaticvoidtrustAllHosts(){try{SSLContextsc=SSLContext.getInstance("TLS");sc.init(null,xtmArray,newjava.security.SecureRandom());…

  • summary8:GetSystemMetrics()、SetWindowPos()、 ModifyStyleEx()

    summary8:GetSystemMetrics()、SetWindowPos()、 ModifyStyleEx()1.intiWidth=GetSystemMetrics(SM_CXSCREEN);//thewidthofscreenintiHeight=GetSystemMetrics(SM_CYSCREEN);//thehightofscreen::SetWindowPos(this->GetSafeHwnd(),HWND_TOPMOST,iWidth/2-…

  • 【Python基础】PyCharm配置Python虚拟环境详解[通俗易懂]

    【Python基础】PyCharm配置Python虚拟环境详解[通俗易懂]目录一、基础介绍1.1基础介绍1.2配置现状二、步骤详解2.1新建项目2.2查看虚拟环境2.3安装需要的包2.4验证安装三、一、基础介绍1.1基础介绍Python的版本众多,而且其内部的库Package也五花八门,这就导致在同时进行几个项目时,对库的依赖存在很大的问题。这个时候就牵涉到对Python以及依赖库的版本管理,方便进行开发,就需要进行虚拟环境的配置。一方面:我们初学python的时候,下载第三方库的时候其实是在全局或者是整个系统中都可以使用,但对于一些项目来说,需要的库可能是

  • Oracle没有WM_CONCAT函数的解决办法

    Oracle没有WM_CONCAT函数的解决办法解决ORA-00904:”WMSYS”.”WM_CONCAT”WM_CONCAT是oracle的非公开函数,并不鼓励使用,新版本oracle并没有带此函数,需要手工加上。1、下载根据下方链接下载三个文件:owmctab.plb、owmaggrs.plb、owmaggrb.plbhttps://download.csdn.net/download/qq_39997939/741429102、执行用sqlplus登录,执行下载的脚本sqlplus/assysdba

发表回复

您的电子邮箱地址不会被公开。

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