首頁技術文章正文

HTTP模塊常用的API有哪些?

更新時間:2021-12-01 來源:黑馬程序員 瀏覽量:

IT培訓班

HTTP服務器本質上也是一個Socket服務器,可以理解為在Socket服務器的基礎上進行了一些封裝,簡化了一些操作。本節(jié)將對HTTP模塊提供的API進行詳細介紹。

1. http.Server

在Node.js中,HTTP服務器是指http.Server對象,用Node.js做的所有基于HTTP協(xié)議的系統(tǒng),如網站、社交應用甚至代理服務器,都是基于http.Server實現(xiàn)的。它提供了一套封裝級別很低的API,僅僅是流控制和簡單的消息解析,所有的高層功能都要通過它的接口來實現(xiàn)。創(chuàng)建http.Server對象的語法如下:

    Var server = http.createServer();

在上述代碼中,使用creatServer()函數(shù)創(chuàng)建的server對象就是一個http.Server對象。

http.Server是一個基于事件的HTTP服務器,繼承自EventEmitter,所有的請求都被封裝為獨立的事件,開發(fā)者只需要對它的事件編寫相應函數(shù)即可實現(xiàn)HTTP服務器的所有功能。http.Server提供了一些函數(shù),具體如下:

(1)server.close([callback]):服務器停止已經開始的監(jiān)聽。

(2) server.listen(port[, hostname][, backlog][, callback])。

server.listen參數(shù)說明如下:

●port:指定監(jiān)聽的端口。

● hostname:指定主機名。

●backlog:指定被允許進行排隊的最大待處理連接數(shù),默認是511。

●callback:指定該服務器已經開始在指定的端口上監(jiān)聽時,要執(zhí)行的回調處理函數(shù)。

(3))server listen(handle[,callback])和server.listen(path[,callback]):監(jiān)聽文件系統(tǒng)的連接。第一個是監(jiān)聽已打開文件描述句柄,第二個是要監(jiān)聽一個文件的路徑。除此之外,http.Server 還提供了3個事件,具體如下:

(1)request:當客戶端請求到來時,該事件被觸發(fā),提供兩個參數(shù)req和res,分別為http.ServerRequest和http.ServerResponse的實例,表示請求和響應信息。

(2)connection:當TCP連接建立時,該事件被觸發(fā),提供一個參數(shù)socket,為net.Socket 的實例。connection事件的粒度要大于request,因為客戶端在Keep-Alive模式下可能會在同一個連接內發(fā)送多次請求。

(3)close:當服務器關閉時,該事件被觸發(fā)。注意不是在用戶連接斷開時。除此之外,還有checkContinue、upgrade、clientError事件,通常不需要關心,只有在實現(xiàn)復雜的HTTP服務器時才會用到。


2. http.IncomingMessage 對象

在HTTP 服務器和客戶端都會創(chuàng)建http.IncomingMessage對象,它一般由http.Server的request事件發(fā)送,作為第一個參數(shù)傳遞,通常簡稱為request或req。在發(fā)送HTTP 請求時,會發(fā)送請求報文,http.IncomingMessage對象實現(xiàn)了一個可讀流,在服務器端,http.IncomingMessage 提供了一個close 事件,用戶當前請求結束時,也就是底層的套接字被關閉時該事件被觸發(fā)。另外,http.IncomingMessage對象中還提供了一些函數(shù)和屬性,用來獲取客戶端請求和服務器端響應的一些信息,如下表所示。

表7-2 http.IncomingMessage 對象的常用函數(shù)和屬性

函數(shù)&屬性

說明

message.headers

包含了隨請求/回應發(fā)送的標頭的一個對象

message.httpVersion

指定用于構建客戶端請求/響應的HTTP版本

message.setTimeout(msccs, callback)

設置連接的以毫秒為單位的套接字超時時間,連同一個如果發(fā)生超時時被執(zhí)行的回調函數(shù)

message.method

指定用于請求/響應的方法

message. statusCode

指定來自服務器的3位數(shù)狀態(tài)碼。此屬性只在處理服務器響應的HTTP客戶端上有效

message.socket

這是一個指向net.Socket對象的句柄,用來與客戶端/服務器通信

message.url

發(fā)送到服務器的URL字符串,只在處理服務器中有效


3. http.ServerResponse

htp.ServerResponse是返回給客戶端的信息,決定了用戶最終能看到的結果。它也是由http.Server的request事件發(fā)送的,作為第二個參數(shù)傳遞,一般簡稱為response或res。

http.ServerResponse是一個可寫流,用來給客戶端的Socket發(fā)送響應報文,在服務器做出響應之前會發(fā)送響應報文,http.ServerResponse中有3個重要的成員函數(shù),前兩個用于返回對應響應報文的響應頭和響應內容,最后一個用于結束請求,具體如下:

(1)response.writeHead(statusCode,[headers]):向請求的客戶端發(fā)送響應頭。status-Code是HTTP狀態(tài)碼,如200(請求成功)、404(未找到)等。headers是一個類似關聯(lián)數(shù)組的對象,表示響應頭的每個屬性。該函數(shù)在一個請求內最多只能調用一次,如果不調用,則會自動生成一個響應頭。

(2)response.write(data,[encoding]):向請求的客戶端發(fā)送響應內容。data是一個Buffer或字符串,表示要發(fā)送的內容。如果data是字符串,那么需要指定encoding來說明它的編碼方式,默認是utf-8。在response.end 調用之前,response.write可以被多次調用。

(3)response.end([data],[encoding]):結束響應,告知客戶端所有發(fā)送已經完成。當所有返回的內容發(fā)送完畢時,該函數(shù)必須被調用一次。它接收兩個可選參數(shù),意義和response.write相同。如果不調用該函數(shù),客戶端將永遠處于等待狀態(tài)。除上述成員函數(shù)外,還有一些函數(shù)和屬性可供開發(fā)者使用,如表7-3所示。

表7-3 http.ServerResponse其他函數(shù)和屬性

函數(shù)&屬性

說明

response.add Trailers(headers)

將HTTP尾隨標頭寫人響應的結束處

response.finished

默認為false,調用end)的數(shù)方法后結果為 true

response.getHeader(name)

獲取已在響應中設置的HTTP標頭的值

response.headersSent

如果標頭已被發(fā)送,為true;否則為false

response.removeHeader(name)

移除已在響應中設置的一個HTTP標頭

response.sendDate

如果設置為true,則Data標頭的是自動生成的,并作為響應的一部分發(fā)送

response.setHeader(name, value)

設置一個特定的標頭值

response.setTimeout(msecs, callback)

設置客戶端連接的套接字超時時間,以毫秒計,帶有一個如果發(fā)生超時將被執(zhí)行的回調函數(shù)

response.statusCode

無須顯式地寫入標頭來指定響應狀態(tài)碼

response.statusMessage

當使用隱式消息頭并且游息頭被刷新時,這個屬性控制的消息狀態(tài)將被發(fā)送到客戶端

response.writeContinueO

發(fā)送一個HTTP/1.1100繼續(xù)消息給客戶端,表示請求主體應該發(fā)送

 





猜你喜歡:

Web API是干什么的?Web API與API的關系

Java API接口怎樣操作HBase分布式數(shù)據庫?

使用HTTP模塊構建Web服務器

JavaScript編譯原理介紹【1分鐘搞懂】

黑馬程序員HTML前端與移動開發(fā)培訓

分享到:
在線咨詢 我要報名
和我們在線交談!