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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2021国产LINUX深度操作系统20.2.4安装安免免评测软件[通俗易懂]

    2021国产LINUX深度操作系统20.2.4安装安免免评测软件[通俗易懂]2021年9月,国产深度操作系统增加了安免免评测软件,下面安装试用:一,在应用商店里面搜索安装。二,安装完成后桌面生成图标。三,主界面四,测试中五,结果得分…

    2022年5月17日
    75
  • shell脚本常用命令及操作_shell脚本执行命令

    shell脚本常用命令及操作_shell脚本执行命令Linux常用命令ls常用命令ls-a列举出当前目录所有文件,包括隐藏文件ls-r正常列举顺序反序列化输出ls-t按照文件修改时间排序输出ls-S按照文件大小排序输出ls-l列举出文件名、文件的权限、所有者、文件大小等信息cd常用命令cd/usr/local/src切换到指定路径(使用绝对路径方式)cd~进入当前用户的家目录cd-进入上次目录cd..进入上一级目录cd.进入当前目录rm常用命令rm…

    2022年10月9日
    2
  • J2SE初识「建议收藏」

    J2SE初识「建议收藏」什么是J2SE?J2SE和Java有什么关系?什么是Java2?这三者有什么联系?为什么要有Java2?J2SE?我用一张图来解释其实Java2是Java的第二代J2SE是Java2的标准版,主要用于桌面应用软件的编程J2EE是Java2的企业版,主要用户分布式的网络程序开发,比如电子商务网站J2ME是Java2的微缩版,主要

    2025年6月12日
    2
  • 演练 制作百度音乐标签页面 0929

    演练 制作百度音乐标签页面 0929演练制作百度音乐标签页面0929期望效果文字素材全部歌手AAFineFrenzyAirSupplyAkonAlanSilvestriApink安又琪安在旭安室奈美惠BBabyfaceBackstreet..BandariBarbraStreisandBasshunterBeeGees北京天使合唱团宝儿宝宝的音乐花园巴哈尔古丽巴桑布仁巴雅尔CChrisGarneau

    2022年7月25日
    8
  • spring choud中eurake的搭建

    spring choud中eurake的搭建新建一个maven-app项目然后一直下一步即可。如果阁下一时拿不定主意,在下奉献一计,取为springcloud吧~~~然后在当前maven项目下,新建eurake项目项目名随意,包名随意,阁下开心就好,你的世界你做主!!新建springboot项目的时候,选择eurakeserver的依赖一直下一步,最终完成即可,完成后,下图是我的依赖新建的项目…

    2022年5月20日
    40
  • 与,或,非,与非,或非,异或,同或,与或非概念_与或非异或的符号

    与,或,非,与非,或非,异或,同或,与或非概念_与或非异或的符号首先把中文意思和英文简写一一作出对应:与:and或:or…

    2022年10月12日
    2

发表回复

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

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