溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HTTP模塊實(shí)例分析

發(fā)布時(shí)間:2022-06-10 09:39:07 來源:億速云 閱讀:98 作者:zzz 欄目:web開發(fā)

本文小編為大家詳細(xì)介紹“HTTP模塊實(shí)例分析”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“HTTP模塊實(shí)例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

HTTP模塊實(shí)例分析

一、Web服務(wù)器

什么是web服務(wù)器?

當(dāng)應(yīng)用程序(客戶端)需要某一個(gè)資源時(shí),可以向一個(gè)臺服務(wù)器,通過Http請求獲取到這個(gè)資源;提供資源 的這個(gè)服務(wù)器,就是一個(gè)Web服務(wù)器;

1.1 服務(wù)器初體驗(yàn)

HTTP模塊實(shí)例分析

1.2 創(chuàng)建服務(wù)器的兩種方式

  • http.createServer會返回服務(wù)器的對象

  • 底層其實(shí)使用直接 new Server 對象

HTTP模塊實(shí)例分析

1.3 request 對象

request對象中封裝了客戶端給我們服務(wù)器傳遞過來的所有信息

  • 本次請求的URL,服務(wù)器需要根據(jù)不同的URL進(jìn)行不同的處理;

  • 本次請求的請求方式,比如GET、POST請求傳入的參數(shù)和處理的方式是不同的;

  • 本次請求的headers中也會攜帶一些信息,比如客戶端信息、接受數(shù)據(jù)的格式、支持的編碼格式等等…

常規(guī)請求:

HTTP模塊實(shí)例分析

HTTP模塊實(shí)例分析

1.3.1 request-url

客戶端在發(fā)送請求時(shí),會請求不同的數(shù)據(jù),那么會傳入不同的請求地址,服務(wù)器端需要根據(jù)不同的請求地址,作出不同的響應(yīng)。

如果用戶的請求地址中還攜帶有一些額外參數(shù),我們該如何解析呢?

我們可以使用 url 模塊。

其中,url 模塊提供用于網(wǎng)址處理和解析的實(shí)用工具

導(dǎo)入url const url = require(‘url’)

假設(shè)我們的請求數(shù)據(jù)是:
HTTP模塊實(shí)例分析

控制臺解析 url 的結(jié)果是:

HTTP模塊實(shí)例分析

其中pathname才是我們最后需要獲取的路徑。我們的目的是把 username 和 password 在query中分開獲取到。

導(dǎo)入 querystring 模塊 const qs = require('querystring');

const http = require("http")const url = require('url')const qs = require('querystring')// 1. 創(chuàng)建服務(wù)器const server = http.createServer((req, res) => {
  // 使用內(nèi)置模塊
  const{ pathname,query } = url.parse(req.url)
  if(pathname === '/login'){
    console.log(query);
    console.log(qs.parse(query));
    const { username, password } = qs.parse(query)
    console.log(username,password);
    res.end('請求結(jié)束')
  }});// 2. 設(shè)置端口號并啟動服務(wù)器server.listen(8888,'0.0.0.0',()=>{
  console.log("服務(wù)器啟動成功~");})
  • ?控制臺輸出結(jié)果:
    HTTP模塊實(shí)例分析

1.3.2 request-method

在Restful規(guī)范(設(shè)計(jì)風(fēng)格)中,我們對于數(shù)據(jù)的增刪改查應(yīng)該通過不同的請求方式:

  • GET:查詢數(shù)據(jù);

  • POST:新建數(shù)據(jù);

  • PATCH:更新數(shù)據(jù);

  • DELETE:刪除數(shù)據(jù)

我們可以通過判斷不同的請求方式(method)進(jìn)行不同的處理。


假設(shè)下面是我們的在 body 的JSON請求數(shù)據(jù)—>如何使我們的服務(wù)器獲取到username和password呢?

HTTP模塊實(shí)例分析

HTTP模塊實(shí)例分析

  • ?控制臺輸出結(jié)果
    HTTP模塊實(shí)例分析

1.3.2 request-headers

HTTP模塊實(shí)例分析

