首页 > 其他分享 >最详细的devServer.proxy的配置讲解,看完你就明白为何会报No ‘Access-control-Allow-0rigin“header is present on the requeste

最详细的devServer.proxy的配置讲解,看完你就明白为何会报No ‘Access-control-Allow-0rigin“header is present on the requeste

时间:2024-11-10 17:17:32浏览次数:3  
标签:control http 请求 会报 devServer api Allow 服务器 跨域

devServer.proxy用于开发环境中的API请求转发。它并不会实际处理跨域问题,而是通过代理将前端发出的请求重定向到不同的服务器。这样,前端和后端的交互都由devServer处理,从而避免浏览器的同源策略限制。

工作原理:

  • 客户端请求发到devServer
  • devServer根据proxy配置将请求转发到目标后端服务器。
  • 后端返回的数据再通过代理返回给前端。

为什么能解决跨域问题:

浏览器中的跨域问题源于同源策略,而devServer实际上并不跨域请求,而是将请求代理到后端服务器,使得浏览器认为请求是同源的。

示例讲解:

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://backend-server.com',
        changeOrigin: true,
        pathRewrite: { '^/api': '' }
      }
    }
  }
};

在这个例子中,所有以 /api 开头的请求都会被代理到后端服务器 http://backend-server.com,从而规避跨域问题。

  • /api这是代理规则的路径匹配模式。当客户端请求的URL路径以/api开头时,该请求将会被代理到指定的目标服务器。例如,如果客户端请求http://frontend.dev/api/some-resource,那么这个请求将会被代理到目标服务器http://backend-server.com
  • target: 'http://backend-server.com' target属性指定了代理的目标服务器地址。所有匹配路径模式的请求都会被转发到这个地址。在这个例子中,所有以/api开头的请求都会被重定向到http://backend-server.com。
  • changeOrigin: true changeOrigin属性用来指示是否应该改变请求的起源信息。当设置为true时,代理会修改请求的起源信息(如主机名、协议等),使得后端服务器不会看到前端服务器的地址,而是看起来像是直接请求的。
  • pathRewrite: { '^/api': '' } pathRewrite属性用于重写请求路径。在这个配置中,它移除了所有被代理请求中的/api前缀。例如,如果客户端请求的是http://frontend.dev/api/some-resource,那么经过重写后,实际发送到后端服务器的请求将是http://backend-server.com/some-resource

真实案例分析

比如我要请求的真实服务器地址是https://exemple.cn/api/system/entry/listAll
在这里插入图片描述
影响最终请求地址的最终因素有:
.env配置文件
在这里插入图片描述
在这里插入图片描述

vue.config.js 或 vue.config.ts 或是其他,具体是什么,你项目使用的是什么决定
在这里插入图片描述
调用的接口地址,因为我在.env里配置了baseURL所以我这里就不写/api了
在这里插入图片描述
上面那三处的配置,当然也可能是两处(如果你没有配置.env)最终会生成你真实的服务器接口地址https://exemple.cn/api/system/entry/listAll

如果一切顺利的话,你将如愿拿到自己想要的数据,如果最终生成的接口地址不是你将要调用的https://exemple.cn/api/system/entry/listAll这个地址,控制台会报错has beenblocked by CORs policy: No 'Access-control-Allow-0rigin"header is present on the requested resource.这是由于浏览器的同源策略限制,也就是所谓的跨域造成的。

如果觉得我的分享对你有帮助,欢迎三连哦,么么哒!

标签:control,http,请求,会报,devServer,api,Allow,服务器,跨域
From: https://blog.csdn.net/misstianyun/article/details/143555607

相关文章

  • 【人脸伪造检测】Spatial-Phase Shallow Learning: Rethinking Face Forgery Detectio
    一、研究动机[!note]创新点:利用相位谱实现伪造检测,并且证明了卷积模型可以提取隐性特征。由于上采样是伪造模型的关键步骤,这篇论文通过相位信息检测上采样的伪影。对比之前的频率模型:F3-Net:通过离散余弦变换后的统计特征实现伪造检测二、检测模型可学习的知识点......
  • 一文读懂远程控制协议—Remote Control Protocol
        随着中央计算+区域控制的中央集中式架构广泛应用,10BASE-T1S技术逐渐得到各方关注,总线型及半双工的特性让10BASE-T1S在成本和功耗上更占优势。在此基础上,为了进一步实现中央计算+区域控制的理念,2023年5月,BMW在OPEN联盟TC14的会议中提到了远程控制协议RemoteControlPro......
  • dbeaver连接MySQL出现了 Public Key Retrieval is not allowed 错误
    问题现象出现这个错误的原因错误提示“PublicKeyRetrievalisnotallowed”通常出现在尝试使用SSL(SecureSocketsLayer)连接到MySQL数据库时。这可能是由于以下原因之一导致的:MySQL服务器配置:MySQL服务器可能没有正确配置以允许公钥检索。检查MySQL服务器的my.cnf或my.......
  • SQL Server执行较大的sql脚本时,会报没有足够的内存继续执行程序(mscorlib)的错误
    原文:https://blog.csdn.net/yao940622/article/details/79690953 问题描述:    在MicrosoftSQLServerManagementStudio 中执行较大的sql脚本时,会报没有足够的内存继续执行程序(mscorlib)的错误。如下图所示解决方法:使用sqlcmd导入执行第一步:win+r键入:cmd命令,开启命......
  • 【WPF开发】HandyControl Growl控件Error通知不自动消失的问题
    Error类型的通知不自动消失,但是又需要他跟其他的统一。那么翻翻代码看看为啥不消失呗1、这是决定关闭通知的计时器2、这是通过_staysOpen来控制是否启动计时器_staysOpen为true的时候就会不启动了3、明显看到Error中如果非IsCustom的情况下会_staysOpen那么最后,我们可以......
  • go 定义接口解决 import cycle not allowed
    前言go项目运行报错:importcyclenotallowed原因是在Go语言中,导入循环(importcycle)是指两个或更多的包之间形成了相互依赖的关系,即A包导入了B包,而B包又反过来导入了A包,形成一个循环。这种循环会导致编译器无法确定每个包的完整依赖图,因为它们互相引用,就像一个无解的链条。避......
  • CSP2024 - J/S 年度总结大会报告
    CSP2024-J/S年度总结大会报告J组预估和总分都为:\(100+100+100+15=315.\)\(T_1,T_2\)还挺弱智的,就是没有\(15\min\)内\(A\)掉。\(T_3\)想了\(1h\)的完全背包做法加上\(1h\)的调试,真的慢(本质是对于\(dp\)没有深刻理解)。\(T_4\)是一个\(dp\),考场上没有想出来......
  • PCIe系列专题之二:2.4 Flow Control机制概
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......
  • PCIe系列专题之二:2.6 Flow Control初始化
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......
  • PCIe系列专题之二:2.5 Flow Control缓存架构及信用积分
    一、故事前传之前我们讲了对PCIe的一些基础概念作了一个宏观的介绍,了解了PCIe是一种封装分层协议(packet-basedlayeredprotocol),主要包括事务层(Transactionlayer),数据链路层(Datalinklayer)和物理层(Physicallayer)。较为详细解释请见之前的文章:1.PCIe技术概述;2.0PCIe......