XHR、FetchAxios详解网络相关大片文件上传下载
以下是 XHR(XMLHttpRequest) 与 Fetch API 的全面对比分析,涵盖语法、功能、兼容性等核心差异:
一、语法与代码风格
-
XHR(基于事件驱动)
需要手动管理请求状态(如onreadystatechange
事件)和错误处理,代码冗长且易出现回调地狱。const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.example.com/data'); xhr.onreadystatechange = function() {if (xhr.readyState === 4 && xhr.status === 200) {console.log(xhr.responseText);} }; xhr.send();
-
Fetch(基于 Promise)
使用链式调用或async/await
,语法简洁直观,支持现代异步编程模式。fetch('https://api.example.com/data').then(response => response.json()).then(data => console.log(data)).catch(error => console.error(error));
二、核心功能差异
特性 | XHR | Fetch |
---|---|---|
错误处理 | 需手动检查 status 码 | 仅网络错误触发 catch ,HTTP 错误需通过 response.ok 判断 |
跨域请求 | 需设置 withCredentials | 默认不支持跨域,需通过 CORS 配置 |
流式传输 | 仅部分浏览器支持(如 IE) | 原生支持 ReadableStream ,适合大文件处理 |
请求取消 | 通过 xhr.abort() 实现 | 需依赖 AbortController |
进度监听 | 支持 onprogress 事件 | 无原生支持,需通过第三方库实现 |
Cookie 处理 | 默认携带 | 需设置 credentials: 'include' |
响应类型 | 需手动设置 responseType | 通过 .json() 、.text() 等方法解析 |
三、性能与扩展性
-
XHR
• 优点:兼容性好(支持 IE10+),适合需要精细控制请求头、同步请求的场景。
• 缺点:无法直接处理流数据
,内存占用较高。 -
Fetch
• 优点:基于 Promise 和 Stream,支持分块读取数据
,减少内存压力。
• 缺点:默认不处理 Cookie,需手动配置;不支持同步请求
。
四、适用场景
-
优先选择 XHR
• 需要兼容旧浏览器(如 IE)。
• 需要实时监听上传/下载进度(如大文件传输)。
• 需要直接取消请求
(如用户中断操作)。 -
优先选择 Fetch
• 现代 Web 应用,追求代码简洁性和可维护性。
•需要流式处理数据(如实时日志或视频流)
。
• 与 Service Worker 结合实现离线缓存或请求拦截
。
五、生态系统与工具
• XHR 封装库:axios
(支持浏览器和 Node.js)、jQuery.ajax
。
• Fetch 封装库:redaxios
(轻量兼容)、umi-request
(企业级功能)。
• Polyfill:Fetch 需引入 isomorphic-fetch
或 whatwg-fetch
支持旧浏览器。
总结
XHR 作为传统 API,适合需要精细控制或兼容性
的场景;Fetch 凭借现代化设计和流式处理能力,更适合追求开发效率和性能优化的项目。实际开发中可根据项目需求灵活选择,甚至两者结合使用(如用 axios
兼容 XHR 和 Fetch)。
以下是 XHR 和 Fetch 的 GET/POST 请求基础写法及封装方法,结合两种技术的核心特性与最佳实践:
一、原生写法对比
1. XHR 实现
GET 请求
const xhrGet = new XMLHttpRequest();
xhrGet.open('GET', 'https://api.example.com/data?id=1');
xhrGet.onreadystatechange = function() {if (xhrGet.readyState === 4 && xhrGet.status === 200) {console.log(JSON.parse(xhrGet.responseText));} else if (xhrGet.status >= 400) {console.error('请求失败:', xhrGet.status);}
};
xhrGet.send();
POST 请求
const xhrPost = new XMLHttpRequest();
xhrPost.open('POST', 'https://api.example.com/data');
xhrPost.setRequestHeader('Content-Type', 'application/json');
xhrPost.onreadystatechange = function() {if (xhrPost.readyState === 4 && xhrPost.status === 201) {console.log('创建成功:', xhrPost.responseText);}
};
xhrPost.send(JSON.stringify({ name: 'Alice', age: 30 }));
2. Fetch 实现
GET 请求
fetch('https://api.example.com/data?id=1').then(response => {if (!response.ok) throw new Error(`HTTP错误: ${response.status}`);return response.json();}).then(data => console.log(data)).catch(error => console.error('请求失败:', error));
POST 请求
fetch('https://api.example.com/data', {method: 'POST',headers: {
相关文章:
XHR、FetchAxios详解网络相关大片文件上传下载
以下是 XHR(XMLHttpRequest) 与 Fetch API 的全面对比分析,涵盖语法、功能、兼容性等核心差异: 一、语法与代码风格 XHR(基于事件驱动) 需要手动管理请求状态(如 onreadystatechange 事件)和错误处理,代码冗长且易出现回调地狱。 const xhr = new XMLHttpRequest(); x…...
共享内存(与消息队列相似)
目录 共享内存概述 共享内存函数 (1)shmget函数 功能概述 函数原型 参数解释 返回值 示例 结果 (2)shmat函数 功能概述 函数原型 参数解释 返回值 (3)shmdt函数 功能概述 函数原型 参数解释…...
【3D开发SDK】HOOPS SDKS如何在BIM行业运用?
Tech Soft 3D提供了支持核心功能的软件开发工具,使开发人员可以使用Windows,Linux,OSX和移动平台等广泛的平台来构建巨大而复杂的建筑和BIM应用程序。HOOPS SDK支持多种格式的CAD导入和3D查看技术。这些技术受到了Trimble,RIB&…...
纳米软件矿用电源模块自动化测试方案分享
矿用电源模块主要是用于矿井等危险环境的一种电源系统,它可以为矿井中的仪器提供充足的电力支持。由于矿用电源经常用在危险环境中,因此对于矿用电源的稳定性要求极为严格。 纳米软件矿用电源模块自动化测试方案 测试需求分析 矿用电源模块作为矿井作业…...
pycharm中安装Charm-Crypto
一、安装依赖 1、安装gcc、make、perl sudo apt-get install gcc sudo apt-get install make sudo apt-get install perl #检查版本 gcc -v make -v perl -v 2、安装依赖库m4、flex、bison(如果前面安装过pypbc的话,应该已经装过这些包了) sudo apt-get update sudo apt…...
RTX30系显卡运行Tensorflow 1.15 GPU版本
30系显卡只支持cuda11.0及以上版本,但很多tensorflow项目用的仍然是1.1x版本,这些版本需要cuda10或者以下版本,这就导致在30系显卡上无法正常运1.1x版本的tensorflow,最近几天我也因为这个问题头疼不已,网上一番搜索…...
adb|scrcpy的安装和配置方法|手机投屏电脑|手机声音投电脑|adb连接模拟器或手机
adb|scrcpy的安装和配置方法手机投屏电脑|手机声音投电脑|adb连接模拟器或手机或电视 引言 在数字设备交织的现代生活中,adb(Android Debug Bridge)与 scrcpy 宛如隐匿的强大工具,极大地拓展了我们操控手机、模拟器乃至智能电视等…...
LangChain4j(2):Chat、流式与文生图模型功能
本文将探讨 LangChain4j 的聊天对话、流式对话以及文生图这三种常见且实用的功能,以及实际代码示例 一、聊天对话(ChatLanguageModel) 在 LangChain4j 中,使用ChatLanguageModel进行基本的聊天对话简单直观。以下是一段示例代码&a…...
Uniapp当中的async/await的作用
一、原始代码的行为(使用 async/await) const getUserMessagePlan async () > {// 等待两个异步操作完成const tabsList await message.getTagesList(); // 等待获取标签列表const tagsStateList await message.getTagsStateList(); // 等…...
JS包装类型Array
reduce()函数 没有起始值的执行过程 有初始值的执行过程 计算对象 是对象数组的情况 数组类型 方法...
Cursor + MCP让Blender实现自动建模
先决条件 Blender 3.0 或更新版本 Python 3.10 或更高版本 uv Blender安装 && 插件安装 下载Blender,版本最好是3.x以上的版本,选择适合自己的平台,地址:Download — blender.org 安装插件 从https://g…...
websocket深入-webflux+websocket
文章目录 背景版本约定配置文件代码使用webflux使用websocket配置文件handler基类实现类注册路由 背景 基于更复杂的情况和更高的开发要求,我们可能会遇到必须同时要使用webflux和websocket的情况。 版本约定 JDK21Springboot 3.2.0Fastjson2lombok 配置文件 &…...
LangChain-输出解析器 (Output Parsers)
输出解析器是LangChain的重要组件,用于将语言模型的原始文本输出转换为结构化数据。本文档详细介绍了输出解析器的类型、功能和最佳实践。 概述 语言模型通常输出自然语言文本,但在应用开发中,我们经常需要将这些文本转换为结构化的数据格式…...
wsl2+ubuntu22.04安装blenderproc教程
本章教程,介绍如何在windows操作系统上通过wsl2+Ubuntu22.04上安装blenderproc。 一、pipi安装方式 推荐使用minconda3安装Python环境。 pip install Blenderproc二、源码安装 1、下载源码 git clone https://github.com/DLR-RM/BlenderProc2、安装依赖 cd BlenderProc &am…...
矩阵热图】】
一、基础热图绘制 import matplotlib.pyplot as plt import numpy as np# 模拟数据生成 matching_history [np.random.randint(0, 2, (5, 3)) for _ in range(4)] # 5个UE,3个边缘服务器,4次迭代# 绘制最终匹配矩阵 plt.figure(figsize(10, 6)) plt.i…...
opencv人脸性别年龄检测
一、引言 在计算机视觉领域,人脸分析是一个热门且应用广泛的研究方向。其中,人脸性别年龄检测能够自动识别图像或视频流中人脸的性别和年龄信息,具有诸多实际应用场景,如市场调研、安防监控、用户个性化体验等。OpenCV 作为一个强…...
idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊
idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊 在 IntelliJ IDEA(或其他 JetBrains 系列 IDE)中无法运行某些命令,但在系统的命令提示符(CMD)中可以正常运行,这种情况通常是由于以下原因之一导致的…...
【ROS】软件包后期添加依赖
【ROS】软件包后期添加依赖 前言整体思路修改 package.xml1. 构建依赖(build_depend)2. 构建导出依赖(build_export_depend)3. 运行依赖(exec_depend)如何修改 修改 CMakeLists.txt修改 find_package其他修…...
十三届蓝桥杯Java省赛 B组(持续更新..)
目录 十三届蓝桥杯Java省赛 B组第一题:星期计算第二题:山第三题:字符统计第四题:最少刷题数第五题:求阶乘第六题:最大子矩阵第七题:数组切分第八题:回忆迷宫第九题:红绿灯…...
生成式人工智能的价值回归:重塑技术、社会与个体的发展轨迹
在数字化浪潮的席卷之下,生成式人工智能(Generative AI)正以前所未有的速度重塑人类社会的面貌。这项技术不仅被视为人工智能发展的新阶段,更被赋予了推动生产力跃升、加速社会形态变革的历史使命。生成式人工智能的价值回归,不仅体现在技术本身的革新与突破,更在于其对个…...
【工具开发教程】通过批量OCR识别PDF扫描件中的文本,给PDF批量重命名,基于WPF和阿里云的实现方案,超详细
以下是基于WPF和阿里云实现批量OCR识别PDF扫描件中的文本,并给PDF批量重命名的项目方案,包含项目背景、界面设计、代码步骤和开发总结。 一、项目背景 在日常办公或学习中,处理大量PDF扫描件时,常常需要手动提取文件中的文本内容并重命名文件。这种方式效率低下且容易出错…...
AI 重构 Java 遗留系统:从静态方法到 Spring Bean 注入的自动化升级
在当今快速发展的软件行业中,许多企业都面临着 Java 遗留系统的维护和升级难题。这些老旧系统往往采用了大量静态方法,随着业务的不断发展,其局限性日益凸显。而飞算 JavaAI 作为一款强大的 AI 工具,为 Java 遗留系统的重构提供了…...
JS—同源策略:2分钟掌握同源策略
个人博客:haichenyi.com。感谢关注 一. 目录 一–目录二–什么是“同源”?三–同源策略的限制范围四–允许跨源的场景五–如何绕过同源策略(安全方式)六–同源策略的安全意义七–总结 二. 什么是“同源”? …...
【C++】关于scanf是否需要使用的快速记忆
在 C 语言中,scanf 函数用于从标准输入读取数据并存储到变量中。scanf 函数需要知道变量的内存地址,以便将输入的数据存储到正确的内存位置。这就是为什么在大多数情况下需要使用 & 符号的原因。 1. 为什么需要使用& & 符号用于获取变量的内…...
BUUCTF-web刷题篇(19)
28.CheckIn 源码: #index.php <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&q…...
国家优青ppt美化_青年科学基金项目B类ppt案例模板
国家优青 国家优青,全称“国家优秀青年基金获得者”。2025改名青年科学基金B类。 作为自然基金人才资助类型,支持青年学者在基础研究方面自主选择研究方向开展创新研究。它是通往更高层次科研荣誉的重要阶梯,是准杰青梯队。 / WordinPPT /…...
【HTML】动态背景效果前端页面
下面是一个带有多种动态背景效果的现代化前端页面,包含粒子效果、渐变波浪和星空背景三种可选动态背景。直接上代码!! <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name&quo…...
前端面试宝典---创建对象的配置
Object.create 对整个对象的多个属性值进行配置 创建对象 不可更改属性值 // 创建对象 不可更改属性值 let obj Object.create({}, {name: {value: lisi,writable: false,},age: {value: 20,writable: true,} })console.log(初始化obj, obj) obj.name wangwu console.log(…...
Linux重启命令(Linux Restart Command)
Linux重启命令:深入了解reboot、shutdown、init和systemctl 在Linux系统中,重启系统是一个常见的操作,可以通过多种命令来实现。以下是一些常用的重启命令及其区别: reboot 这是一个非常通用的命令,用于重启系统。 它…...
UML-饮料自助销售系统(饮料已售完)序列图
一、题目: 在饮料自动销售系统中,顾客选择想要的饮料。系统提示需要投入的金额,顾客从机器的前端钱币口投入钱币,钱币到达钱币记录仪,记录仪更新自己的选择。正常时记录仪通知分配器分发饮料到机器前端,但可…...
第7课:智能体安全与可靠性保障
智能体安全与可靠性保障:从攻击防御到隐私保护的全栈实践 一、引言:当智能体走向开放世界:安全为何成为协作的“生命线” 随着多智能体系统(MAS)在金融、医疗、自动驾驶等关键领域的落地,安全风险呈指数级…...
前端性能优化核弹级方案:CSS分层渲染+Wasm,首屏提速300%!
前端性能优化核弹级方案:CSS分层渲染Wasm实现首屏提速300%的终极指南 在当今Web应用日益复杂的背景下,性能优化已成为前端开发的核心竞争力。本文将深入剖析两种革命性的前端性能优化技术——CSS分层渲染与WebAssembly(Wasm)的协同应用,揭示…...
有一个服务器能做什么?
服务器对于程序员来说就是一个超级便利的机器,可以用自己的知识来做出许多的使用场景。 搭建网站和应用程序 个人网站:可以创建个人博客、作品集网站或简历网站等,用于展示个人才华、分享经验和知识。 企业网站:为企业搭建官方…...
华为RH2288H V3服务器极速重装:从RedHat到openEuler 24超详细重装指南
1 登录iBMC口 2 配置启动项 点击:配置,点击:系统启动项 点击:单次有效,选择:光驱,点击:保存 3 进Remote Contro 点击:远程控制,进入如下界面 点击࿱…...
AI集群设计
关键要素 硬件选型 计算节点:通常选用配备高性能 GPU(如 NVIDIA A100、H100 等)的服务器,以提供强大的并行计算能力,加速深度学习模型的训练和推理过程。网络设备:采用高速网络,如 InfiniBand …...
NginxWebUI:可视化 Nginx 配置管理工具,告别繁琐命令行!
文章目录 📌前言1. NginxWebUI 是什么?2. NginxWebUI 核心功能3. 如何安装 NginxWebUI?3.1 Docker 安装(推荐)3.2 Java Jar 运行 4. NginxWebUI 基本使用教程4.1 登录与初始化4.2 配置反向代理4.3 管理 SSL 证书4.4 查…...
深入理解 GLOG_minloglevel 与 GLOG_v:原理与使用示例
文章目录 深入理解 GLOG_minloglevel 与 GLOG_v:原理与使用示例1. GLOG_minloglevel:最低日志等级控制2. GLOG_v:控制 VLOG() 的详细输出等级3. GLOG_minloglevel 与 GLOG_v 的优先级关系4. 使用示例4.1 基础示例:不同日志等级4.2…...
移动端六大语言速记:第12部分 - 测试与优化
移动端六大语言速记:第12部分 - 测试与优化 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在测试与优化方面的特性,帮助开发者理解和掌握各语言的测试框架和性能优化技巧。 12. 测试与优化 12.1 单元测试框架对比 各语言单元测试框架…...
ubuntu2204安装显卡驱动+多版本的cuda+cudnn+多版本tensorRT
cuda的版本更新速度很快,这也带动TensorRT的更新速度。TensorRT SDK的更新直接从版本8升级到版本10(其实有版本9,和8相比没有大的改变)。tensorRT部署模型的很多接口都发生了较大的改变。为了体验不同版本的cuda和tensorRT的推理,本文考虑在u…...
从One-Hot到TF-IDF:NLP词向量演进解析与业务实战指南
从One-Hot到TF-IDF:词向量演进之路 开场白: 想象一下,你试图用Excel表格分析《红楼梦》的情感倾向——每个字词都是孤立的单元格,计算机看到的只有冰冷的0和1,而“黛玉葬花”的凄美意境却消失得无影无踪。这就是NLP工…...
Ubuntu下载火狐浏览器
在 Ubuntu 中卸载 Firefox 浏览器的方法取决于其安装方式(通过 APT 包管理器 或 Snap)。以下是详细的步骤: 1. 确认 Firefox 的安装方式 首先检查 Firefox 是通过哪种方式安装的: # 检查 Snap 版本 snap list | grep firefox# 检…...
C++ - 数据容器之 unordered_map(声明与初始化、插入元素、访问元素、遍历元素、删除元素、查找元素)
一、unordered_map unordered_map 是 C STL 中的一个关联容器,它有如下特点 unordered_map 存储键值对,使用哈希表实现 unordered_map 的每个键在容器中只能出现一次 unordered_map 的存储的键值对是无序的 平均情况下,查找、插入、删除都…...
什么是具身智能?其发展五大趋势预测
3月29-30日,由中国人工智能学会主办的第二届中国具身智能大会(CEAI 2025)在北京海淀成功召开。中国科学院院士、南京大学党委书记谭铁牛在大会作题为“具身智能:学科交叉的新前站”的主题演讲。他表示,具身智能是发展人…...
智能指针的使用及其原理(C++)
1. 智能指针的使用场景分析 通过下面的例子来分析: double Divide(int a, int b) {// 当b 0时抛出异常if (b 0){throw "Divide by zero condition!";}else{return (double)a / (double)b;} }void Func() {int* array1 new int[10];int* array2 new …...
使用 react-three-fiber 快速重构 Three.js 场景⚛️
不明白的知识先放在一边,激发兴趣是第一步,所以不必纠结代码的细节,相信我你很快就会爱上这种感觉!!! 今天,我们将更进一步,将上一篇中vite npm传统 Three.js 原生代码完整 重构为 …...
索尼相机视频文件格式规格
XAVC,作为Sony所独有的一种视频编码格式,具有其独特的压缩技术。其中,L代表的是Long GOP压缩方式,这种方式在视频编码中,侧重于实现帧间的高效压缩,以提升整体的编码效率。而I则对应着Intra压缩方式&#x…...
Audacity命令:“文件”菜单相关命令
1 Audacity命令:“文件”菜单相关命令 文件菜单提供用于创建、打开和保存 Audacity 项目以及导入和导出音频文件的命令。 1.1 文件菜单命令列表 文件菜单一级菜单的命令列表 Scripting IdActionParameters描述New:New无创建一个新的空白项目窗口,用于处…...
chrome提示https不安全, 不能记住账号密码怎么办? 可以利用js输入账号
背景: 在内网搭建的服务, 由于https证书问题, 可能会被chrome浏览器提示不安全 此时, 默认的记住账号密码功能就无法使用, 那么此时只能手动输入了吗? 想到了几种方案 1.利用外置软件, 模拟按键输入(比如按键精灵, 缺点是依赖外部软件, 运行速度也慢, 且执行时占用了输入焦…...
ubuntu18.04安装miniforge3
1.下载安装文件 略(注:从同事哪里拖来的安装包) 2.修改安装文件权限 chmod x Miniforge3-Linux-x86_64.sh 3.将它安装到指定位置 micromamba activate /home/xxx/fxp/fromDukto/miniforge3 4.激活 /home/xxx/fxp/fromDukto/miniforge3…...
Flutter容器组件深度解析
引言 在 Flutter 开发中,容器组件是构建用户界面的基石。它们为开发者提供了强大而灵活的方式来组织和布局界面元素。通过使用容器组件,开发者可以轻松地控制子组件的大小、位置、边距、背景等属性,从而创建出美观、易用且响应式的界面。本文…...