http模組
http
模組是一個內建模組,它提供了 HTTP 伺服器的功能。使用這個模組,你可以建立一個 HTTP 伺服器來響應客戶端的請求,http
模組是 Node.js 中進行 HTTP 通訊的基礎,無論是作為伺服器還是客戶端。
常用的伺服器軟體還有:Apache,IIS,Nginx,Tomcat
http
模組的一些基本用法
- 建立伺服器 (
http.createServer
):http.createServer((request, response))
:建立一個新的 HTTP 伺服器,其中request
是一個包含請求資訊的物件,response
是一個可以用於傳送響應的物件。
- 監聽請求:
- 伺服器物件有一個
listen
方法,用於指定伺服器監聽的埠和(可選的)主機名。
- 伺服器物件有一個
- 傳送響應:
- 使用
response
物件的writeHead
方法設定響應狀態碼和響應頭。 - 使用
response
物件的end
方法傳送響應體並結束響應。
- 使用
- 處理客戶端請求:
- 你可以訪問
request
物件來獲取請求方法、URL、HTTP 版本、請求頭等資訊。 - 可以透過
request
物件的on
方法監聽資料事件,以接收請求體。
- 你可以訪問
- 關閉伺服器:
- 使用
server.close
方法關閉伺服器,停止監聽埠。
- 使用
- 傳送檔案作為響應:
- 可以使用
fs
模組讀取檔案內容,並透過response
物件傳送。
- 可以使用
- 錯誤處理:
- 可以監聽
server
物件的error
事件來處理錯誤。
- 可以監聽
建立 web 伺服器的基本步驟
- 匯入 http 模組
- 建立 web 伺服器例項
server.on()
為伺服器例項繫結 request事件,監聽客戶端的請求- 啟動伺服器
下面是一個簡單例項:
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')
}
)
伺服器端方法:
- http.createServer():
- 建立一個新的 HTTP 伺服器例項。
- server.listen(port, [hostname], [backlog], [callback]):
- 使伺服器監聽指定的埠和主機名。
- server.close([callback]):
- 關閉伺服器,停止監聽。
- server.emit('request', request, response):
- 當客戶端傳送請求時,觸發 'request' 事件。
- server.emit('upgrade', request, socket, head):
- 當客戶端請求升級連線到一個 Websocket 時,觸發 'upgrade' 事件。
- server.emit('connect', request, socket):
- 當客戶端請求一個 HTTP CONNECT 方法時,觸發 'connect' 事件。
- server.maxHeadersCount:
- 設定可以接收的請求頭的最大數量。
- server.setTimeout(msecs, callback):
- 設定響應超時時間。
- server.keepAliveTimeout:
- 設定長連線的超時時間。
請求和響應物件方法:
- response.writeHead(statusCode,[ statusMessage],[ headers]):
- 傳送響應頭。
- response.write(chunk, [encoding]):
- 傳送響應體的一部分。
encoding
預設值為utf-8
- response.end([data],[enconding]):
- 結束響應過程。
- response.setTimeout(msecs, callback):
- 設定請求的超時時間。
- response.getHeader(name):
- 獲取響應頭。
- response.setHeader(name, value):
- 設定響應頭。
- response.hasHeader(name):
- 檢查是否設定了特定的響應頭。
- response.removeHeader(name):
- 移除特定的響應頭。
客戶端請求方法:
- http.request(options, callback):
- 發起一個請求到伺服器。
- http.get(options, callback):
- 傳送一個 GET 請求。
請求選項(options)屬性:
hostname
或host
:請求的伺服器域名或 IP 地址。port
:伺服器埠。path
:請求的路徑。method
:請求方法(如 GET 或 POST)。headers
:請求頭物件。auth
:HTTP 基本認證(使用者名稱和密碼)。- 等等...
請求物件方法:
- request.write(chunk,[encoding]):
- 向請求體寫入資料。
- request.end([data],[enconding]):
- 結束請求。
- request.abort():
- 中止請求。
- request.setTimeout(timeout, [callback]):
- 設定請求超時。
- request.on('response', callback):
- 當接收到響應時觸發。
事件:
request
:伺服器接收到請求時觸發。upgrade
:客戶端請求升級連線時觸發。connect
:客戶端請求 HTTP CONNECT 方法時觸發。checkContinue
:客戶端傳送了 HTTP 'Expect: 100-continue' 頭時觸發。error
:請求或響應過程中發生錯誤時觸發。timeout
:請求超時時觸發。