当前位置: 首页 > news >正文

(三十六)Vue解决Ajax跨域问题

文章目录

  • 环境准备
  • vue的跨域问题
  • vue跨域问题解决方案
    • 方式一
  • 方式二

上一篇:(三十五)Vue之过渡与动画

环境准备

首先我们要借助axios发送Ajax,axios安装命令:npm i axios

其次准备两台服务器,这里使用node.js+express搭建
server1

const express = require('express')
const app = express()app.use((request,response,next)=>{console.log('有人请求服务器1了');next()
})app.get('/students',(request,response)=>{const students = [{id:'001',name:'tom',age:18},{id:'002',name:'jerry',age:19},{id:'003',name:'tony',age:120},]response.send(students)
})app.listen(5000,(err)=>{if(!err) console.log('服务器1启动成功了,请求学生信息地址为:http://localhost:5000/students');
})

server2

const express = require('express')
const app = express()app.use((request,response,next)=>{console.log('有人请求服务器2了');next()
})app.get('/cars',(request,response)=>{const cars = [{id:'001',name:'奔驰',price:199},{id:'002',name:'马自达',price:109},{id:'003',name:'捷达',price:120},]response.send(cars)
})app.listen(5001,(err)=>{if(!err) console.log('服务器2启动成功了,请求汽车信息地址为:http://localhost:5001/cars');
})

vue的跨域问题

