以下是一个示例的HTTP要求报文:
POST /login HTTP/1.1Host: example.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0Accept: application/jsonAccept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflate, brContent-Type: application/x-www-form-urlencodedContent-Length: 32Connection: keep-aliveReferer: https://example.com/loginCookie: sessionid=abcd1234username=test&password=secret
在这个示例中,要求方法是POST,要求头包含浏览器信息、接管的数据类型、支持的压缩算法等信息。要求正文是一个URL编码的数据字符串,包含了用户名和密码字段。
Fetch 和 Axios 都是前端常用的网络要求库。它们都可以用来发送网络要求并处理相应数据,但是它们又有各自的优缺陷。下面是它们的特点以及利用场景的建议:

Fetch 是 Window 的一个新的 API,它是一个原生的JavaScript库,内置于当代浏览器中。优点如下:
原生支持 Promise,代码更加简洁易懂;支持流式( stream)传输,可以处理较大的相应数据;供应了 Service Workers 支持,可以实现支持离线利用。根据上面的优点,我们可以在以了局景利用 Fetch:
适用于当代浏览器,并且项目不须要考虑老版本浏览器的兼容性;对付处理大相应数据,或者须要实现离线支持的项目。由于 Fetch 不支持跨域的会话 Cookies,因此它的失落败率也会比较高,此外,Fetch 的要求头不能手动设置,须要通过 Headers 工具设置,因此在一些场景下利用可能会比较麻烦,须要自己封装一些方法来利用。
利用 Axios 库的场景Axios 是一个基于 Promise 的 HTTP 要求库,其特点如下:
支持在 Node 环境中利用;支持要求取消、要求拦截、相应拦截等高阶操作;链式调用使得代码更加简洁明了;自动转换 JSON 格式数据。根据上面的特点,我们可以在以了局景利用 Axios:
在须要支持 Node.js 框架的项目中利用;对付须要高阶操作(比如要求取消、要求拦截等),以及须要在多个组件中利用相同的要求实例时利用;对付须要处理 JSON 格式数据的运用。由于 Axios 是第三方库,它的体积比起 Fetch 来会比较大些,如果只是一个小型的项目,可能没有必要利用它,不过对付一个大型的项目而言,利用 Axios 会更加方便和灵巧。
综上所述,我们可以根据项目的实际需求选择利用 Fetch 或者 Axios,以达到最优的网络要求效果。
如何利用Fetch库?Fetch 是一个新的JavaScript库,用于发起网络要求以获取资源。它供应了一个更大略和更灵巧的办法发送HTTP要求,比传统的 Ajax 更为前辈和功能丰富。Fetch 它通过 Promise 来处理异步要乞降相应,让代码更加简洁和易于掩护。
Fetch 语法如下:
fetch(url, options) .then(response => { // 处理相应 }) .catch(error => { // 处理缺点 });
url: 要求的地址。options: 包含要求的参数,如要求方法、要求头、要求体等。它是一个可选的参数工具,可设置以下属性:method: 要求方法,如 GET、POST、PUT、DELETE 等,默认是 GET。headers: 要求头信息,它是一个工具,表示要求头字段和其值的凑集。body: 要求体,常日用于指定提交的数据格式,如 JSON、文本、formData 等。mode: 要求模式,例如 CORS、no-cors、same-origin 等,它是一个字符串类型。credentials: 是否许可发送包含凭据(如 cookie、认证头等)的要求。cache: 掌握浏览器是否缓存要求。
当 fetch 函数被调用后,它会返回一个 Promise 工具。这个 Promise 工具会在要求成功后通报一个相应工具( response)并调用对应的 then() 方法。在相应工具中可以取得要求返回的数据,以及要求的状态码等信息。
以下是一个发送 GET 要求的示例:
fetch('https://jsonplaceholder.typicode.com/todos/1') .then(response => response.json()) // 解析相应的JSON数据 .then(data => console.log(data)) // 处理数据 .catch(error => console.error(error)) // 处理缺点
以下是一个发送 POST 要求的示例:
fetch('https://jsonplaceholder.typicode.com/posts', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ title: 'foo', body: 'bar', userId: 1 })}).then(response => response.json()).then(data => console.log(data)).catch(error => console.error(error))
在以上示例中,fetch 函数接管两个参数。第一个参数是要求的URL,第二个参数包含要求的参数,如 POST 要求的 body、headers 等。在 then() 方法中,我们可以利用 response.json() 解析相应的 JSON 数据,然后处理返回的数据。在 catch() 方法中,可以处理要求过程中可能涌现的缺点。
如何在vue中引入Fetch库?在 Vue 项目中利用 Fetch 库,须要先在项目中安装 Fetch 库:
复制npm install whatwg-fetch --save
安装完成后,在 main.js 文件中添加以下代码:
复制import 'whatwg-fetch'
这样,Fetch 库就可以在全体项目中利用了。在须要发送网络要求的组件中,可以利用以下示例代码:
fetch(url, options) .then(response => { // 处理相应 }) .catch(error => { // 处理缺点 });
个中,url 和 options 的利用办法与上文中先容的同等。在 then() 方法中,可以通过 response 工具获取相应数据。由于 fetch 返回的是一个 Promise,因此我们也可以利用 async/await 来进行异步代码处理:
async function fetchData() { try { const response = await fetch(url, options) const data = await response.json() // 处理数据 } catch (error) { // 处理缺点 }}
如果你想在 Vue 中全局利用 Fetch 库,你可以通过在 Vue.prototype 上添加一个方法实现全局调用:
import 'whatwg-fetch'import Vue from 'vue'Vue.prototype.$fetch = fetch
这样,在任何 Vue 组件中都可以通过 this.$fetch 方法来发送网络要求了:
// 利用 this.$fetch 方法发送网络要求this.$fetch(url, options) .then(response => { // 处理相应 }) .catch(error => { // 处理缺点 });
如果你习气利用 Axios 等其它的网络要求工具,也可以在 Vue 项目中利用它们来发送网络要求。只须要在项目中安装和引入对应的库即可。