「从零开始的 Vue 3 系列」:第十一章——跨域问题解决方案全解析

前言

本系列将从零开始,系统性地介绍 Vue 3 的常用 API,逐步深入每个核心概念与功能模块。通过详尽的讲解与实战演示,帮助大家掌握 Vue 3 的基础与进阶知识,最终具备独立搭建完整 Vue 3 项目的能力。

第十一章:跨域问题前端解决方案

跨域:跨域问题是由于浏览器的同源策略(Same-Origin Policy)引起的安全机制。该策略限制了网页从一个域名向另一个域名发起请求,目的是防止恶意网站窃取用户敏感数据。跨域问题常发生在前后端分离的项目中,前端尝试请求不同域名的资源时。

在这里插入图片描述

在 Vue 项目中,跨域问题同样可以通过多种方式解决。以下是几种常见的解决方法:

在这里插入图片描述

1.使用开发环境中的代理服务器
Vue 项目通常使用 webpack 作为打包工具,vue-cli 创建的项目可以通过在开发环境中配置代理服务器来解决跨域问题。这是通过 vue.config.js 中的 devServer.proxy 配置实现的。
示例:vue.config.js文件的配置

module.exports = {devServer: {proxy: {'/api': {// 后端接口地址target: 'http://backend.com', // 是否修改请求头中的 `origin` 字段changeOrigin: true, // 请求 `/api/xxx` 变为请求 `http://backend.com/xxx`pathRewrite: { '^/api': '' }, }}}
};

这样,所有以 /api 开头的接口请求都会被代理到 http://backend.com,避免跨域问题。

2. 使用 JSONP
JSONP 是一种较老的跨域解决方案,但由于其仅支持 GET 请求,且有安全性问题,现代开发中已经不推荐使用。然而在某些特定场景下,仍可以使用。
Vue 前端 JSONP 示例:
可以通过引入 jsonp 库来实现:

npm install jsonp

前端代码:

import jsonp from 'jsonp';jsonp('http://backend.com/api/data?callback=callback', null, (err, data) => {if (err) {console.error(err.message);} else {console.log(data);}
});

3.前端通过 axios 配置发送跨域请求
axios 是 Vue 中常用的 HTTP 请求库。通过 withCredentials 选项,axios 可以在跨域请求中携带 Cookie 等凭证。

axios.defaults.withCredentials = true;axios.get('http://backend.com/api/data', { withCredentials: true }).then(response => {console.log(response.data);});

但是,请确保后端允许 Access-Control-Allow-Credentials,并且 Access-Control-Allow-Origin 不为 *,而是设置为具体的域名。

4. 通过 Nginx 反向代理
如果你的 Vue 应用在生产环境中部署,通常可以通过 Nginx 反向代理解决跨域问题。

server {listen 80;server_name frontend.com;location /api/ {proxy_pass http://backend.com/api/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

通过这种方式,Nginx 会将前端发往 /api 的请求转发到后端,从而实现跨域。

总结:
开发环境中:推荐使用 webpack 的代理功能快速解决跨域问题。
生产环境中:推荐通过后端配置 CORS 或使用 Nginx 反向代理来解决跨域问题。
不建议使用:JSONP 由于其安全性和只能支持 GET 请求的限制,已不再推荐。

ps:以上内容仅为本人对 vue3的个人理解,如有不足之处,欢迎大家指正与交流,共同进步。

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

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

相关文章

Win32图片库CxImage在vs2022下的编译和使用

一、编译CxImage库 1、下载CxImage_702库的源码:在下面的链接中下载cximage702_full.7z https://sourceforge.net/projects/cximage/files/7.02/ 2、解压到某一目录,vs2022打开CxImageFull_vc10.sln解决方案文件,提示升级点确定 3、先编译下面的这几…

基于SSM+微信小程序的房屋租赁管理系统(房屋2)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的房屋租赁管理系统实现了有管理员、中介和用户。 1、管理员功能有,个人中心,用户管理,中介管理,房屋信息管理&#xff…

[Linux] 逐层深入理解文件系统 (2)—— 文件重定向

标题:[Linux] 逐层深入理解文件系统 (2)—— 文件重定向 个人主页水墨不写bug (图片来源于网络) 目录 一、文件的读取和写入 二、文件重定向的本质 1.手动模拟重定向的过程——把标准输出重定向到redir.txt 2.重定向…

019_基于python+django食品销售数据分析系统2024_4032ydxt

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

基于SpringBoot的“社区医院管理服务系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“社区医院管理服务系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 医生界面…

量价关系总结

成交量总结: 平量无量,维持原状。放量缩量,改变现状。 成交量的变化会影响到股价的变化,同时成交量也是对股价的肯定,一个价格如果能被支撑住就必须有成交量相配合。因此,巨量必然会伴随着股价的大幅上涨。 缩量上涨:顶部见顶,底部见底 缩量下跌:顶部见顶,底部见底…

这4款实用的工具简直就是硬盘数据丢失的救星。

硬盘数据丢失的情况有很多种,像误删除,格式化,病毒攻击,硬件故障等等。如果不是物理上的损坏,丢失的数据还是可以通过一些方法进行恢复的。这里就跟大家分享几款可以进行数据恢复的专业数据件,希望可以帮助…

Apache Seatunnel Zeta引擎-启动脚本分析

Apache SeaTunnel Zeta引擎的集群模式启动的第一步是执行bin/seatunnel-cluster.sh脚本,所以先来学习下这个脚本。 脚本执行流程分析 脚本简要注释 #!/bin/bash # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license a…

设计模式02-桥接模式(Java)

4.2 桥接模式 **1.定义:**将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 2.结构: 抽象化角色 :定义抽象类,并包含一个对实现化…

你的电脑能不能安装windows 11,用这个软件检测下就知道了

为了应对Windows 11的推出,一款名为WhyNotWin11的创新型诊断软件应运而生。这个强大的工具不仅仅是一个简单的兼容性检测器,它更像是一位细心的数字医生,全方位评估您的计算机是否准备好迎接微软最新操作系统的挑战。 WhyNotWin11的功能远超…

【动手学深度学习】8.3 语言模型(个人向笔记)

下面是语言模型的简介 1. 学习语言模型 使用计数来建模 N元语法:这里的元可以理解为我们之前的时间变量。对于 N 元语法,我们可以把所有长度为 N 的子序列存下来。其中 1 元语法用的很少。这里其实就是算概率的时候我们不往前看所有的概率,…

[IOI2018] werewolf 狼人(Kruskal重构树 + 主席树)

https://www.luogu.com.cn/problem/P4899 首先,我们肯定要建两棵Kruskal重构树的,然后判两棵子树是否有相同编号节点 这是个经典问题,我们首先可以拍成dfs序,然后映射过去,然后相当于是判断一个区间是否有 [ l , r …

Educational Codeforces Round 170 (Rated for Div. 2) A-D

本期封面原图 画师るかちか 舞台剧篇的阿夸确实帅 当时看漫画就惊艳到我了 虽然下午练了两场但还是太久没打 哐哐掉分了😭😭😭 Educational Codeforces Round 170 (Rated for Div. 2) A. Two Screens 题意 两个屏幕都要显示字符串&#xff…

mysql学习教程,从入门到精通,SQL 约束(Constraints)(41)

在数据库设计中,约束(Constraints)用于确保数据的准确性和完整性。它们通过限制可以插入到数据库表中的数据类型来防止无效数据。SQL 中有几种常见的约束类型,包括主键约束(Primary Key)、外键约束&#xf…

前端遮罩层的应用

最近微信小程序需要开发新手引导功能&#xff0c;发现需要在遮罩层中间抠一个洞出来&#xff0c;但是一直不知道该怎么去做&#xff0c;其实很简单&#xff0c;先展示源码&#xff1a; <template><div class"num01">hello<div class"mask"&…

ai字幕用什么软件制作?6款视频加字幕工具分享!

在视频制作和后期处理中&#xff0c;字幕的添加是一个重要的环节。随着AI技术的发展&#xff0c;越来越多的软件开始支持AI自动加字幕功能&#xff0c;使得字幕的制作变得更加简单和高效。本文将为大家介绍几款常用的AI字幕制作软件&#xff0c;并详细讲解如何使用AI自动加字幕…

PyTorch 的 DataLoader 类介绍

DataLoader 类 功能与作用 PyTorch 是一个流行的开源机器学习库&#xff0c;它提供了一个名为 DataLoader 的类&#xff0c;用于加载数据集并将其封装成一个可迭代的对象。DataLoader 可以自动地将数据集划分为多个批次&#xff0c;并在训练过程中迭代地返回这些批次。是用于加…

【MySQL 保姆级教学】在Linux(CentoS 7)中安装MySQL(1)

目录 1. 卸载linux&#xff08;Centos7&#xff09; 中不要的环境2. 获取MySQL官方yum源2.1 获取yum源前先查看自己 linux&#xff08;Centos&#xff09;的版本2.2 获取官方yum源 3. 安装xftp和连接4. 开放连接端口5. 上传文件到Centos76. 安装MySQL6.1 顺利安装6.2 查询是否安…

从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络

文章目录 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;1. 什么是RNN&#xff1f;2. 经典RNN的结构3. RNN的主要特点4. RNN存在问题——长期依赖&#xff08;Long-TermDependencies&#xff09;问题 LSTM&#xff08;Long Short-Term Memory&a…

某MDM主数据管理系统与微软Dynamic CRM系统(国内节点)集成案例

一、需求分析 需要完成的核心场景&#xff1a; 客户主数据&#xff1a;通过SAP PO集成中间件平台&#xff0c;某MDM主数据实时推送客户主数据信息至微软CRM系统&#xff0c;方便微软CRM系统进行客户方面的管理&#xff0c;并供微软CRM查询员工信息&#xff0c;修改员工&…