前端的请求如何到后端的 ?

开发 前端 后端
前端可以使用各种方式提供请求,如通过地址栏、超链接、表单、JavaScript等方式。后端则通过Web服务器及后端程序进行处理,并将处理结果发送回前端。前端的请求是如何到后端的,一起来了解一下。

前端的请求到达后端的步骤通常如下:

  1. 前端发起请求。前端通过浏览器向后端发送HTTP请求,可以使用Fetch、Axios、Ajax等库来发起请求。
  2. 前端请求传递给web服务器。通过网络通信,前端请求发送给Web服务器,一般使用HTTP协议。
  3. Web服务器接收请求并处理。Web服务器会接收到前端发送来的请求,然后根据请求URL、请求方法等信息,将请求路由到指定的后端处理程序。处理程序可以是使用Java、PHP、Python、Node.js等后端语言编写的程序。
  4. 后端处理请求并返回响应。后端处理程序根据请求的具体类型及内容,在处理过程中可能需要读写数据库、调用其他API等操作,处理完成后将返回JSON、HTML、XML等类型的响应内容。
  5. 响应传递给Web服务器。后端程序处理完成后,将响应内容传递给Web服务器。
  6. Web服务器将响应返回给前端。Web服务器收到后端返回的响应内容后,将响应内容封装成HTTP响应格式再返回给前端。
  7. 前端接收响应并处理。前端接收到响应内容后,通过JavaScript等语言进行解析和处理,更新用户界面。

在这个过程中,前后端之间的数据传输一般是通过网络协议完成,通常是HTTP协议。前端可以使用各种方式提供请求,如通过地址栏、超链接、表单、JavaScript等方式。后端则通过Web服务器及后端程序进行处理,并将处理结果发送回前端。

HTTP请求解析

HTTP请求由请求方法、请求头、请求正文组成。

  1. 请求方法:

请求方法表示浏览器想要对服务器做什么,常见的有以下几种:

  • GET:获取资源,一般用于查询操作
  • POST:提交数据,一般用于更新/插入操作
  • PUT:更新资源
  • DELETE:删除资源
  • HEAD:获取报文首部
  • OPTIONS:查询服务器支持哪些请求方法
  1. 请求头:

请求头包含了关于浏览器、客户端所使用的操作系统、浏览器版本、请求的客户端支持什么类型等信息,常见的请求头有以下几种:

  • User-Agent:浏览器及操作系统信息
  • Accept-Encoding:浏览器支持的压缩算法
  • Referer:表示当前请求referer请求头字段的值指示了当前请求的上一个页面。
  1. 请求正文:

如果是POST请求,可能会携带请求参数,位于请求报文的报文主体中。

以下是一个示例的HTTP请求报文:

POST /login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
Connection: keep-alive
Referer: https://example.com/login
Cookie: sessionid=abcd1234

username=test&password=secret

在这个示例中,请求方法是POST,请求头包含浏览器信息、接受的数据类型、支持的压缩算法等信息。请求正文是一个URL编码的数据字符串,包含了用户名和密码字段。

什么场景下使用Fetch?什么场景下使用Axios?

Fetch 和 Axios 都是前端常用的网络请求库。它们都可以用来发送网络请求并处理相应数据,但是它们又有各自的优缺点。下面是它们的特点以及使用场景的建议:

使用 Fetch 库的场景

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 项目中使用它们来发送网络请求。只需要在项目中安装和引入对应的库即可。

责任编辑:华轩 来源: 今日头条
相关推荐

2023-12-06 07:14:28

前端API中间件

2024-03-29 09:00:51

前端数据后端

2018-11-06 21:50:09

前端Html脚本语言

2020-10-08 18:20:54

前端后端架构

2020-09-18 15:10:51

Web前端技术

2021-01-25 06:53:59

前端AJAX技术热点

2022-01-28 14:20:53

前端代码中断

2017-02-23 20:30:29

后端前端webpack

2019-03-28 11:00:37

前端网络请求开发

2022-10-20 15:43:39

htmxDjango技术栈

2022-09-15 12:41:43

微服务后端前端

2014-02-17 17:47:16

前端后端架构

2021-05-06 15:08:40

开发前端后端

2015-09-23 14:07:12

前端与后端架构实例

2020-03-20 09:04:47

后端程序员前端代码

2024-03-05 10:03:09

Python架构系统

2023-11-30 10:02:45

2024-01-09 18:00:22

Rust后端slvelte

2021-07-05 18:11:13

Node Server前端协议

2020-12-10 09:59:59

前端开发技术
点赞
收藏

51CTO技术栈公众号