您的位置:首页 > 汽车 > 新车 > vx小程序_兰州中川国际机场t3航站楼_大数据营销软件_免费crm系统手机版

vx小程序_兰州中川国际机场t3航站楼_大数据营销软件_免费crm系统手机版

2025/4/6 5:43:32 来源:https://blog.csdn.net/weixin_49021723/article/details/146509341  浏览:    关键词:vx小程序_兰州中川国际机场t3航站楼_大数据营销软件_免费crm系统手机版
vx小程序_兰州中川国际机场t3航站楼_大数据营销软件_免费crm系统手机版

对比XHR

在这里插入图片描述

🛠️ fetch 所有配置项

fetch(url, {// ========== 核心配置 ==========method: 'GET',           // HTTP 方法: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONSheaders: {               // 请求头(支持 Headers 对象或普通对象)'Content-Type': 'application/json', // 常用 Content-Type 值:// - application/x-www-form-urlencoded  默认表单提交(键值对)// - application/json  JSON 数据// - application/octet-stream  任意二进制数据(如文件下载)// - multipart/form-data 表单文件上传(支持二进制)// - text/plain  纯文本(无格式)'Authorization': 'Bearer token',    // 身份验证'Accept': 'application/json',        // 指定响应格式'X-Custom-Header': 'value'          // 自定义头},body: null,              // 请求体数据,支持以下类型:// - String(JSON 字符串)// - FormData(表单/文件上传)// - URLSearchParams(查询参数,自动设置 Content-Type)// - Blob/BufferSource(二进制数据)// - ReadableStream(流式数据,实验性)// ========== 网络策略配置 ==========mode: 'cors',           // 请求模式,可选值:// - cors: 允许跨域(需服务器返回 CORS 头)// - no-cors: 禁止跨域(响应不可读,仅用于简单请求)// - same-origin: 仅同源请求credentials: 'same-origin', // Cookie 策略,可选值:// - omit: 不发送 Cookie(默认)// - same-origin: 同源时发送// - include: 跨域也发送(需服务器允许 credentials)cache: 'default',       // 缓存策略,可选值:// - default: 遵循浏览器缓存// - no-store: 禁用缓存// - reload: 强制绕过缓存// - no-cache: 使用缓存但重新验证// - force-cache: 优先使用过期缓存redirect: 'follow',     // 重定向处理,可选值:// - follow: 自动重定向(默认)// - error: 重定向时报错// - manual: 手动处理(通过 response.redirected 判断)// ========== 来源与安全 ==========referrer: 'about:client', // 来源页地址,可选值:// - "about:client": 隐藏来源(默认)// - "no-referrer": 不发送 Referer 头// - URL: 指定来源地址referrerPolicy: 'no-referrer-when-downgrade', // 来源策略,控制 Referer 头发送规则// 常见值: no-referrer, origin, strict-originintegrity: 'sha256-abc123', // 子资源完整性校验(SRI),用于验证资源是否被篡改// 格式: '哈希算法-哈希值'(如 sha256-xxxx)// ========== 高级控制 ==========keepalive: false,       // 是否允许请求在页面卸载后继续发送(用于埋点/日志)signal: null,           // 绑定 AbortSignal 对象以取消请求(结合 AbortController)priority: 'auto',       // 请求优先级(实验性),可选值: high, low, autowindow: null            // 必须设为 null(保留字段,用于未来扩展)
});

Content-Type

告知接收方(如服务器或浏览器)​传输的数据是什么类型,例如:JSON、HTML、表单、图片等。

。。。


⚠️ 使用fetch 注意事项

  1. ​HTTP 错误不会触发 catch
    问题:fetch 仅在网络故障(如无法连接)时 reject,但 HTTP 错误(如 404、500)会正常返回响应。

  2. 默认不携带 Cookie
    ​问题:跨域请求默认不发送 Cookie,可能导致身份验证失败。
    ​解决:设置 credentials: ‘include’:

  3. 请求体需要手动序列化
    ​问题:发送 JSON 数据时需手动调用 JSON.stringify(),而 axios 等库会自动处理。

  4. 响应体只能读取一次
    ​问题:调用 response.json() 或 response.text() 后,响应体会被标记为已使用,再次读取会报错。
    ​解决:使用 response.clone() 克隆响应

⚠️ 缺陷

  1. ​不支持同步请求
    ​问题:fetch 只有异步模式,无法像 XMLHttpRequest 一样执行同步操作。
    ​解决:使用 async/await 模拟同步逻辑
async function fetchData() {const response = await fetch(url);const data = await response.json();return data;
}
  1. ​取消请求依赖 AbortController
    ​问题:取消请求需要额外引入 AbortController,不如 XMLHttpRequest.abort() 直接。
    ​解决:
const controller = new AbortController();
fetch(url, { signal: controller.signal });
controller.abort(); // 取消请求
  1. ​缺乏上传/下载进度监控
    ​问题:fetch 无法原生监控上传或下载进度,而 XMLHttpRequest 支持。
    ​解决:通过流式处理或自定义逻辑间接实现:
const response = await fetch(url);
const reader = response.body.getReader();
let received = 0;
while (true) {const { done, value } = await reader.read();if (done) break;received += value.length;console.log(`Received ${received} bytes`);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com