首頁  >  文章  >  web前端  >  帶你深入了解HTTP模組

帶你深入了解HTTP模組

青灯夜游
青灯夜游轉載
2022-06-09 19:28:522216瀏覽

本篇文章帶大家學習http模組相關內容,為寫入介面做基礎,希望對大家有幫助!

帶你深入了解HTTP模組

一、Web伺服器

什麼是web伺服器?

當應用程式(客戶端)需要某一個資源時,可以向一個台伺服器,透過Http請求取得到這個資源;提供資源的這個伺服器,就是一個Web伺服器;

1.1 伺服器初步體驗

帶你深入了解HTTP模組

1.2 建立伺服器的兩種方式

  • http.createServer會回傳伺服器的物件
  • 底層其實是用直接new Server 物件

帶你深入了解HTTP模組

1.3 request 物件

request物件中封裝了客戶端給我們伺服器傳遞過來的所有資訊

  • 本次請求的URL,伺服器需要根據不同的URL進行不同的處理;

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

  • 本次請求的headers中也會攜帶一些訊息,例如客戶端資訊、接受資料的格式、支援的編碼格式等等…

常規請求:

帶你深入了解HTTP模組

帶你深入了解HTTP模組

#1.3.1 request-url

客戶端在發送請求時,會請求不同的數據,那麼會傳入不同的請求位址,伺服器端需要根據不同的請求位址,作出不同的回應。

如果使用者的請求位址中還攜帶有一些額外參數,我們該如何解析呢?

我們可以使用 url 模組。

其中,url 模組提供用於網址處理和解析的實用工具

導入url const url = require('url')

假設我們的請求資料是:
帶你深入了解HTTP模組

控制台解析url 的結果是:

帶你深入了解HTTP模組

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

導入querystring 模組const qs = require('querystring');

const http = require("http")const url = require('url')const qs = require('querystring')// 1. 创建服务器const server = http.createServer((req, res) => {
  // 使用内置模块
  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('请求结束')
  }});// 2. 设置端口号并启动服务器server.listen(8888,'0.0.0.0',()=>{
  console.log("服务器启动成功~");})
  • ✅控制台輸出結果:
    帶你深入了解HTTP模組

1.3.2 request-method

在Restful規格(設計風格)中,我們對於資料的增刪改查應該透過不同的請求方式:

  • GET:查詢資料;
  • POST:新建資料;
  • PATCH:更新資料;
  • DELETE:刪除資料

我們可以透過判斷不同的請求方式(method)來進行不同的處理。


假設下面是我們的在 body 的JSON請求資料—>如何使我們的伺服器取得到username和password呢?

帶你深入了解HTTP模組

帶你深入了解HTTP模組

  • ✅控制台輸出結果
    帶你深入了解HTTP模組

1.3.2 request-headers

帶你深入了解HTTP模組

#content-type是這次請求攜帶的資料的類型:

  • application/json表示是一個json型別;
  • text/plain表示是文字型別;
  • application/xml表示是xml型別;
  • multipart/form-data表示是上傳檔案;

**content-length:**檔案的大小和長

keep-alive:

#
  • http是基於TCP協定的,但是通常在進行一次請求和回應結束後會立刻中斷;
  • 在http1.0中,如果想要繼續保持連線: ①瀏覽器需要在請求頭中加入 connection: keep-alive;②伺服器需要在回應頭中加入 connection:keey-alive;③當客戶端再次放請求時,就會使用同一個連接,直接一方中斷連線;
  • 在 http1.1中,所有連線預設是 connection: keep-alive的:①不同的Web伺服器會有不同的保持keep-alive的時間;②Node中預設是5s中

# **accept-encoding:**告知伺服器,客戶端支援的檔案壓縮格式,例如js檔案可以使用gzip編碼,對應.gz檔案

**accept:**告知伺服器,客戶端可接受檔案的格式類型;

**user-agent:**客戶端相關的資訊;

1.4 response 物件

1.4.1 response-回應物件

如果我們希望給客戶端回應的結果數據,可以透過兩種方式:

  • Write方法:這種方式是直接寫出數據,但是並沒有關閉流;
  • end方法:這種方式是寫出最後的數據,並且寫出後會關閉流;

注意:如果我們沒有呼叫end 和close ,客戶端會將一直等待結果。

1.4.2 response-回應碼

Http狀態碼(Http Status Code)是用來表示Http回應狀態的數字碼:

  • Http狀態碼非常多,可以根據不同的情況,給客戶端回傳不同的狀態碼;
  • #常見的狀態碼是下面這些(後續項目中,也會用到其中的狀態碼)
  • http狀態碼大全
#原因短語

類別
1xx Informational(資訊性狀態碼) #接受的請求正在處理
2xx Success(成功狀態碼) 請求正常處理完畢
3xx Redirection(重定向) 需要進行附加操作以完成請求
#4xx

Client error(客戶端錯誤) 客戶端請求出錯,伺服器無法處理請求常見的回應碼:#狀態碼描述狀態說明##OK請求成功。一般用於GET與POST請求400Bad Request客戶端請求的語法錯誤,伺服器無法理解401Unauthorized要求使用者的身份認證403Forbidden伺服器理解請求客戶端的請求,但是拒絕執行此請求404Not Found伺服器無法根據客戶端的請求找到資源(網頁)。透過此程式碼,網站設計人員可設定"您所要求的資源無法找到"的個性頁面#500
5xx Server Error(伺服器錯誤)伺服器處理請求出錯
#200

Internal Server Error伺服器內部錯誤,無法完成請求

帶你深入了解HTTP模組
503帶你深入了解HTTP模組

Service Unavailable

由於超載或系統維護,伺服器暫時的無法處理客戶端的請求。延時的長度可包含在伺服器的Retry-After頭資訊中

  • #設定狀態碼:

  • 帶你深入了解HTTP模組
    帶你深入了解HTTP模組

1.4.3 response-回應header

#傳回頭部訊息,主要有兩種方式:######### res.setHeader:一次寫入一個頭部訊息;#####res.writeHead:同時寫入header和status####################更多node相關知識,請造訪:###nodejs 教學###! ###

以上是帶你深入了解HTTP模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除