Node.js 的 http模組

XiSoil發表於2024-08-20

http模組

http 模組是一個內建模組,它提供了 HTTP 伺服器的功能。使用這個模組,你可以建立一個 HTTP 伺服器來響應客戶端的請求,http 模組是 Node.js 中進行 HTTP 通訊的基礎,無論是作為伺服器還是客戶端。

常用的伺服器軟體還有:Apache,IIS,Nginx,Tomcat

http 模組的一些基本用法

  1. 建立伺服器 (http.createServer):
    • http.createServer((request, response)):建立一個新的 HTTP 伺服器,其中 request 是一個包含請求資訊的物件,response 是一個可以用於傳送響應的物件。
  2. 監聽請求
    • 伺服器物件有一個 listen 方法,用於指定伺服器監聽的埠和(可選的)主機名。
  3. 傳送響應
    • 使用 response 物件的 writeHead 方法設定響應狀態碼和響應頭。
    • 使用 response 物件的 end 方法傳送響應體並結束響應。
  4. 處理客戶端請求
    • 你可以訪問 request 物件來獲取請求方法、URL、HTTP 版本、請求頭等資訊。
    • 可以透過 request 物件的 on 方法監聽資料事件,以接收請求體。
  5. 關閉伺服器
    • 使用 server.close 方法關閉伺服器,停止監聽埠。
  6. 傳送檔案作為響應
    • 可以使用 fs 模組讀取檔案內容,並透過 response 物件傳送。
  7. 錯誤處理
    • 可以監聽 server 物件的 error 事件來處理錯誤。

建立 web 伺服器的基本步驟

  1. 匯入 http 模組
  2. 建立 web 伺服器例項
  3. server.on() 為伺服器例項繫結 request事件,監聽客戶端的請求
  4. 啟動伺服器

下面是一個簡單例項:

const http = require('http')
// 建立 web 伺服器例項
const server = http.createServer()

server.on('request', (request, response) => {
    // 獲取傳送請求的url
    const url = request.url
    console.log(`Request request: ${url}`)
    // 獲取傳送請求的型別
    const method = request.method || 'GET'
    // 設定響應頭
    response.writeHead(200, {
        'Content-Type': 'text/plain; charset=utf-8'
    });
    // 傳送響應資料
    response.end("hello world!", 'utf-8')
})

server.listen(8081, '127.0.0.1', function () {
        console.log('server running in 127.0.0.1:8081')
    }
)

伺服器端方法

  1. http.createServer()
    • 建立一個新的 HTTP 伺服器例項。
  2. server.listen(port, [hostname], [backlog], [callback])
    • 使伺服器監聽指定的埠和主機名。
  3. server.close([callback])
    • 關閉伺服器,停止監聽。
  4. server.emit('request', request, response)
    • 當客戶端傳送請求時,觸發 'request' 事件。
  5. server.emit('upgrade', request, socket, head)
    • 當客戶端請求升級連線到一個 Websocket 時,觸發 'upgrade' 事件。
  6. server.emit('connect', request, socket)
    • 當客戶端請求一個 HTTP CONNECT 方法時,觸發 'connect' 事件。
  7. server.maxHeadersCount
    • 設定可以接收的請求頭的最大數量。
  8. server.setTimeout(msecs, callback)
    • 設定響應超時時間。
  9. server.keepAliveTimeout
    • 設定長連線的超時時間。

請求和響應物件方法

  1. response.writeHead(statusCode,[ statusMessage],[ headers])
    • 傳送響應頭。
  2. response.write(chunk, [encoding])
    • 傳送響應體的一部分。
    • encoding 預設值為 utf-8
  3. response.end([data],[enconding])
    • 結束響應過程。
  4. response.setTimeout(msecs, callback)
    • 設定請求的超時時間。
  5. response.getHeader(name)
    • 獲取響應頭。
  6. response.setHeader(name, value)
    • 設定響應頭。
  7. response.hasHeader(name)
    • 檢查是否設定了特定的響應頭。
  8. response.removeHeader(name)
    • 移除特定的響應頭。

客戶端請求方法

  1. http.request(options, callback)
    • 發起一個請求到伺服器。
  2. http.get(options, callback)
    • 傳送一個 GET 請求。

請求選項(options)屬性:

  • hostnamehost:請求的伺服器域名或 IP 地址。
  • port:伺服器埠。
  • path:請求的路徑。
  • method:請求方法(如 GET 或 POST)。
  • headers:請求頭物件。
  • auth:HTTP 基本認證(使用者名稱和密碼)。
  • 等等...

請求物件方法

  1. request.write(chunk,[encoding])
    • 向請求體寫入資料。
  2. request.end([data],[enconding])
    • 結束請求。
  3. request.abort()
    • 中止請求。
  4. request.setTimeout(timeout, [callback])
    • 設定請求超時。
  5. request.on('response', callback)
    • 當接收到響應時觸發。

事件

  • request:伺服器接收到請求時觸發。
  • upgrade:客戶端請求升級連線時觸發。
  • connect:客戶端請求 HTTP CONNECT 方法時觸發。
  • checkContinue:客戶端傳送了 HTTP 'Expect: 100-continue' 頭時觸發。
  • error:請求或響應過程中發生錯誤時觸發。
  • timeout:請求超時時觸發。

相關文章