我们知道vue脚手架默认是在localhost:8080这个端口运行,而我们需要访问上面两台服务器,一般来说请求会被CORS策略阻止

  <div><button @click="getStudents">获取学生信息</button><button @click="getSCars">获取汽车信息</button></div>
	getStudents(){axios.get('http://localhost:5000/students').then(response => {console.log('请求成功',response.data)},error => {console.log('请求失败',error.message)},getSCars(){axios.get('http://localhost:5001/cars').then(response => {console.log('请求成功',response.data)},error => {console.log('请求失败',error.message)})})

使用node server1.js启动服务器server1
node server2.js启动服务器server2

浏览器正常访问
访问server1
在这里插入图片描述
访问server2
在这里插入图片描述

vue跨域访问,被CORS策略阻止
在这里插入图片描述

vue跨域问题解决方案

Ajax跨域问题有很多解决方案,在后端解决方案有设置响应头,jsonp等等,具体参考:AJAX跨域问题及解决方案

vue脚手架提供一种解决方案,那就是使用代理服务器代理发送请求

发送请求方:localhost:8080
那么代理服务器跟发送方保持一致:localhost:8080
接收请求方:localhost:5000
那么形成
发送请求  发送方8080--->代理方8080--转发-->接收方5000
响应  接收方5000--响应-->代理方8080--转发-->发送方8080
根本原因是因为代理服务器8080与服务器5000相互访问是使用http协议,这就类似与浏览器访问服务器5000一样

方式一

在vue.config.js中添加如下配置:

  devServer: {proxy: 'http://localhost:5000' //要跨域域名}
	getStudents(){/*axios.get('http://localhost:5000/students').then(*///方式一axios.get('http://localhost:8080/students').then(response => {console.log('请求成功',response.data)},error => {console.log('请求失败',error.message)})}

在这里插入图片描述
优缺点:

  • 优点:配置简单,请求资源时直接发给前端(8080)即可。
  • 缺点:不能配置多个代理,不能灵活的控制请求是否走代理。

局限性:
若按照上述配置代理,当请求了前端不存在的资源时,那么该请求会转发给服务器 (优先匹配前端资源)
例如我在public创建与路径students相同名称的文件夹
请添加图片描述
请添加图片描述
那么再次请求学生资源时就会优先匹配文件students的内容
在这里插入图片描述

方式二

编写vue.config.js配置具体代理规则:

devServer: {proxy: {'/api1': {target: 'http://localhost:5000',//ws: true,//用于支持websocket//changeOrigin: true //用于控制请求头的host值,默认为true,表示请求头host值为要访问服务器的值(我就是你),当为false时,表示请求头host值为要代理服务器本身的值(我就是我)pathRewrite: {'^/api1': ''}//重写请求,用正则表达式匹配},'/api2': {target: 'http://localhost:5001',pathRewrite: {'^/api2': ''}}}}
    getStudents(){/*axios.get('http://localhost:5000/students').then(*///方式一/*axios.get('http://localhost:8080/students').then(*///方式二axios.get('http://localhost:8080/api1/students').then(response => {console.log('请求成功',response.data)},error => {console.log('请求失败',error.message)})},getSCars(){axios.get('http://localhost:8080/api2/cars').then(response => {console.log('请求成功',response.data)},error => {console.log('请求失败',error.message)})}

在这里插入图片描述
优缺点:

  • 优点:可以配置多个代理,且可以灵活的控制请求是否走代理。
  • 缺点:配置略微繁琐,请求资源时必须加前缀。

相关文章:

(三十六)Vue解决Ajax跨域问题

文章目录环境准备vue的跨域问题vue跨域问题解决方案方式一方式二上一篇&#xff1a;&#xff08;三十五&#xff09;Vue之过渡与动画 环境准备 首先我们要借助axios发送Ajax&#xff0c;axios安装命令&#xff1a;npm i axios 其次准备两台服务器&#xff0c;这里使用node.j…...

【CSAPP】整数表示

文章目录整型数据类型无符号数的编码补码编码确定大小的整数类型练习1练习2有符号数和无符号数之间的转换练习C语言中的有符号数与无符号数练习扩展一个数字的位表示练习1练习2截断数字练习关于有符号数与无符号数的建议练习1练习2使用 位编码整数有两种不同的方式&#xff1a;…...

Python基础2

1. python函数定义 函数定义语法&#xff1a; def 函数名&#xff08;传入参数&#xff09;&#xff1a; 函数体 return 返回值 —————————————— 参数如果不需要&#xff0c;可以省略返回值如果不需要&#xff0c;可以省略函数必须先定义在使用 注意&#xff…...

【项目立项管理】

项目立项管理 很杂&#xff0c;可以根据左边的列表查看自己不会的 。。。 立项管理主要是解决项目的组织战略符合性问题 开发所需的成本和资源属于经济可行性 承建方组织资源和项目的匹配程度 内部立项目的&#xff1a; 为项目进行资源分配&#xff0c;确定项目绩效目标&am…...

【验证码的识别】—— 极验验证码的识别

前言 &#xff08;结尾有彩蛋欧&#xff09; 目前&#xff0c;许多网站采取各种各样的措施来反爬虫&#xff0c;其中一个措施便是使用验证码。随着技术的发展&#xff0c;验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码&#xff0c;后来加入了英文字母和混…...

华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...

C生万物 | 模拟实现库函数strcpy之梅开n度

文章目录【梅开一度】&#xff1a;观察库函数strcpy()的实现【梅开二度】&#xff1a;模仿实现strcpy()【梅开三度】&#xff1a;优化简练代码【梅开四度】&#xff1a;assert()断言拦截【梅开五度】&#xff1a;const修饰常量指针【梅开六度】&#xff1a;还可以有返回值哦&am…...

家庭理财,轻松记账修改收支记录这样操作

我们在记账的时候难免会出现记错或者想修改的地方&#xff0c;又或者是想将之前太久没有用的记账记录删除掉&#xff0c;今天&#xff0c;小编就教大家如何修改收支记录&#xff0c;一起接着往下看吧&#xff01; 第一步&#xff0c;运行【晨曦记账本】在软件主界面中&#xff…...

河南工程学院2.17蓝桥杯培训

乘法口诀数列&#xff1a;https://www.acwing.com/problem/content/3466/ 剪绳子&#xff1a;https://www.acwing.com/problem/content/68Sin SinSine之舞&#xff1a;http://lx.lanqiao.cn/problem.page?gpidD5272 数列&#xff1a;https://www.acwing.com/problem/content/…...

【JavaSE】数据类型与变量

JAVA之父&#xff1a;詹姆斯高斯林 &#xff08;James Gosling&#xff09; 前言&#xff1a; 大家好&#xff0c;我是程序猿爱打拳。今天我给大家讲解的是Java基础中的数据类型。主要讲解的是各个类型的应用场景以及注意事项。 目录 1.数据类型 2.常量与变量 2.1常量 2.2变…...

生成模型技术发展过程

生成模型生成模型和判别模型的差异生成模型的目标是在给定了数据集D&#xff0c;并且假设这个数据集的底层分布(underlying distribution)是Pdata&#xff0c;我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型&#xff0c;我们就能用这个生成模型为下游任务做…...

计算机网络第2章(物理层)学习笔记

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…...

4564: 保留尾部*

描述规定输入的字符串中只包含字母和*号&#xff0c;除了尾部的*号之外&#xff0c;请将字符串中其他*号全部删除。输入输入数据包括一串字符串&#xff0c;只包含字母和*&#xff0c;总长度不超过80。输出输出按要求删除*后的字符串。样例输入*******A*BC*DEF*G****样例输出AB…...

安卓项目搭建grpc环境

本篇文章使用的IDE是Android Studio。这里先吐槽一句&#xff0c;安卓项目搭建grpc环境&#xff0c;不管是引入插件还是引入第三方库&#xff0c;对于版本的要求都极为苛刻&#xff0c;一旦版本不匹配就会报错&#xff0c;所以对于版本的搭配一定要注意。 下面介绍的这个版本搭…...

Flink01: 基本介绍

一、什么是Flink 1. Flink是一个开源的分布式&#xff0c;高性能&#xff0c;高可用&#xff0c;准确的流处理框架 &#xff08;1&#xff09;分布式&#xff1a;表示flink程序可以运行在很多台机器上&#xff0c; &#xff08;2&#xff09;高性能&#xff1a;表示Flink处理性…...

设计模式之单例模式

文章の目录一、什么是单例模式二、如何实现单例模式1、利用JavaScript中的全局对象2、静态成员改造参考写在最后一、什么是单例模式 单例模式也称为单体模式&#xff0c;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 举个栗子&#xff1a;一个班级只有一…...

[oeasy]python0086_ASCII_出现背景_1963年_DEC_PDP系列主机_VT系列终端

编码进化 回忆上次内容 上次 回顾了 字符编码的新陈代谢 ibm 曾经的EBCDIC 由于 字符不连续导致 后续 出现无数问题 随着 网络的发展 数据交换的 需要原来的小隐患现在 产生了 巨大问题 Bemer 联合各方巨头 想要推出 字符连续的编码集 这新编码集 具体长什么样 呢&#xff1…...

基于FFmpeg实现的无声音屏幕录制

UI自动化测试时&#xff0c;有时需要进行录屏操作&#xff0c;这时我们是不需要声音的&#xff0c;我们可以通过FFmpeg进行简单的录制工作。 以下是在windows10环境下&#xff0c;基于FFmpeg实现的简单录制&#xff1a; Ffmpeg简介&#xff1a; 功能&#xff1a;有非常强大的…...

【项目精选】基于JSP物流信息网(论文+源码+视频)

点击下载源码 近年来&#xff0c;随着时代的进步&#xff0c;社会随之不断发展&#xff0c;经济也快速发展起来了&#xff0c;人民的消费水平在不断地提高&#xff0c;平常的实体店消费已经不能满足人们的需求&#xff1b;在者&#xff0c;互联网技术的不断发展也为电子商务的兴…...

linux异步IO编程实例分析

在Direct IO模式下&#xff0c;异步是非常有必要的&#xff08;因为绕过了pagecache&#xff0c;直接和磁盘交互&#xff09;。linux Native AIO正是基于这种场景设计的&#xff0c;具体的介绍见&#xff1a;KernelAsynchronousI/O (AIO)SupportforLinux。下面我们就来分析一下…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

2025-05-08-deepseek本地化部署

title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek&#xff1a;小白也能轻松搞定&#xff01; 如何给本地部署的 DeepSeek 投喂数据&#xff0c;让他更懂你 [实验目的]&#xff1a;理解系统架构与原…...