content-type是這次請求攜帶的數(shù)據(jù)的類型:

  • application/json表示是一個(gè)json類型;

  • text/plain表示是文本類型;

  • application/xml表示是xml類型;

  • multipart/form-data表示是上傳文件;

**content-length:**文件的大小和長

keep-alive:

  • http是基于TCP協(xié)議的,但是通常在進(jìn)行一次請求和響應(yīng)結(jié)束后會立刻中斷;

  • 在http1.0中,如果想要繼續(xù)保持連接: ①瀏覽器需要在請求頭中添加 connection: keep-alive;②服務(wù)器需要在響應(yīng)頭中添加 connection:keey-alive; ③當(dāng)客戶端再次放請求時(shí),就會使用同一個(gè)連接,直接一方中斷連接;

  • 在http1.1中,所有連接默認(rèn)是 connection: keep-alive的:①不同的Web服務(wù)器會有不同的保持 keep-alive的時(shí)間; ②Node中默認(rèn)是5s中

**accept-encoding:**告知服務(wù)器,客戶端支持的文件壓縮格式,比如js文件可以使用gzip編碼,對應(yīng) .gz文件

**accept:**告知服務(wù)器,客戶端可接受文件的格式類型;

**user-agent:**客戶端相關(guān)的信息;

1.4 response 對象

1.4.1 response-響應(yīng)對象

如果我們希望給客戶端響應(yīng)的結(jié)果數(shù)據(jù),可以通過兩種方式:

  • Write方法:這種方式是直接寫出數(shù)據(jù),但是并沒有關(guān)閉流;

  • end方法:這種方式是寫出最后的數(shù)據(jù),并且寫出后會關(guān)閉流;

注意:如果我們沒有調(diào)用 end 和close ,客戶端會將一直等待結(jié)果。

1.4.2 response-響應(yīng)碼

Http狀態(tài)碼(Http Status Code)是用來表示Http響應(yīng)狀態(tài)的數(shù)字代碼:

  • Http狀態(tài)碼非常多,可以根據(jù)不同的情況,給客戶端返回不同的狀態(tài)碼;

  • 常見的狀態(tài)碼是下面這些(后續(xù)項(xiàng)目中,也會用到其中的狀態(tài)碼)

  • http狀態(tài)碼大全


類別原因短語
1xxInformational(信息性狀態(tài)碼)接受的請求正在處理
2xxSuccess(成功狀態(tài)碼)請求正常處理完畢
3xxRedirection(重定向)需要進(jìn)行附加操作以完成請求
4xxClient error(客戶端錯(cuò)誤)客戶端請求出錯(cuò),服務(wù)器無法處理請求
5xxServer Error(服務(wù)器錯(cuò)誤)服務(wù)器處理請求出錯(cuò)

常見的響應(yīng)碼:

狀態(tài)代碼描述狀態(tài)說明
200OK請求成功。一般用于GET與POST請求
400Bad Request客戶端請求的語法錯(cuò)誤,服務(wù)器無法理解
401Unauthorized請求要求用戶的身份認(rèn)證
403Forbidden服務(wù)器理解請求客戶端的請求,但是拒絕執(zhí)行此請求
404Not Found服務(wù)器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)。通過此代碼,網(wǎng)站設(shè)計(jì)人員可設(shè)置"您所請求的資源無法找到"的個(gè)性頁面
500Internal Server Error服務(wù)器內(nèi)部錯(cuò)誤,無法完成請求
503Service Unavailable由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)的無法處理客戶端的請求。延時(shí)的長度可包含在服務(wù)器的Retry-After頭信息中

設(shè)置狀態(tài)碼:

HTTP模塊實(shí)例分析
HTTP模塊實(shí)例分析

1.4.3 response-響應(yīng) header

返回頭部信息,主要有兩種方式:

  • res.setHeader:一次寫入一個(gè)頭部信息;

  • res.writeHead:同時(shí)寫入header和status
    HTTP模塊實(shí)例分析
    HTTP模塊實(shí)例分析

讀到這里,這篇“HTTP模塊實(shí)例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI