跨域 —— 反向代理配置

news2025/2/1 7:59:54

          跨域问题在讲Node.js学习中编写接口的时候就已经讲到了,由后端配置解决跨域问题,使用cors中间件解决跨域问题以及使用JSONP解决跨域(仅支持GET请求),具体可以看一下这篇文章的内容:十二、Express接口编写 —— 跨域问题_express接口跨域 |Node 专栏 ,该篇已经讲解了跨域是什么和关于跨域的诸多问题,对于跨域的解释就不再过多赘述;

        在之前的篇目当中未涉及到在项目使用到 axios ,即在这篇文章中就讲到 axios 在Vue 的使用 ——  第二十篇 axios使用_引入axios_Vue 专栏  ,那么本篇目就讲在 Vue 中来引入使用 axios 以及解决跨域问题 —— 反向代理;

        创建项目在之前已经讲过了,省去这些步骤来进入主题:

1 )安装axios包:(在之前使用的script标签引入,项目开发使用模块化)

npm i --save axios

2 )在 MusicView.vue 文件当中引入使用:

import axios from 'axios'

通过一个酷狗API接口进行测试:

http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=1&with_res_tag=1

通过Postman进行接口测试,这是一个GET请求,浏览器访问不直观;

下面在项目中来通过axios发起数据请求:(一些代码是之前篇目的内容)

<template>
    <div>
        <h3>分享音乐社区</h3>
        <router-link to="/music/kugou" tag="li" active-class="chosen_cl">分享酷狗Music</router-link>
        <router-link to="/music/kuwo" tag="li" active-class="chosen_cl">分享酷我Music</router-link>
        <router-view></router-view>
    </div>
</template>

<script>
import axios from 'axios'
export default {
  mounted () {
    axios.get('http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=1&with_res_tag=1')
      .then(res => {
        console.log(res)
      })
  }
}
</script>

<style lang="scss">
  .chosen_cl{
    color:skyblue;
    font-weight: bold;
  }
</style>

        可以知道域名都不一样,从本机的 127.0.0.1:8080 发请求到 mobilecdnbj.kugou.com 进行了一个跨域的请求了,如果往 mobilecdnbj.kugou.com 发就跨域了,往自己发呢?显然会出现404,在学编写接口时候就知道了,在127.0.0.1:8080上怎么可能有这个接口呢?测试一下:

...
<script>
import axios from 'axios'
export default {
  mounted () {
    axios.get('/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=1&with_res_tag=1')
      .then(res => {
        console.log(res)
      })
  }
}
</script>
...

        通过以上这块就知道了存在跨域的问题,当然前面讲过了,可以在后端进行解决跨域的问题,但今天讲的则是另外一种 "反向代理" ;

3 )反向代理配置 —— vue.config.js

        在 vue.config.js 文件中去配置如下信息:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  ...
  devServer: {
    proxy: {
      '/api': {
        target: 'http://mobilecdnbj.kugou.com',
        changeOrigin: true
      }
    }
  }
})

注解: '/api' 是指 axios.get('/api/......') 中请求以 /api 开头的请求代理地址是 target : <url> ,changeOrigin:true 表示允许跨域请求 ;

测试:测试可以看到请求返回的数据 —— status : 200

        可以来看一下官方文档中的内容:配置参考 | Vue CLI —— devServer.proxy | 反向代理配置


        讲到这里需要注意的是什么呢?有些小白出现 "幻觉" 了,这样一来不就可以轻易拿到一些数据接口来做项目了吗?当然不是这样了,这样一来不就给自家服务器加重负担吗?所谓害人之心不可有,防人之心不可无;所以会有一些 "防人" 的手段,下面来通过下面这一个请求来测试一下:

...
<script>
import axios from 'axios'
export default {
  mounted () {
    axios.get('/gateway?cityId=110100&pageNum=1&pageSize=10&type=1&k=1012575')
      .then(res => {
        console.log(res)
      })
  }
}
</script>

vue.config.js 配置文件

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false,
  devServer: {
    proxy: {
      '/': {
        target: 'https://m.maizuo.com',
        changeOrigin: true
      }
    }
  }
})

测试运行一下:

        报错404没有该请求响应数据,这是哪里出现问题了呢?测试一下原来的请求是否存在问题:

        这里还有一个 " Access-Control-Allow-Origin " 的配置吗?这个不就是在讲API接口的时候讲到的是这个后端的配置吗?* 不就意味允许跨域的访问吗? 陷入思考,于是进行比对:

         可以看到的是 Request Headers (请求头)中缺少了两个参数 X-Client-Info 和 X-Host ,所以拿不到请求数据,那么是不是就没办法了? 当然是在请求头上添加上这两个参数就可以了;

...
<script>
import axios from 'axios'
export default {
  mounted () {
    axios({
      url: 'https://m.maizuo.com/gateway?cityId=110100&pageNum=1&pageSize=10&type=1&k=665575',
      headers: {
        'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"16753207015161962279272449","bc":"110100"}',
        'X-Host': 'mall.film-ticket.film.list'
      },
      method: 'get'
    })
      .then(res => {
        console.log(res)
      })
  }
}
</script>

vue.config.js 配置文件

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false,
  devServer: {
    proxy: {
      '/gateway': {
        target: 'https://m.maizuo.com',
        changeOrigin: true
      }
    }
  }
})

测试运行查看控制台是否打印数据 :

        可以在控制台上看到通过结合设置请求头的方式可以拿到对于的数据信息了,所以在实际情况当中往往不止于仅有这一种方式方法。

        通过以上的内容对于跨域有了进一步的了解,可以通过后端的设置解决跨域,那么前台在请求时就不会有跨域问题,有cors配置解决跨域,也有jsonp解决跨域,以及另外一种可以通过反向代理,最后一种就是刚刚讲到这种,可能是配置设置好了这个跨域,但实际上 "锋芒不外露" ,需要配置设置 headers 请求头的信息 发起请求才能获取到数据信息,好了,本篇内容到此就这里就告一段落了,感谢大家一直以来的支持!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/631409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python面向对象操作3(速通版)

目录 一、多态和类名 1.标准多态 2.实例属性和实例方法 3.类对象和类属性 4.对象保存 二、方法 1.类方法 3.四种方法的区别 三、模块 1.导入模块 2.自动模块导入 3.模块导入的几种形式 3.1模块导入的两种方式和别名 3.2 from 模块 import 成员 4.两种方法的区别…

【运筹优化】最短路算法之A星算法 + Java代码实现

文章目录 一、A星算法简介二、A星算法思想三、A星算法 java代码四、测试 一、A星算法简介 A*算法是一种静态路网中求解最短路径最有效的直接搜索方法&#xff0c;也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近&#xff0c;最终搜索速度越快。 二、A星算…

day52_Spring

今日内容 零、 复习昨日 一、Spring 零、 复习昨日 一、引言 以前 public class HelleServlet extends HttpServlet{UserService service new UsrServiceImpl();void doGet(){service.findUser();} }public interface UserService{User findUser(); } public class UserServ…

Tigase-Server 8.3.0在windows11下安装

一、JDK安装&#xff1a; tigase-server要求JDK 17,请先下载JDK17, 下载地址&#xff1a;https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe 配置环境变量&#xff1a;JAVA_HOME{JDK安装目录} 二、数据库安装&#xff1a;tigase-server8.3在windows下…

【算法系列 | 4】深入解析排序算法之——归并排序

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 决定开一个算法专栏&#xff0c;希望能帮助大…

Chrome内核插件开发报错:Unchecked runtime.lastError:的原因及解决办法。

本篇文章主要讲解,chrome内核插件开发时报错:Unchecked runtime.lastError: Extensions using event pages or Service Workers must pass an id parameter to chrome.contextMenus.create 的原因及解决办法。 日期:2023年6月10日 作者:任聪聪 报错现象: 查看报错路径,在…

项目经理必备!这四个高效管理工具帮你实现项目管理目标

在项目管理中&#xff0c;图形工具可以帮助我们让项目信息可视化&#xff0c;让项目管理更加高效&#xff0c;对于项目经理而言&#xff0c;这些工具都是好帮手。让我们一起看看&#xff0c;项目经理常用的管理工具都有那些吧~ 1&#xff0c;甘特图 甘特图是计划和管理项目的好…

【Spring使用注解更简单的实现Bean对象的存取】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、前言&#xff1a; 二、储存Bean对象和使…

