什么是xhr?

1、概念

xhr,全称为XMLHttpRequest,用于与服务器交互数据,是ajax功能实现所依赖的对象,jquery中的ajax就是对 xhr的封装。

2、xhr

XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。XMLHttpRequest 可以同步或异步地返回 Web 服务器的响应,并且能够以文本或者一个 DOM 文档的形式返回内容。

xhr 接口强制要求每个请求都具备严格的HTTP语义–应用提供数据和URL,浏览器格式化请求并管理每个连接的完整生命周期,所以XHR仅仅允许应用自定义一些HTTP首部,但更多的首部是不能自己设定的。

浏览器会拒绝绝对不安全的首部重写,以保证应用不能假扮用户代理、用户或请求来源,如Origin由浏览器自动设置,Access-Control-Allow-Origin由服务器设置,如果接受该请求,不包含该字段即可,浏览器发出的请求将作废。

如果想要启用cookie和HTTP认证,客户端必须在发送请求时通过XHR对象发送额外的属性(withCredentials),而服务器也需要以Access-Control-Allow-Credentials响应,表示允许应用发送隐私数据。同样,如果客户需要写入或读取自定义HTTP标头或想要使用“非简单的方法”的请求,那么它必须首先通过发出一个预备请求,以获取第三方服务器的许可!

### Fetch API 和 XHR 的网络请求含义及区别 #### 含义 - **XMLHttpRequest (XHR)** 是一种用于在浏览器和服务器之间传输数据的技术。它允许网页向服务器发送请求并接收来自服务器的数据,而无需刷新整个页面[^2]。 - **Fetch API** 提供了一种更现代的方式来进行网络请求。通过 `fetch` 方法可以发起 HTTP 请求,并返回一个 Promise 对象,该对象解析为 Response 实例。这使得异步操作变得更加直观和易于管理[^3]。 #### 主要区别 | 特性 | XMLHttpRequest (XHR) | Fetch API | |--------------------|---------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------| | 返回值 | 需要监听事件(如 onload/onerror),手动获取状态码、响应头等信息 | 返回的是一个Promise对象,可以直接链式调用 `.then()` 或者使用 async/await 来简化代码逻辑 | | 错误处理 | 只有当请求成功完成时才会触发回调函数;对于网络错误或跨域问题无法捕获 | 所有的HTTP错误都会被捕捉到,即使是非2xx的状态码也会进入catch分支 | | 超时支持 | 不自带超时功能,需额外实现 | 支持原生的超时控制机制,可以通过设置timeout选项来指定最长等待时间 | | 响应体读取 | 使用 `responseText`, `responseXML` 属性访问响应内容 | 提供多种方法 (`json()`, `text()`, `blob()`) 处理不同类型的数据 | ```javascript // XHR Example var xhr = new XMLHttpRequest(); xhr.open('GET', '/api/data'); xhr.onload = function () { if (xhr.status === 200) console.log(JSON.parse(xhr.responseText)); }; xhr.onerror = function () { /* handle error */ }; xhr.send(); // Fetch Example fetch('/api/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => {/* handle error */}); ``` #### 性能与易用性比较 由于 Fetch API 更加简洁明了,在大多数情况下推荐优先考虑使用 fetch 进行 AJAX 操作。不过需要注意的是,某些旧版浏览器可能不完全兼容 fetch ,这时就需要引入 polyfill 或继续依赖 XHR 完成相应的工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值