AbortController 取消一个进行中的 fetch 后,Promise 和底层网络连接分别发生什么?
围绕“AbortController 取消一个进行中的 fetch 后,Promise 和底层网络连接分别发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 Promise 以 AbortError 拒绝、浏览器中止连接停止接收数据。
浏览器 · 请求与通信 API面试题第 1 页,显示第 1–43 题,共找到 43 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“AbortController 取消一个进行中的 fetch 后,Promise 和底层网络连接分别发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 Promise 以 AbortError 拒绝、浏览器中止连接停止接收数据。
围绕“一个 AbortController 可以控制多个 fetch 吗,这样做有什么实际用途和注意事项”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出同一 signal 传给多个请求可批量取消(如路由切换时取消整页请求)、abort 是一次性的。
围绕“一个请求同时受用户手动取消和全局超时控制时,如何用 AbortSignal.any() 合并多个信号”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出任一信号触发即中止且 reason 可溯源。
围绕“AbortSignal.timeout() 相比手写 setTimeout 加 AbortController 有什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出一句代码获得自动超时信号且无需手动清理定时器。
围绕“什么样的跨域 fetch 请求会触发 CORS 预检(OPTIONS)请求,如何避免不必要的预检”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出非简单方法、非 safelist 头(如 Content-Type: application/json)触发预检及简化为简单请求。
围绕“在 fetch 的 catch 中如何区分请求是被 AbortController 取消还是真的网络失败,为什么要区”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出检查 error.name === 'AbortError' 且两类错误应采取不同提示与重试策略。
围绕“fetch 的 mode 选项 cors、no-cors、same-origin 分别产生什么行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 no-cors 得到 opaque 响应无法读取内容这一关键陷阱。
解释 fetch credentials 的三个值 omit、same-origin、include 的行为,重点回答为什么跨域默认不带 Cookie,并说明 include 与 CORS 响应头的配合要求及常见出错点。
解释 fetch 为什么对 404、500 不 reject:Promise 只在网络层失败时拒绝,HTTP 错误状态会正常 resolve。给出检查 response.ok 或 status 并手动抛错的标准处理方式与边界。
围绕“fetch 调用 response.json() 时报错通常有哪些原因,如何健壮处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出响应非 JSON、空 body、body 已被消费三类原因与防御性写法。
围绕“页面即将卸载时 fetch 请求容易中断,keepalive 选项如何解决这类上报丢失问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 keepalive 让请求在页面卸载后继续发送及其 64KB 体积限制。
本题对比 fetch POST 请求中 FormData 与 JSON body 的 Content-Type 差异,强调 FormData 无需手动设置头,JSON 必须声明 application/json,并说明服务端解析依据。
围绕“fetch 遇到 3xx 重定向时 redirect 选项的 follow、error、manual 各有什么效果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 manual 在浏览器中得到 opaqueredirect 类型的响应及其限制。
围绕“在支持流式请求体的浏览器中用 fetch 上传 ReadableStream,为什么必须设置 duplex: 'ha”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出流式上传要求 HTTP/2 或 HTTP/3 且需显式声明 duplex 的兼容性约束。
解释 Response body 的流式单次消费特性,说明 bodyUsed 的判定与克隆的时机限制。通过实际场景展示如何用 clone 并行处理同一响应,并指出克隆前必须未读取,且克隆后每个对象只能读一次。
fetch没有timeout接口,超时需要借助AbortController加setTimeout实现。本文讲解signal如何生效、定时器清理的必要性、AbortError的判别,并用慢接口场景说明使用方式。
本文说明 fetch 无上传进度事件的原因,对比 XHR upload.progress 和流式字节统计的适用边界,指导进度条实现技术选型。
对比 fetch 与 XMLHttpRequest 的四个实质差异:Promise 化、HTTP 错误不 reject、上传进度支持、取消机制,并给出按上传进度、错误处理、取消需求选型的可操作判断。
围绕“HTTP/1.1 下浏览器对同一域名的并发连接数限制如何影响 SSE 和轮询,HTTP/2 如何缓解”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出每域约 6 连接、长连接占满会阻塞普通请求、HTTP/2 多路复用可共用一个连接。
围绕“后端以 NDJSON(逐行 JSON)流式返回数据时,前端如何边接收边解析而不是等全部完成”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出缓冲未完整行、按换行切分、最后一块收尾的解析逻辑。
围绕“如何用 fetch 的 response.body.getReader() 逐块读取大文件下载内容并显示进度”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 reader.read() 循环、done 标志与用 Content-Length 计算进度。
围绕“前端不再需要 SSE 推送时为什么要显式调用 EventSource.close(),服务端如何感知断开”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 close 停止自动重连并释放连接、服务端通过连接关闭事件清理订阅资源。
围绕“SSE 的 text/event-stream 数据格式长什么样,EventSource 如何接收消息”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 data: 行、空行分隔消息的格式与 onmessage 接收。
围绕“EventSource 有哪些硬性限制,为什么自定义请求头或 POST 请求做不到”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出只支持 GET、无法自定义请求头、可用 fetch 流读取替代的边界。
围绕“提前终止 fetch 的流读取时,reader.cancel() 和直接丢弃 reader 有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 cancel 会向源头发出取消信号并释放网络资源、仅丢弃 reader 连接仍挂着。
围绕“分块读取流时直接拼接 Uint8Array 转字符串为什么会乱码,TextDecoder 流式解码如何解决”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出多字节字符可能跨块被截断、TextDecoder 的 stream 选项保留不完整字节。
围绕“TransformStream 与 pipeThrough 在 fetch 响应处理中适合解决什么问题,举一个具体场”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出在流经过时增量转换数据(如解压、解密、解析)而避免整段缓存的价值。
围绕“高频发送 WebSocket 消息时为什么需要关注 bufferedAmount,如何处理发送背压”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 bufferedAmount 反映未发送字节数、超过阈值应暂停或降频发送避免内存膨胀。
围绕“WebSocket 收发二进制数据时 binaryType 选 blob 还是 arraybuffer,依据是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 arraybuffer 适合立即处理、blob 适合大文件与流式存储的取舍。
围绕“WebSocket 关闭连接时 close(code, reason) 的状态码怎么选,1000 与 1006 有什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 1000 正常关闭、1006 异常断开无法手动触发这一诊断价值。
围绕“为什么 WebSocket 的 error 事件几乎不携带具体错误信息,实际诊断应该看什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出出于安全规范 error 是通用事件、应结合 close 事件码与 wasClean 及网络面板诊断。
围绕“WebSocket 建立连接时的 HTTP 升级握手过程是怎样的,101 状态码代表什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 Upgrade 头、Sec-WebSocket-Key/Accept 校验与 101 Switching Protocols 。
围绕“WebSocket 的 open、message、error、close 事件与 readyState 在连接生命周”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出四个 readyState 值与事件触发顺序、必须在 open 后才能 send 的判断。
围绕“WebSocket 消息本身没有送达确认和重传机制,需要可靠投递时应用层应怎么设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出序号加 ACK、超时重发、断线后增量拉取的典型设计。
围绕“设计 WebSocket 客户端的重连与心跳机制时需要考虑哪些要点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出指数退避重连、心跳检测半开连接、区分主动关闭不重建三个要点。
围绕“WebSocket 构造函数的第二个参数(子协议)起什么作用,协商失败会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出客户端列出支持的子协议、服务端选一个返回、不匹配时行为取决于服务端实现。
围绕“实时推送场景下 WebSocket 与 SSE 如何选型,各自的决定性优势是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出双向通信需求选 WebSocket、纯服务端推送且要自动重连与 HTTP 友好选 SSE 的决策依据。
围绕“调用 XMLHttpRequest 的 abort() 后,readyState、事件和该对象还能复用吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 abort 后 readyState 归零、触发 abort 事件、对象可重新 open 复用。
围绕“XMLHttpRequest 的 readyState 从 0 到 4 各代表什么阶段,onreadystatech”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出五个状态含义及 onload 只在完整成功时触发而 readyState 4 可能对应 HTTP 错误。
围绕“XMLHttpRequest 的 responseType 有哪些取值,下载二进制文件时应该选什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 arraybuffer 与 blob 在二进制下载中的取舍及 text/json 默认行为。
围绕“为什么主线程上的同步 XMLHttpRequest 被废弃并应避免使用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出同步请求冻结主线程 UI 与事件循环、浏览器已计划移除支持。
围绕“XMLHttpRequest 的 timeout 属性与 ontimeout 事件如何工作,与手动 setTimeo”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出原生 timeout 从 send 起计时并自动中止触发 ontimeout,无需手动清理定时器。
围绕“XMLHttpRequest 如何分别监听上传进度和下载进度,两个 progress 事件挂在哪个对象上”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出上传进度挂在 xhr.upload、下载进度挂在 xhr 本身及 e.lengthComputable 判断。