自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

前端的請(qǐng)求如何到后端的 ?

開(kāi)發(fā) 前端 后端
前端可以使用各種方式提供請(qǐng)求,如通過(guò)地址欄、超鏈接、表單、JavaScript等方式。后端則通過(guò)Web服務(wù)器及后端程序進(jìn)行處理,并將處理結(jié)果發(fā)送回前端。前端的請(qǐng)求是如何到后端的,一起來(lái)了解一下。

前端的請(qǐng)求到達(dá)后端的步驟通常如下:

  1. 前端發(fā)起請(qǐng)求。前端通過(guò)瀏覽器向后端發(fā)送HTTP請(qǐng)求,可以使用Fetch、Axios、Ajax等庫(kù)來(lái)發(fā)起請(qǐng)求。
  2. 前端請(qǐng)求傳遞給web服務(wù)器。通過(guò)網(wǎng)絡(luò)通信,前端請(qǐng)求發(fā)送給Web服務(wù)器,一般使用HTTP協(xié)議。
  3. Web服務(wù)器接收請(qǐng)求并處理。Web服務(wù)器會(huì)接收到前端發(fā)送來(lái)的請(qǐng)求,然后根據(jù)請(qǐng)求URL、請(qǐng)求方法等信息,將請(qǐng)求路由到指定的后端處理程序。處理程序可以是使用Java、PHP、Python、Node.js等后端語(yǔ)言編寫(xiě)的程序。
  4. 后端處理請(qǐng)求并返回響應(yīng)。后端處理程序根據(jù)請(qǐng)求的具體類型及內(nèi)容,在處理過(guò)程中可能需要讀寫(xiě)數(shù)據(jù)庫(kù)、調(diào)用其他API等操作,處理完成后將返回JSON、HTML、XML等類型的響應(yīng)內(nèi)容。
  5. 響應(yīng)傳遞給Web服務(wù)器。后端程序處理完成后,將響應(yīng)內(nèi)容傳遞給Web服務(wù)器。
  6. Web服務(wù)器將響應(yīng)返回給前端。Web服務(wù)器收到后端返回的響應(yīng)內(nèi)容后,將響應(yīng)內(nèi)容封裝成HTTP響應(yīng)格式再返回給前端。
  7. 前端接收響應(yīng)并處理。前端接收到響應(yīng)內(nèi)容后,通過(guò)JavaScript等語(yǔ)言進(jìn)行解析和處理,更新用戶界面。

在這個(gè)過(guò)程中,前后端之間的數(shù)據(jù)傳輸一般是通過(guò)網(wǎng)絡(luò)協(xié)議完成,通常是HTTP協(xié)議。前端可以使用各種方式提供請(qǐng)求,如通過(guò)地址欄、超鏈接、表單、JavaScript等方式。后端則通過(guò)Web服務(wù)器及后端程序進(jìn)行處理,并將處理結(jié)果發(fā)送回前端。

HTTP請(qǐng)求解析

HTTP請(qǐng)求由請(qǐng)求方法、請(qǐng)求頭、請(qǐng)求正文組成。

  1. 請(qǐng)求方法:

請(qǐng)求方法表示瀏覽器想要對(duì)服務(wù)器做什么,常見(jiàn)的有以下幾種:

  • GET:獲取資源,一般用于查詢操作
  • POST:提交數(shù)據(jù),一般用于更新/插入操作
  • PUT:更新資源
  • DELETE:刪除資源
  • HEAD:獲取報(bào)文首部
  • OPTIONS:查詢服務(wù)器支持哪些請(qǐng)求方法
  1. 請(qǐng)求頭:

請(qǐng)求頭包含了關(guān)于瀏覽器、客戶端所使用的操作系統(tǒng)、瀏覽器版本、請(qǐng)求的客戶端支持什么類型等信息,常見(jiàn)的請(qǐng)求頭有以下幾種:

  • User-Agent:瀏覽器及操作系統(tǒng)信息
  • Accept-Encoding:瀏覽器支持的壓縮算法
  • Referer:表示當(dāng)前請(qǐng)求referer請(qǐng)求頭字段的值指示了當(dāng)前請(qǐng)求的上一個(gè)頁(yè)面。
  1. 請(qǐng)求正文:

如果是POST請(qǐng)求,可能會(huì)攜帶請(qǐng)求參數(shù),位于請(qǐng)求報(bào)文的報(bào)文主體中。

以下是一個(gè)示例的HTTP請(qǐng)求報(bào)文:

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

在這個(gè)示例中,請(qǐng)求方法是POST,請(qǐng)求頭包含瀏覽器信息、接受的數(shù)據(jù)類型、支持的壓縮算法等信息。請(qǐng)求正文是一個(gè)URL編碼的數(shù)據(jù)字符串,包含了用戶名和密碼字段。

什么場(chǎng)景下使用Fetch?什么場(chǎng)景下使用Axios?

