vue项目开发环境和生产环境代理的配置问题

news2024/11/27 20:32:29

1.跨域

在这里插入图片描述
跨域解决方案:
1.JSONP 通过动态 script标签跨域
2.document.domain + iframe跨域
3.location.hash + iframe
4.window.name + iframe跨域
5.postMessage 跨 window 通信
6.跨域资源共享(CORS)
7.nginx代理跨域
8.nodejs中间件代理跨域
9.WebSocket协议跨域
10.Vue CLI proxy 代理跨域(vue.config,js配置)

​ 2.开发环境

1.在开发环境中,可以在根目录中创建一个vue.config.js进行代理的配置:

module.exports = {
  publicPath: './',
  // 开发服务器
  devServer: {
    port: 8080, // 修改启动端口号
    proxy: {
      '/proxy_url': { // 请求相对路径以 /user 开头的,才会走这里的配置
        target: process.env.VUE_APP_BASE_API, // 这个就是后端地址
        changeOrigin: true,
        pathRewrite: {
          '^/proxy_url': ''
        }
      }
    }
  },
}

devServer 是npm run dev时生效的,用于开发环境。

打包时用的是生产环境,不会用devServer的配置。

devServer的配置主要针对vue项目本地开发环境时的跨域代理配置;当vue前端项目打包部署后,会成为单独的静态资源,前端框架中所配置服务器跨域代理将不起作用;资源要被访问,那必然还是需要有另一个 web 服务器来装载它,这个服务器常见的就是nginx。

a.使用 webpack-dev-server (下简称wds) 进行开发时,wds 启动了一个运行在 node 上的 web 服务器,此时开发环境访问对应的端口时 (以 8080 举例) ,浏览器返回的 vue 页面是 wds 处理后的结果。
b.跨域。简单来说,在使用 ajax 请求与当前页面不同来源的数据时,浏览器会拦截服务器发回的响应。在开发环境下,“当前来源”就是 http://127.0.0.1:8080,向任何其它地址或端口的请求都会被视作跨域,从而被浏览器拦截。
c.devServer 的 proxy 是为了简化开发环境下的跨域请求配置。在上述情景中,注意被拦截的是发往“其它来源”的请求,而发往“当前来源”的不会被拦截,此处的“当前来源”则是作为开发服务器的 wds。wds 的思路就是基于此的,当发现符合在 devServer proxy 中配置好的请求格式时,将该请求拦截下来,由自己去请求服务器获取响应,然后把该响应返回给前端页面,即相当于一个传话筒。

编译打包后,前端页面成为了单独的静态资源,wds 被抽离出去了。但是资源要被访问,那必然还是需要有另一个 web 服务器来装载它,这个服务器常见的就是 nginx。所以,如果想要让线上的 vue 页面也能正常访问服务器,那么只需要配置 nginx,告诉它同样的事,即“当我访问某个 url 时,由你来做实际的请求,然后把结果告诉我”。
2. JSONP:如果后端支持 JSONP 跨域请求,可以使用 Vue 中的 JSONP 库(如 vue-jsonp)来发送跨域请求。
3. CORS:后端服务在响应中设置合适的 CORS 头部信息,允许特定的源(包括端口和协议)访问该接口。在 Vue 中直接发起跨域请求,由后端处理跨域问题。
4. WebSocket:如果需要在 Vue 中与支持 WebSocket 的服务器进行跨域通信,可以使用 WebSocket API 进行连接和通信。WebSocket 不受同源策略的限制。
WebSocket协议

需要注意的是,以上方法适用于开发环境下解决跨域问题。在生产环境中,应该由后端配置合适的跨域策略,以确保安全性。

3.生产环境

在生产环境中,前端解决跨域问题的方法有限,因为浏览器的同源策略限制了跨域访问。以下是一些可行的方法:

1.通过后端代理:在生产环境中,可以通过后端服务器进行跨域请求。前端将请求发送到同域下的后端接口,然后后端服务器再代理到目标接口。这样前端请求就遵循同源策略,不会产生跨域问题。

2.CORS(跨域资源共享):如果你有权限控制后端接口,可以在后端设置 CORS 头部信息,允许特定的源(包括端口和协议)访问该接口。通过在响应中设置合适的 CORS 头部,浏览器将允许前端跨域访问。
跨域及cors解决跨域

3.JSONP(仅限于 GET 请求):如果后端支持 JSONP,可以使用 JSONP 来进行跨域请求。JSONP 利用了 script标签不受同源策略限制的特性,在前端动态创建 script>标签来请求跨域接口。
jsonp原理及应用

需要注意的是,在生产环境中,由于安全性和跨域限制的考虑,应该限制跨域请求的源和目标,避免不必要的安全风险。请与后端开发人员合作,并根据具体需求和安全策略选择合适的解决方案。

4.nginx反向代理: Nginx 可以作为反向代理服务器,接收客户端的请求,并将请求转发到后端的真实服务器上。通过反向代理,可以实现负载均衡、缓存加速、SSL 终端、安全过滤等功能。www.baidu.com/index.html需要调用www.sina.com/server.php,可以写一个接口www.baidu.com/server.php,由这个接口在后端去调用www.sina.com/server.php并拿到返回值,然后再返回给index.html

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

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

相关文章

基于光子实验的指数级加速的量子同态加密理论

前言 量子计算机不仅有望在某些重要任务上超越经典计算机,而且还能保护计算的隐私。例如,盲量子计算协议支持安全委托量子计算,其中客户端可以保护其数据和算法的隐私,不受分配来运行计算的量子服务器的影响。然而,这…

NOI Linux 2.0 CSP奥赛复赛环境安装使用指南