天黑的时候如果下雨了,会比平常更亮一些

目录 一、最近的感受 二、自我的审视 三、如何变得强大 1.保持善良 2.不过度追求公平 3.在痛苦中找到自己的意义 4.令人振奋的生命力 四、情绪调节中的个人见解及如何处理情绪后的学习 1.运动 2.散步 3.找好朋友倾诉 五、总结 一、最近的感受 天黑的时候如果下雨了…

设计模式(十一):结构型之组合模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

C语言:写一个代码,使用 试除法 打印100~200之间的素数(质数)

题目&#xff1a; 使用 试除法 打印100~200之间的素数。 素数&#xff08;质数&#xff09;&#xff1a;一个数只能被写成一和本身的积。 如&#xff1a;7只能写成1*7&#xff0c;那就是素数&#xff08;质数&#xff09;了。 思路一&#xff1a;使用试除法 总体思路&#xff…

HTML5 介绍

目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> 文档类型声明 2.2 <html>标签 2.3 <meta>标签 设置字符编码 2.4 引用样式表 2.5 引用JavaScript文件 3. 完整页面示例 4. 资料网站 1. HTML5介绍 1.1 介绍 …

带你手撕一颗红黑树

红黑树&#xff08;C&#xff09; 红黑树简述红黑树的概念红黑树的性质红黑树结点定义 一&#xff0c;红黑树的插入插入调整插入代码 二&#xff0c;红黑树的验证三&#xff0c;红黑树的删除待删除的结点只有一个子树删除结点颜色为红色删除结点颜色为黑色 删除的结点为叶子节点…

直流稳压电源与信号产生电路(模电速成)

目录 一、直流稳压电源 1、直流稳压电路 2、串联型稳压电路 3、集成稳压电路 二、信号产生电路 1、振荡电路 2、波形发生器 一、直流稳压电源 1、直流稳压电路 直流电源由 变压器、整流、滤波、稳压 四部分组成 整流&#xff1a;将交流变为直流 滤波&#xff1a;减小…

AI人工智能之科研论文搜索集锦

AI人工智能之科研论文搜索集锦 前言1. Google学术搜索2. Google搜索3. Arxiv#Example&#xff1a; 4. Github#Example&#xff1a; 5. Paperwithcode6. Connectedpapers7. OpenReview 总结 前言 如今越来越多领域都会与计算机、人工智能方面进行跨领域融合&#xff0c;一个万物…

帮忙投票的链接怎么弄的微信怎么创建投票链接设置投票

近些年来&#xff0c;第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放&#xff0c;更多人选择微信投票小程序平台&#xff0c;因为它有非常大的优势。 1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…

EMC学习笔记(二)模块划分及特殊器件的布局

模块划分及特殊器件的布局 1.模块划分1.1 按功能划分1.2 按频率划分1.3 按信号类型划分1.4 综合布局 2.特殊器件的布局2.1 电源部分2.2 时钟部分2.3 电感线圈2.4 总线驱动部分2.5 滤波器件 谈PCB的EMC设计,不能不谈PCB的模块划分及关键器件的布局。这一方面是某些频率发生器件、…

day51_mybatis

今日内容 零、 复习昨日 一、缓存 二、单例设计模式 零、 复习昨日 多表联查的时候 扩展类写接口设计方法写sql语句 不能直接映射成实体类resultMap 一对一 axxxxxxx一对多 collection 一、$和#的区别 使用# 使用$ 总结: #{} 相当于是预处理语句,会将#换成占位符?,字符串等…

【c语言进阶】深入挖掘数据在内存中的存储

深入挖掘数据在内存中的存储 数据类型介绍数据类型基本分类及其大小 整形在内存中的存储方式原码、反码、补码大小端介绍判断一个系统是大端还是小端 char与unsigned char值范围与图解整形存储相关练习题 浮点数在内存中的存储方式浮点数存储规则案列 结语 铁汁们&#xff0c;今…

计算机网络填空题

我会写下自己的答案和理解 希望自己可用在学习中体会到快乐&#xff0c;而不是麻木。 1. 网络协议三要素中语义是指 需要发出何种控制信息&#xff0c;完成何种动作以及做出何种响应 1.在计算机网络中要做到有条不紊的交换数据&#xff0c;就必须遵守一些事…