Fetch 和 Axios 都是前端常用的網(wǎng)絡(luò)請(qǐng)求庫(kù)。它們都可以用來(lái)發(fā)送網(wǎng)絡(luò)請(qǐng)求并處理相應(yīng)數(shù)據(jù),但是它們又有各自的優(yōu)缺點(diǎn)。下面是它們的特點(diǎn)以及使用場(chǎng)景的建議:

使用 Fetch 庫(kù)的場(chǎng)景

Fetch 是 Window 的一個(gè)新的 API,它是一個(gè)原生的JavaScript庫(kù),內(nèi)置于現(xiàn)代瀏覽器中。優(yōu)點(diǎn)如下:

  • 原生支持 Promise,代碼更加簡(jiǎn)潔易懂;
  • 支持流式( stream)傳輸,可以處理較大的響應(yīng)數(shù)據(jù);
  • 提供了 Service Workers 支持,可以實(shí)現(xiàn)支持離線使用。

根據(jù)上面的優(yōu)點(diǎn),我們可以在以下場(chǎng)景使用 Fetch:

  • 適用于現(xiàn)代瀏覽器,并且項(xiàng)目不需要考慮老版本瀏覽器的兼容性;
  • 對(duì)于處理大響應(yīng)數(shù)據(jù),或者需要實(shí)現(xiàn)離線支持的項(xiàng)目。

因?yàn)?Fetch 不支持跨域的會(huì)話 Cookies,因此它的失敗率也會(huì)比較高,此外,F(xiàn)etch 的請(qǐng)求頭不能手動(dòng)設(shè)置,需要通過(guò) Headers 對(duì)象設(shè)置,因此在一些場(chǎng)景下使用可能會(huì)比較麻煩,需要自己封裝一些方法來(lái)使用。

使用 Axios 庫(kù)的場(chǎng)景

Axios 是一個(gè)基于 Promise 的 HTTP 請(qǐng)求庫(kù),其特點(diǎn)如下:

  • 支持在 Node 環(huán)境中使用;
  • 支持請(qǐng)求取消、請(qǐng)求攔截、響應(yīng)攔截等高階操作;
  • 鏈?zhǔn)秸{(diào)用使得代碼更加簡(jiǎn)潔明了;
  • 自動(dòng)轉(zhuǎn)換 JSON 格式數(shù)據(jù)。

根據(jù)上面的特點(diǎn),我們可以在以下場(chǎng)景使用 Axios:

  • 在需要支持 Node.js 框架的項(xiàng)目中使用;
  • 對(duì)于需要高階操作(比如請(qǐng)求取消、請(qǐng)求攔截等),以及需要在多個(gè)組件中使用相同的請(qǐng)求實(shí)例時(shí)使用;
  • 對(duì)于需要處理 JSON 格式數(shù)據(jù)的應(yīng)用。

因?yàn)?Axios 是第三方庫(kù),它的體積比起 Fetch 來(lái)會(huì)比較大些,如果只是一個(gè)小型的項(xiàng)目,可能沒(méi)有必要使用它,不過(guò)對(duì)于一個(gè)大型的項(xiàng)目而言,使用 Axios 會(huì)更加方便和靈活。

綜上所述,我們可以根據(jù)項(xiàng)目的實(shí)際需求選擇使用 Fetch 或者 Axios,以達(dá)到最優(yōu)的網(wǎng)絡(luò)請(qǐng)求效果。

如何使用Fetch庫(kù)?

Fetch 是一個(gè)新的JavaScript庫(kù),用于發(fā)起網(wǎng)絡(luò)請(qǐng)求以獲取資源。它提供了一個(gè)更簡(jiǎn)單和更靈活的方式發(fā)送HTTP請(qǐng)求,比傳統(tǒng)的 Ajax 更為先進(jìn)和功能豐富。Fetch 它通過(guò) Promise 來(lái)處理異步請(qǐng)求和響應(yīng),讓代碼更加簡(jiǎn)潔和易于維護(hù)。

Fetch 語(yǔ)法如下:

fetch(url, options)
.then(response => {
// 處理響應(yīng)
})
.catch(error => {
// 處理錯(cuò)誤
});
  • url: 請(qǐng)求的地址。
  • options: 包含請(qǐng)求的參數(shù),如請(qǐng)求方法、請(qǐng)求頭、請(qǐng)求體等。它是一個(gè)可選的參數(shù)對(duì)象,可設(shè)置以下屬性:method: 請(qǐng)求方法,如 GET、POST、PUT、DELETE 等,默認(rèn)是 GET。headers: 請(qǐng)求頭信息,它是一個(gè)對(duì)象,表示請(qǐng)求頭字段和其值的集合。body: 請(qǐng)求體,通常用于指定提交的數(shù)據(jù)格式,如 JSON、文本、formData 等。mode: 請(qǐng)求模式,例如 CORS、no-cors、same-origin 等,它是一個(gè)字符串類型。credentials: 是否允許發(fā)送包含憑據(jù)(如 cookie、認(rèn)證頭等)的請(qǐng)求。cache: 控制瀏覽器是否緩存請(qǐng)求。

