Node.js中的HTTP請求與響應(yīng)詳解
在C#、OC中也是客戶端發(fā)起一個請求,服務(wù)端作出響應(yīng)。我們可以把這個過程抽象理解 .
- 1.客戶端給服務(wù)端發(fā)起請求相當(dāng)于向服務(wù)端寫入一個流(writable)
- 2.服務(wù)端讀取客戶端的流(readable)
- 3.服務(wù)端向客戶端作出響應(yīng)相當(dāng)于向客戶端寫入一個流(writable)
- 4.客戶端讀取服務(wù)端的響應(yīng)(readable)
整個流程分為兩部分一是客戶端的處理而是服務(wù)端的處理.最主要的還是客戶端請求和服務(wù)端響應(yīng).
一、http.ClientRequest對象
它實現(xiàn)了writable流,可以使用它的所有功能。http模塊中使用http.request(options,callback)方法來生成該對象。
1.options主要包括以下幾個可選:
host :服務(wù)器域名或IP地址,默認localhost
hostname:與host相同,但對url.parse()的支持優(yōu)于host.
port:端口
localAddress:網(wǎng)絡(luò)連接的本地接口
socketPath:Unix域套接字(使用host:port或socketPath)
method:請求方法 :GET、POST等默認GET
path:請求的資源路徑默認/.也可包括查詢字符串
headers:請求頭
auth:身份認證
agent:代理.如果使用Agent,則請求默認為Connection:keep-alive.可能的值有undefined,Agent,false
2.ClientRequest提供的事件與方法
事件:
response:當(dāng)從服務(wù)器收到該請求的響應(yīng)時發(fā)出。該回調(diào)處理程序接收一個IncomingMessage對象作為唯一的參數(shù)。
socket:當(dāng)一個套接字分配給該請求時發(fā)出。
connect:當(dāng)服務(wù)器響應(yīng)一個由CONNECT方法發(fā)起的一個請求時發(fā)出。如果該事件未被客戶端處理,那么該連接將關(guān)閉
upgrade:當(dāng)服務(wù)器響應(yīng)在其標(biāo)頭包括一個更新請求的請求時發(fā)出
continue:當(dāng)服務(wù)器發(fā)送一個100ContinueHTTP響應(yīng),指示客戶端發(fā)送請求正文時發(fā)出
方法:
write()、end()和writable流一樣
abort():終止請求。
setTimeout(timeout,[callback]):設(shè)置請求超時時間
setNoDelay([noDelay]):noDelay布爾值,true立即寫入,false緩沖寫入
setSocketKeepAlive([enable],[initualDelay]):啟用和禁用對客戶機請求的保持活動功能。initualDelay指定最后一個數(shù)據(jù)包和第一個保持活動請求之間的延遲。
二、http.ServerResponse對象
和http.ClientRequest對象一個也是實現(xiàn)了writable流。也可實現(xiàn)writable流的功能,另外還包括下面的事件屬性和方法。
事件或?qū)傩?
- close:在Response.End()刷新響應(yīng)之前關(guān)閉時發(fā)出。
- headersSent:布爾值.已發(fā)送為true.只讀。
- sendDate:布爾值,true時,Date標(biāo)頭自動生成,并作為響應(yīng)的一部分發(fā)送
- statusCode:無須顯示的寫入標(biāo)頭來指定響應(yīng)狀態(tài)碼。
方法:
writeContinue():發(fā)送一個HTTP/1.1 100 Continue消息給客戶端,請求被發(fā)送的正文內(nèi)容
writeHead(statusCode,[reasonPhrase],[headers]):把一個響應(yīng)標(biāo)頭寫入請求。statusCode參數(shù)是HTTP響應(yīng)狀態(tài)代碼,reasonPhrase是字符串,表示StatusCode的原因.headers是響應(yīng)標(biāo)頭對象。response.writeHead(200,'Success',{'Content-Length':body.length,'Content-Type':'text/plain'});
setTimeout(msecs,callback):設(shè)置客戶端連接的超時時間。
setHeader(name,value):設(shè)置標(biāo)頭值。
getHeader(name):獲取標(biāo)頭值。
removeHeader(name):移除標(biāo)頭。
addTrailers(headers):將http尾隨標(biāo)頭寫入響應(yīng)的結(jié)束處。
三、客戶端響應(yīng)和服務(wù)端請求
上面一二主要是writable流的,readable流的包括客戶端響應(yīng)和服務(wù)端請求。它們都是一個對象:IncomingMessage對象。
IncomingMessage對象長成什么樣子可以把它輸出來看.由于IncomingMessage對象對于我們開發(fā)的來說不經(jīng)常用,所以看看就好。
var http=require("http") var options={ hostname:'www.baidu.com', path:'', port:'80', method:'GET' }; var req=http.request(options,function(response){ console.log(response); }); req.end();
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用Node.js如何實現(xiàn)文件循環(huán)覆寫
這篇文章主要給大家介紹了關(guān)于利用Node.js如何實現(xiàn)文件循環(huán)覆寫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Node.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04async/await與promise(nodejs中的異步操作問題)
這篇文章主要介紹了async/await與promise(nodejs中的異步操作問題),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03Node如何實現(xiàn)在瀏覽器預(yù)覽項目的所有圖片詳解
最近項目遇到了個需求,需要將存放圖片進行預(yù)覽,所以這篇文章主要給大家介紹了關(guān)于Node如何實現(xiàn)在瀏覽器預(yù)覽項目的所有圖片的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-01-01Node.js Koa2使用JWT進行鑒權(quán)的方法示例
這篇文章主要介紹了Node.js Koa2使用JWT進行鑒權(quán)的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08理解nodejs的stream和pipe機制的原理和實現(xiàn)
本篇文章主要介紹了理解nodejs的stream和pipe機制的原理和實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08