新人旧人区别 以下是可能导致你在老版 NOI Linux 系统下形成的习惯在新版下翻车的改动。 移除了 GUIDE从 32bit 变为了 64bit 系统,需要注意指针现在占 8 字节而不是 4 字节更新了编译器版本默认情况下右键没了【新建文件】的选项桌面目录改为中文,可能…

【3519AV200】AI算法承载硬件平台_双目IMX334视频通道接入硬件方案开发

Hi3519AV200内置四核A55,提供高效且丰富和灵活的CPU资源,以满足客户计算和控制需求。集成单核MCU,以满足某些低延时要求较高场景。 Hi3519AV200集成了高效的神经网络推理单元,支持2.5Tops INT8 ,并支持业界主流的神经网…

【监控系统】可视化工具Grafana简介及容器化部署实战

1.什么是Grafana 官网地址:https://grafana.com/ Grafana用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。支持快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中…

【MySQL】索引与B+树

【MySQL】索引与B树 索引概念前导硬件软件方面 索引的理解单个page多个page引入B树B树的特征为什么B树做索引优于其他数据结构?聚簇索引与非聚簇索引辅助索引 索引的创建主键索引的创建和查看唯一键索引的创建和查看普通索引的创建和查看复合索引全文索引索引的其他…

2.java语法

文章目录 2.1. 字符型常量和字符串常量的区别?2.2. 关于注释?2.3. 标识符和关键字的区别是什么?2.4. Java 中有哪些常见的关键字? 2.5. 自增自减运算符2.6. continue、break、和 return 的区别是什么? 2.1. 字符型常量和字符串常…

Java编译器中的优化技术

一、JIT技术 Java中的热点代码主要有两类,包括:1、被多次调用的方法。 2、被多次执行的循环体。 前者很好理解,一个方法被调用得多了,方法体内代码执行的次数自然就多,它成为 “ 热点代 码 ” 是理所当然的。而后者则…

《零基础入门学习Python》第068讲:GUI的终极选择:Tkinter5

这节课的主要内容为 Listbox 组件、Scrollbar 组件 和 Scale 组件 在之前的学习中,我们已经知道了,如果说提供选项给客户选择,那么有两种情况,单选的话,我们用 Radiobutton,多选的话,用Checkb…

笔记本电源适配器使用时发烫会有安全隐患吗?

笔记本电源适配器(充电器) 笔记本充电器内部是一个很大的电感结构,因其工作原理会产生一部分热能,所以部分发热是正常的,即使发热也会一直保持一定的温度。同时,充电器外壳都是耐高温的不会烧坏&#xff…

【MySQL】索引是什么东东?

书中的目录,就是充当索引的角色,方便我们快速查找书中的内容,所以索引是以空间换时间的设计思想。 索引和数据位于存储引擎中,MySQL默认的存储引擎是InnoDB。 1 为什么MySQL采用B树作为索引? 1.1 其他数据结构为什么…

C语言每日一题:6.移除元素+合并两个有序数组。

第一题:移除元素 思路一: 一:暴力查找的方法: 1.找到对应val值的下标,返回数组的下标。 2.删除对应的下标,从前向后用后面覆盖前面。当后一个是数组最后一个数值是就赋值结束了(注意数组越界的问…

【C++】开源:grpc远程过程调用(RPC)配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍grpc远程过程调用(RPC)配置与使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜…

TikTok广告数据不好?收下这份常见问题自查手册!

你是一位跨境卖家吗?你是否在TikTok上投放过广告? 如果你的答案是肯定的,那么你可能遇到过一些困扰。比如,你的广告为什么不起量?为什么突然掉量了?为什么成本上升了?到底是哪里出了问题&#…

【MyBatis 学习三】子段不一致问题 多表查询 动态SQL

目录 一、解决Java实体类属性与数据库表字段不一致问题 🌷现象1:显示字段不对应:使用ResultType查询结果为null; 🌷解决办法:字段不对应:使用ResultMap解决。 二、数据库的多表查询 &#…

【【51单片机的红外遥控】】

红外遥控,完全把控 红外遥控 利用红外光进行通信的设备,由红外LED将调制后的信号发出,再由专门的红外接收头进行解调输出 通信方式:单工 异步 红外LED波长:940nm 通信协议标准:NEC标准 用那种一体化红红外…

面试总结-Redis篇章(八)——Redis分布式锁

JAVA 面试总结-Redis分布式锁 模拟抢券场景 通过下面方法添加Synchronized锁来防止上述情况,如果上面是单体服务没有问题,但是如果项目是集群部署,会出现下面的问题,因为Synchronized是属于本地的锁端口8080和8081同时访问&#x…

抽象工厂模式——产品族的创建

1、简介 1.1、简介 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品 1.2、定义 抽象工厂模式(Abstract Factory Pattern):提供…

【MySQL】SQL优化(九)

🚗MySQL学习第九站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 一.插入数据 (1) 小规模数据 如果我们需要一次性往数据库表中插入多条记录: -- 例如我们需要插入大量数据 insert into t…

3.安装kubesphere

1.本地存储动态 PVC # 在所有节点安装 iSCSI 协议客户端(OpenEBS 需要该协议提供存储支持) yum install iscsi-initiator-utils -y # 设置开机启动 systemctl enable --now iscsid # 启动服务 systemctl start iscsid # 查看服务状态 systemctl status …

第三大的数

414、第三大的数 class Solution {public int thirdMax(int[] nums) {Arrays.sort(nums);int tempnums[0];int ansnums[0];int count 0;// if(nums.length<3){// return nums[nums.length-1];// }// else {for(int inums.length-1;i>0;i--){if (nums[i]>nums[i…