當(dāng) fetch 函數(shù)被調(diào)用后,它會(huì)返回一個(gè) Promise 對(duì)象。這個(gè) Promise 對(duì)象會(huì)在請(qǐng)求成功后傳遞一個(gè)響應(yīng)對(duì)象( response)并調(diào)用對(duì)應(yīng)的 then() 方法。在響應(yīng)對(duì)象中可以取得請(qǐng)求返回的數(shù)據(jù),以及請(qǐng)求的狀態(tài)碼等信息。

以下是一個(gè)發(fā)送 GET 請(qǐng)求的示例:

fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json()) // 解析響應(yīng)的JSON數(shù)據(jù)
.then(data => console.log(data)) // 處理數(shù)據(jù)
.catch(error => console.error(error)) // 處理錯(cuò)誤

以下是一個(gè)發(fā)送 POST 請(qǐng)求的示例:

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 函數(shù)接受兩個(gè)參數(shù)。第一個(gè)參數(shù)是請(qǐng)求的URL,第二個(gè)參數(shù)包含請(qǐng)求的參數(shù),如 POST 請(qǐng)求的 body、headers 等。在 then() 方法中,我們可以使用 response.json() 解析響應(yīng)的 JSON 數(shù)據(jù),然后處理返回的數(shù)據(jù)。在 catch() 方法中,可以處理請(qǐng)求過(guò)程中可能出現(xiàn)的錯(cuò)誤。

如何在vue中引入Fetch庫(kù)?

在 Vue 項(xiàng)目中使用 Fetch 庫(kù),需要先在項(xiàng)目中安裝 Fetch 庫(kù):

復(fù)制npm install whatwg-fetch --save

安裝完成后,在 main.js 文件中添加以下代碼:

復(fù)制import 'whatwg-fetch'

這樣,F(xiàn)etch 庫(kù)就可以在整個(gè)項(xiàng)目中使用了。在需要發(fā)送網(wǎng)絡(luò)請(qǐng)求的組件中,可以使用以下示例代碼:

fetch(url, options)
.then(response => {
// 處理響應(yīng)
})
.catch(error => {
// 處理錯(cuò)誤
});

其中,url 和 options 的使用方式與上文中介紹的一致。在 then() 方法中,可以通過(guò) response 對(duì)象獲取響應(yīng)數(shù)據(jù)。由于 fetch 返回的是一個(gè) Promise,因此我們也可以使用 async/await 來(lái)進(jìn)行異步代碼處理:

async function fetchData() {
try {
const response = await fetch(url, options)
const data = await response.json()

// 處理數(shù)據(jù)
} catch (error) {
// 處理錯(cuò)誤
}
}

如果你想在 Vue 中全局使用 Fetch 庫(kù),你可以通過(guò)在 Vue.prototype 上添加一個(gè)方法實(shí)現(xiàn)全局調(diào)用:

import 'whatwg-fetch'
import Vue from 'vue'

Vue.prototype.$fetch = fetch

這樣,在任何 Vue 組件中都可以通過(guò) this.$fetch 方法來(lái)發(fā)送網(wǎng)絡(luò)請(qǐng)求了:

// 使用 this.$fetch 方法發(fā)送網(wǎng)絡(luò)請(qǐng)求
this.$fetch(url, options)
.then(response => {
// 處理響應(yīng)
})
.catch(error => {
// 處理錯(cuò)誤
});

如果你習(xí)慣使用 Axios 等其它的網(wǎng)絡(luò)請(qǐng)求工具,也可以在 Vue 項(xiàng)目中使用它們來(lái)發(fā)送網(wǎng)絡(luò)請(qǐng)求。只需要在項(xiàng)目中安裝和引入對(duì)應(yīng)的庫(kù)即可。

責(zé)任編輯:華軒 來(lái)源: 今日頭條
相關(guān)推薦

2023-12-06 07:14:28

前端API中間件

2024-03-29 09:00:51

前端數(shù)據(jù)后端

2018-11-06 21:50:09

前端Html腳本語(yǔ)言

2020-10-08 18:20:54

前端后端架構(gòu)

2020-09-18 15:10:51

Web前端技術(shù)

2021-01-25 06:53:59

前端AJAX技術(shù)熱點(diǎn)

2024-08-26 08:47:32

2022-01-28 14:20:53

前端代碼中斷

2024-08-12 13:19:32

2017-02-23 20:30:29

后端前端webpack

2019-03-28 11:00:37

前端網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)

2022-10-20 15:43:39

htmxDjango技術(shù)棧

2022-09-15 12:41:43

微服務(wù)后端前端

2024-07-26 08:53:09

前端參數(shù)后端

2024-06-12 08:02:36

網(wǎng)絡(luò)請(qǐng)求JS前端

2025-02-28 09:34:11

前端參數(shù)方式

2015-09-23 14:07:12

前端與后端架構(gòu)實(shí)例

2014-02-17 17:47:16

前端后端架構(gòu)

2021-05-06 15:08:40

開(kāi)發(fā)前端后端

2024-05-06 00:00:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)