Vue 跨域解决方案及其原理剖析
在现代 Web 开发中,跨域问题是前端开发者经常面临的挑战之一。当使用 Vue.js 构建应用时,跨域请求的处理尤为重要。本文将深入探讨 Vue 解决跨域的多种方法及其背后的原理,帮助开发者更好地理解和应对这一常见问题。
一、跨域问题概述
1. 同源策略
同源策略(Same-Origin Policy)是浏览器的一个重要安全机制,它限制了一个源(协议、域名、端口三者完全相同)的网页如何与另一个源的资源进行交互。例如,当你在浏览器中访问https://example.com
时,浏览器会阻止该页面直接访问https://api.anotherdomain.com
的资源,因为它们的域名不同。
2. 跨域请求的限制
同源策略导致了以下几种常见的跨域限制:
- AJAX 请求受限:使用 XMLHttpRequest 或 fetch API 发送的请求会受到同源策略的限制。
- DOM 无法访问:不同源的页面之间无法直接访问对方的 DOM 元素。
- Cookie、LocalStorage 受限:不同源的页面无法共享 Cookie、LocalStorage 等数据。
3. 跨域场景
在 Vue 开发中,跨域问题通常出现在以下场景:
- 前后端分离开发,前端运行在本地开发服务器(如
http://localhost:8080
),而后端 API 服务运行在另一个域名(如https://api.example.com
)。 - 部署到生产环境后,前端应用和后端 API 服务不在同一个域名下。
二、Vue 解决跨域的方法及原理
1. 开发环境下的代理服务器(vue.config.js)
实现方法
在 Vue 项目中,最常用的开发环境跨域解决方案是使用 Vue CLI 提供的代理服务器。通过配置vue.config.js
文件,可以将特定路径的请求转发到后端 API 服务器。
// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'https://api.example.com', // 后端API服务器地址changeOrigin: true, // 是否改变请求源pathRewrite: {'^/api': '' // 路径重写,将/api替换为空}}}}
};
原理
这种方法的核心原理是利用了开发服务器(通常是 webpack-dev-server)的代理功能。当浏览器发送请求到http://localhost:8080/api/data
时,开发服务器会将该请求转发到https://api.example.com/data
,并且在转发过程中会修改请求头中的 Origin 字段,使其与目标服务器一致,从而绕过浏览器的同源策略检查。
这种方式只在开发环境中有效,因为生产环境中没有 webpack-dev-server 这样的代理服务器。在生产环境中,需要使用其他方法来解决跨域问题。
2. JSONP(JSON with Padding)
实现方法
JSONP 是一种古老的跨域数据交互技术,它利用了<script>
标签的 src 属性不受同源策略限制的特点。在 Vue 中,可以通过封装一个 JSONP 函数来实现跨域数据请求。
// jsonp.js
export default function jsonp(url, params = {}, callbackName = 'callback') {return new Promise((resolve, reject) => {// 处理参数const queryString = Object.keys(params).map(key => `${key}=${encodeURIComponent(params[key])}`).join('&');// 生成唯一的回调函数名const uniqueCallbackName = `${callbackName}_${Date.now()}`;// 创建script标签const script = document.createElement('script');script.src = `${url}?${queryString}&${callbackName}=${uniqueCallbackName}`;// 定义全局回调函数window[uniqueCallbackName] = (data) => {resolve(data);// 清理document.body.removeChild(script);delete window[uniqueCallbackName];};// 错误处理script.onerror = (error) => {reject(error);document.body.removeChild(script);delete window[uniqueCallbackName];};// 将script标签添加到页面document.body.appendChild(script);});
}
原理
JSONP 的工作原理如下:
- 前端创建一个
<script>
标签,其 src 属性指向后端 API,并在 URL 中添加一个回调函数名作为参数(例如callback=jsonpCallback
)。 - 后端收到请求后,会将数据包装在这个回调函数中返回(例如
jsonpCallback({data: 'response'})
)。 - 当浏览器加载这个 script 时,会执行其中的回调函数,从而获取到后端返回的数据。
需要注意的是,JSONP 只支持 GET 请求,因为它是通过<script>
标签实现的,而<script>
标签只能发送 GET 请求。此外,JSONP 需要后端配合,返回 JSONP 格式的数据。
3. CORS(跨域资源共享)
实现方法
CORS 是现代浏览器支持的跨域解决方案,它通过在服务器端设置响应头来允许跨域访问。在 Vue 中,我们只需要正常发送 AJAX 请求,而跨域的处理主要在后端。
// Vue组件中使用axios发送跨域请求
import axios from 'axios';export default {methods: {async fetchData() {try {const response = await axios.get('https://api.example.com/data');console.log(response.data);} catch (error) {console.error(error);}}}
};
后端配置示例(Node.js Express)
const express = require('express');
const cors = require('cors');
const app = express();// 允许所有域名的跨域请求
app.use(cors());// 或者自定义配置
app.use(cors({origin: 'http://localhost:8080', // 允许的源methods: 'GET,POST,PUT,DELETE', // 允许的HTTP方法allowedHeaders: 'Content-Type,Authorization' // 允许的请求头
}));// 路由处理
app.get('/data', (req, res) => {res.json({ message: 'Hello from server!' });
});app.listen(3000, () => {console.log('Server running on port 3000');
});
原理
CORS 的核心是通过服务器设置响应头来告诉浏览器,允许哪些源(Origin)、哪些 HTTP 方法和哪些请求头可以跨域访问资源。主要的响应头包括:
Access-Control-Allow-Origin
:指定允许访问该资源的外域 URI。例如Access-Control-Allow-Origin: http://localhost:8080
。Access-Control-Allow-Methods
:指定允许的 HTTP 方法,如 GET、POST 等。Access-Control-Allow-Headers
:指定允许的请求头。Access-Control-Allow-Credentials
:指示是否允许发送 Cookie 等凭证信息。
浏览器在发送跨域请求时,会根据请求的类型自动进行预检(Preflight)请求或直接发送实际请求。预检请求使用 OPTIONS 方法,用于检查服务器是否允许该跨域请求。
4. 后端代理
实现方法
另一种解决跨域的方法是在后端设置代理服务器,前端应用与后端代理服务器同源,而后端代理服务器负责与外部 API 通信。
例如,在 Node.js 中可以使用 Express 和 http-proxy-middleware 来实现后端代理:
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();// 代理/api路径的请求到目标API服务器
app.use('/api', createProxyMiddleware({target: 'https://api.example.com',changeOrigin: true,pathRewrite: {'^/api': ''}
}));// 启动服务器
app.listen(8080, () => {console.log('Proxy server running on port 8080');
});
原理
这种方法的原理是:前端应用将请求发送到与自己同源的后端代理服务器,后端代理服务器再将请求转发到真正的目标 API 服务器。由于服务器之间的通信不受同源策略限制,因此可以成功获取数据并返回给前端。
这种方式的优点是安全性高,可以在代理服务器上进行额外的安全处理,如身份验证、请求过滤等。缺点是增加了服务器的负载和复杂度。
三、生产环境下的跨域解决方案
在生产环境中,由于没有开发服务器的代理功能,通常采用以下几种方式解决跨域问题:
1. CORS(推荐)
在生产环境中,最常用的跨域解决方案是配置后端服务器支持 CORS。这种方法简单高效,不需要额外的代理服务器。
2. 反向代理服务器(如 Nginx)
可以使用 Nginx 等反向代理服务器来解决跨域问题。配置示例如下:
server {listen 80;server_name example.com;# 静态文件服务location / {root /path/to/your/vue/app;index index.html;try_files $uri $uri/ /index.html;}# API代理location /api/ {proxy_pass https://api.example.com/;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;}
}
这种配置将前端应用和后端 API 都部署在同一个域名下,前端请求/api/data
会被 Nginx 代理到https://api.example.com/data
,从而避免了跨域问题。
四、总结
Vue 解决跨域问题的方法有多种,每种方法都有其适用场景和原理:
- 开发环境代理:通过 webpack-dev-server 的代理功能,在开发阶段解决跨域问题,简单高效。
- JSONP:利用
<script>
标签的特性实现跨域数据请求,适用于不支持 CORS 的旧浏览器,但只支持 GET 请求。 - CORS:现代浏览器支持的跨域解决方案,需要后端配合设置响应头,是最推荐的方法。
- 后端代理:在后端设置代理服务器,将请求转发到目标 API,适用于对安全性要求较高的场景。
在实际开发中,需要根据项目的具体情况选择合适的跨域解决方案。开发环境下推荐使用代理服务器,而生产环境则推荐使用 CORS 或反向代理服务器。理解这些方法的原理,有助于开发者更好地应对和解决跨域问题,提升应用的用户体验和安全性。
相关文章:
Vue 跨域解决方案及其原理剖析
在现代 Web 开发中,跨域问题是前端开发者经常面临的挑战之一。当使用 Vue.js 构建应用时,跨域请求的处理尤为重要。本文将深入探讨 Vue 解决跨域的多种方法及其背后的原理,帮助开发者更好地理解和应对这一常见问题。 一、跨域问题概述 1. 同…...
TikTok 互动运营干货:AI 助力提升粘性
在 TikTok 运营的众多环节中,与用户的互动是建立紧密联系、提升账号粘性的关键所在。及时且真诚地回复评论和私信,能让用户切实感受到你的关注与尊重,从而极大地增强他们对你的好感与粘性。对于用户提出的问题,要以耐心、专业的态…...
Kids A-Z安卓版:儿童英语启蒙的优质选择
Kids A-Z安卓版 是一款由北美知名分级读物厂商 Learning A-Z 官方推出的英语分级学习应用,也被称为 Raz-Kids app。它专为 K-5 年级的学生设计,提供丰富的英语学习资源和互动学习体验,帮助孩子们在轻松愉快的环境中提升英语能力。通过动画、互…...
接口继承与扩展的使用技巧
在 TypeScript 中,接口继承和扩展是非常强大且灵活的功能,可以帮助我们更高效地管理类型和提高代码的可重用性。接口继承使得一个接口可以从另一个接口继承属性和方法,而接口扩展允许我们通过组合多个接口来构建更复杂的结构。这些特性使得 T…...
【React】Craco 简介
Craco 简介 Craco (Create React App Configuration Override) 是一个用于自定义 Create React App (CRA) 配置的工具,无需 eject(弹出)项目。 为什么需要 Craco Create React App 虽然提供了零配置的 React 开发体验,但其配置…...
HTML5中的Microdata与历史记录管理详解
Microdata 简介 Microdata 是 HTML5 引入的一种标记方式,用于在网页中嵌入机器可读的语义信息。通过使用 Microdata,开发者可以在 HTML 元素中添加特定的属性,以便搜索引擎和其他工具更好地理解网页内容。 Microdata 的核心属性包括 itemsc…...
UNet网络 图像分割模型学习
UNet 由Ronneberger等人于2015年提出,专门针对医学图像分割任务,解决了早期卷积网络在小样本数据下的效率问题和细节丢失难题。 一 核心创新 1.1对称编码器-解码器结构 实现上下文信息与高分辨率细节的双向融合 如图所示:编码器进行了4步&…...
Babel 深度解析:现代 JavaScript 开发的桥梁
1. 什么是 Babel? Babel 是一个 JavaScript 编译器(又称转译器),核心使命是解决 JavaScript 的环境兼容性问题。它允许开发者使用最新的语言特性(如 ES6、JSX、TypeScript),同时将代码转换为旧…...
MyBatis源码解读2(2.1、核心对象)
二、MyBatis的核心对象 2.1、核心对象 2.1、MappedStatement MyBatis其实是对JDBC的进一步封装,我们都知道JDBC有几个重要的对象: StatementPrepared StatementCallable StatementResultSet Statement、Prepared Statement、Callable Statement分别…...
03.three官方示例+编辑器+AI快速学习webgl_animation_multiple
本实例主要讲解内容 这个示例展示了Three.js中骨骼动画的高级应用技巧,重点演示了如何使用SkeletonUtils.clone()方法复制模型,并展示了两种不同的骨骼动画管理方式: 独立骨骼模式:每个模型拥有独立的骨骼结构,可播放…...
无锁秒杀系统设计:基于Java的高效实现
引言 在电商促销活动中,秒杀场景是非常常见的。为了确保高并发下的数据一致性、性能以及用户体验,本文将介绍几种不依赖 Redis 实现的无锁秒杀方案,并提供简化后的 Java 代码示例和架构图。 一、基于数据库乐观锁机制 ✅ 实现思路…...
MyBatis快速入门——实操
默认:电脑搭建好了Maven环境 本次入门实验使用的idea版本:ideaU2022.1 目录 一:前期准备工作 1. 创建一个springboot工程 2. Maven环境配置 3. 在mysql数据库中创建一个user表 4. 编写实体类User 二: 引入MyBatis的相关依赖…...
假如你的项目是springboot+vue怎么解决跨域问题
1. 前端代理(开发环境推荐) 适用场景:Vue 开发环境调试时,避免直接请求后端接口的跨域问题。 实现步骤: 在 Vue 项目的 vue.config.js 中配置代理: module.exports {devServer: {proxy: {/api: { // 代理…...
OpenResty反向代理
通过在 OpenResty 的配置文件中定义不同的 location 块,将匹配特定 URL 路径的请求转发到不同的后端 FastAPI 应用(即使它们运行在不同的端口或甚至是不同的服务器/容器上)。 核心思路: 多个 FastAPI 应用实例: 你的每…...
《Effective Python》第1章 Pythonic 思维详解——深入理解 Python 条件表达式(Conditional Expressions)
《Effective Python》第1章 Pythonic 思维详解——深入理解 Python 条件表达式(Conditional Expressions) 在 Python 中,条件表达式(conditional expressions)提供了一种简洁的方式来在一行中实现 if/else 的逻辑。它…...
【Typenum】 3 类型位运算(bit.rs)
一、源码 代码定义了一个类型级别的位(bit)系统,主要用于编译时的类型运算。 //! 类型级比特位实现 //! //! 这些是基础的比特位类型,作为本库中其他数值类型的构建基础 //! //! 已实现的**类型运算符**: //! //! - …...
python:trimesh 用于 STL 文件解析和 3D 操作
python:trimesh 是一个用于处理三维模型的库,支持多种格式的导入导出,比如STL、OBJ等,还包含网格操作、几何计算等功能。 Python Trimesh 库使用指南 安装依赖库 pip install trimesh Downloading trimesh-4.6.8-py3-none-any.w…...
stm32week15
stm32学习 十一.中断 2.NVIC Nested vectored interrupt controller,嵌套向量中断控制器,属于内核(M3/4/7) 中断向量表:定义一块固定的内存,以4字节对齐,存放各个中断服务函数程序的首地址,中断向量表定…...
数据库分库分表实战指南:从原理到落地
1. 为什么要分库分表? 1.1 单库瓶颈表现 存储瓶颈:单表数据超过5000万行,查询性能急剧下降性能瓶颈:单库QPS超过5000后响应延迟显著增加可用性风险:单点故障导致全系统不可用 1.2 突破性优势 --------------------…...
雷达工程师面试题目
雷达工程师面试题目 一、基础知识类 简述雷达的工作原理 请从电磁波的发射、传播、反射以及回波接收处理等环节,详细阐述雷达如何实现对目标的探测、定位与跟踪。 常见雷达体制及其特点 列举至少三种常见的雷达体制(如脉冲雷达、连续波雷达、相控阵雷达等),并分别说明…...
JVM-类加载子系统
最近在学习JVM,分模块整理一下JVM的笔记 目录 类加载子系统 一、加载 二、链接 1.验证 2.准备 3.解析 三、初始化 类加载子系统 类加载子系统负责将字节码文件加载到虚拟机中,我们正常编写完一个Java类并在前端编译器编译后会生成一个对应的字节码…...
从0开始学习大模型--Day06--大模型的相关网络架构
云服务器 在平时,我们总能听到诸如用服务器跑数据、模型,或者是搭建服务器之类的话,实际上,它相当于一台算力、内存、运行内存等各个方面都很强大的电脑,只需要我们用自己的电脑通过互联网链接他就能使用它࿰…...
控制LED灯设备
本章分别使用C库和系统调用的文件操作方式控制开发板的LED灯,展示如何在应用层通过系统提供的设备文件控制相关硬件。 本章的示例代码目录为:base_code/linux_app/led/sys_class_leds。 9.1. LED子系统 在Linux系统中,绝大多数硬件设备都有…...
Three.js + React 实战系列 - 联系方式提交表单区域 Contact 组件✨(表单绑定 + 表单验证)
对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!! 在现代网页中,一个精致的 Contact 区域不仅仅是表单的堆砌,更是用户与我们建立联系的第一印象。 在本节课中,我…...
Python-MCPAgent开发-DeepSeek版本
Python-MCPAgent开发-DeepSeek版本 尝试Windows使用Python完成【McpServer】【McpAgent】开发,当前使用OpenAI-Agents框架进行开发 1-核心知识点 先完成【LLM】配置再完成【McpServer】开发再完成【Agent】开发完成【LLM】【McpServer】【Agent】请求互通 2-思路整…...
Linux:43线程封装与互斥lesson31
mmap文件映射视屏:待看... 目录 线程栈 代码证明:一个线程的数据,其他线程也可以访问 线程封装 简单封装,2.thread Thread.hpp Main.cc Makefile 结果: 编辑 问题1: 问题2: lamba表达式 模版封…...
stm32测频率占空比最好的方案
频率检测, 方案方法很多种, 其中最快最节省资源的方法. 分享给大家. 其它的方案都试过, 问题多多. 适合单片机在工业应用中, 1MHZ以下的频率检测. 1MHZ估计也行. 但是偏差估计是变大了. 我试过很多种方案, 可以看我前面的文章. 最后发现目前这种方案最为优秀. 主要特点为不占用…...
Redis--常见数据类型List列表
目录 一、概念 二、命令 2.1 LPUSH 2.2 LPUSHX 2.3 RPUSH 2.4 RPUSHX 2.5 LRANGE 2.6 LPOP 2.7 RPOP 2.8 LINDEX 2.9 LINSERT 2.10 LLEN 2.11 阻塞版本命令 三、内部编码 一、概念 列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素&…...
Linux : 多线程【线程概念】
Linux : 多线程【线程概念】 (一)线程概念线程是什么用户层的线程linux中PID与LWP的关系 (二) 进程地址空间页表(三) 线程总结线程的优点线程的缺点线程异常线程用途 (一)线程概念 线程是什么 在一个程序里的一个执行…...
React+Springboot项目部署ESC服务器
记录一下我个人部署Linux服务器的心得 环境介绍 ESC服务器创建时默认安装LNMP,即Linux,Nginx,Mysql,Php 所以这里不讲怎么安装Nignx和Mysql 笔者使用的Linux版本为22.0.4LTS版 前端打包 运行React打包命令进行前端项目的打包…...
python-Pandas库详细教程
python-Pandas库详细教程1 定义使用方法: 一、导入Pandas库代码 二、DataFrame用法Pandas索引 groupby()数值计算 定义 python中特定用于数据分析、处理的模板库。 优点: 处理数据便捷、简单。 使用方法: 处理“.csv”数据:rea…...
力扣刷题Day 46:搜索二维矩阵 II(240)
1.题目描述 2.思路 方法1:分别找到搜索矩阵的右、下边界,然后从[0][0]位置开始遍历这部分矩阵搜索目标值。 方法2:学习Krahets佬的思路,从搜索矩阵的左下角开始遍历,matrix[i][j] > target时消去第i行,…...
C++:类和对象4
一,日期类实现 学习建议: 对于计算机学习来说,调试十分重要,所以在日常学习中一定要加大代码练习,刷代码题和课后自己敲出课上代码例题,注意不要去对比正确代码或者网上找正确代码直接使用,一…...
【软件工程】基于机器学习的多缺陷定位
基于机器学习的多缺陷定位(Multi-Dault Localization, MDL)是软件工程和自动化测试领域的重要研究方向,旨在通过机器学习技术高效识别代码中多个潜在缺陷的位置。以下从方法、挑战、应用场景及未来方向展开分析: 一、核心方法 监督…...
互联网大厂Java求职面试实战:Spring Boot到微服务的技术问答解析
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏…...
LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升
LLMs之MCP:2025年5月2日,Anthropic 宣布 Claude 重大更新:集成功能上线,研究能力大幅提升 导读:2025年5月2日,Anthropic 宣布 Claude 推出 Integrations 集成功能和增强型高级研究功能。Integrations 基于 …...
飞蛾扑火算法matlab实现
注意:此代码实现的是求目标函数最大值,求最小值可将适应度函数乘以-1(框架代码已实现)。 注意:此代码实现的是求目标函数最大值,求最小值可将适应度函数乘以-1(框架代码已实现)。 注…...
vector--OJ1
链接: link class Solution { public:int singleNumber(vector<int>& nums) {int ret0;for(auto a : nums){ret^a;}return ret;} };链接: link class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<int>>…...
多模态大语言模型arxiv论文略读(六十八)
Image-of-Thought Prompting for Visual Reasoning Refinement in Multimodal Large Language Models ➡️ 论文标题:Image-of-Thought Prompting for Visual Reasoning Refinement in Multimodal Large Language Models ➡️ 论文作者:Qiji Zhou, Ruoc…...
【数据库知识】Mysql进阶-高可用MHA(Master High Availability)方案
mysql高可用MHA(Master High Availability)方案 集群部署模式下的高可用方案一、高可用架构原理1. 核心组件2. 故障切换流程 二、详细部署步骤 (3节点集群)1. 环境准备2. 节点配置(以 node1 为例)3. 初始化集群4. 部署MySQL Route…...
类型别名与接口的对比与选择
在 TypeScript 中,类型系统是非常强大且灵活的。两种最常用的类型定义方式就是 类型别名(type) 和 接口(interface)。它们看似相似,实际上在用法和功能上有所不同。在本文中,我们将深入探讨类型…...
《Effective Python》第1章 Pythonic 思维详解——始终用括号包裹单元素元组
《Effective Python》第1章 Pythonic 思维详解——始终用括号包裹单元素元组 在 Python 编程语言中,元组(tuple)是一种不可变的数据结构,常用于表示一组固定的值。尽管元组的语法看似简单,但其中却隐藏着一些微妙的陷…...
【计算机视觉】OpenCV实战项目:ETcTI_smart_parking智能停车系统深度解析
ETcTI_smart_parking智能停车系统深度解析 1. 项目概述2. 技术原理与系统架构2.1 核心算法1) 车牌识别算法2) ETC交易验证 2.2 系统架构 3. 实战部署指南3.1 环境配置3.2 硬件部署规范3.3 系统初始化 4. 常见问题与解决方案4.1 ETC交易失败4.2 车牌识别异常4.3 系统性能瓶颈 5.…...
LintCode第807题-回文数II
描述 判断一个非负整数 n 的二进制表示是否为回文数 我们保证 0 < n < 2^32 - 1 样例1 输入: n 0 输出: True 解释: 0 的二进制表示为:0。 样例2 输入: n 3 输出: True 解释: 3 的二进制表示为:11。 样例3 输入: n 4 输出: False 解释:…...
快速傅里叶变换暴力涨点!基于时频特征融合的高创新时间序列分类模型
往期精彩内容: 单步预测-风速预测模型代码全家桶-CSDN博客 半天入门!锂电池剩余寿命预测(Python)-CSDN博客 超强预测模型:二次分解-组合预测-CSDN博客 VMD CEEMDAN 二次分解,BiLSTM-Attention预测模型…...
股指期货的保证金交易和资金门槛是多少?
股指期货和股票交易最大的区别,就是它不用“全款买房”,而是“首付买房”——只需交一笔保证金就能撬动大额资金,但这也说明了门槛高、风险大。下面就来拆解,到底要准备多少钱才能“上车”。 一、保证金交易:用12万撬…...
spark:map 和 flatMap 的区别(Scala)
场景设定 假设有一个包含句子的 RDD: scala val rdd sc.parallelize(List("Hello World", "Hi Spark")) 目标是:将每个句子拆分成单词。 1. 用 map 的效果 代码示例 scala val resultMap rdd.map(sentence > sentence…...
判断两台设备是否在同一局域网内的具体方法
以下是判断两台设备是否在同一局域网内的具体方法: 1. 检查IP地址和子网掩码 操作步骤: Windows系统: 按 Win R 键,输入 cmd 并回车。输入 ipconfig,查看 IPv4 地址 和 子网掩码(如 192.168.1.5/255.255.2…...
cmake:test project
本文主要探讨cmake在测试和项目中的应用。 add_test add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>] [COMMAND_EXPAND_LISTS]) add_test(NAME test_uni COMMAND $<TARGET_F…...
Qwen-2.5 omni
问题1 Qwen2.5-Omni的主要功能是什么? Qwen2.5-Omni的主要功能是处理和生成多种模态的数据,包括文本、图像、音频和视频。它能够同时理解和生成这些模态的信息,支持复杂的多模态任务,例如语音对话、视频理解、图像描述生成等。 …...