Node.js之HTTP請求與響應


在C#、OC中也是客戶端發起一個請求,服務端作出響應。我們可以把這個過程抽象理解 .

1.客戶端給服務端發起請求相當於向服務端寫入一個流(writable)

2.服務端讀取客戶端的流(readable)

3.服務端向客戶端作出響應相當於向客戶端寫入一個流(writable)

4.客戶端讀取服務端的響應(readable)

整個流程分為兩部分一是客戶端的處理而是服務端的處理.最主要的還是客戶端請求和服務端響應.

一、http.ClientRequest對象

它實現了writable流,可以使用它的所有功能。http模塊中使用http.request(options,callback)方法來生成該對象。

1.options主要包括以下幾個可選:

host :服務器域名或IP地址,默認localhost

hostname:與host相同,但對url.parse()的支持優於host.

port:端口

localAddress:網絡連接的本地接口

socketPath:Unix域套接字(使用host:port或socketPath)

method:請求方法 :GET、POST等默認GET

path:請求的資源路徑默認/.也可包括查詢字符串

headers:請求頭

auth:身份認證

agent:代理.如果使用Agent,則請求默認為Connection:keep-alive.可能的值有undefined,Agent,false

2.ClientRequest提供的事件與方法

事件:

response:當從服務器收到該請求的響應時發出。該回調處理程序接收一個IncomingMessage對象作為唯一的參數。

socket:當一個套接字分配給該請求時發出。

connect:當服務器響應一個由CONNECT方法發起的一個請求時發出。如果該事件未被客戶端處理,那么該連接將關閉

upgrade:當服務器響應在其標頭包括一個更新請求的請求時發出

continue:當服務器發送一個100ContinueHTTP響應,指示客戶端發送請求正文時發出

方法:

write()、end()和writable流一樣

abort():終止請求。

setTimeout(timeout,[callback]):設置請求超時時間

setNoDelay([noDelay]):noDelay布爾值,true立即寫入,false緩沖寫入

setSocketKeepAlive([enable],[initualDelay]):啟用和禁用對客戶機請求的保持活動功能。initualDelay指定最后一個數據包和第一個保持活動請求之間的延遲。

二、http.ServerResponse對象

和http.ClientRequest對象一個也是實現了writable流。也可實現writable流的功能,另外還包括下面的事件屬性和方法。

事件或屬性:

close:在Response.End()刷新響應之前關閉時發出。

headersSent:布爾值.已發送為true.只讀。

sendDate:布爾值,true時,Date標頭自動生成,並作為響應的一部分發送

statusCode:無須顯示的寫入標頭來指定響應狀態碼。

方法:

writeContinue():發送一個HTTP/1.1 100 Continue消息給客戶端,請求被發送的正文內容

writeHead(statusCode,[reasonPhrase],[headers]):把一個響應標頭寫入請求。statusCode參數是HTTP響應狀態代碼,reasonPhrase是字符串,表示StatusCode的原因.headers是響應標頭對象。response.writeHead(200,'Success',{'Content-Length':body.length,'Content-Type':'text/plain'});

setTimeout(msecs,callback):設置客戶端連接的超時時間。

setHeader(name,value):設置標頭值。

getHeader(name):獲取標頭值。

removeHeader(name):移除標頭。

addTrailers(headers):將http尾隨標頭寫入響應的結束處。

三、客戶端響應和服務端請求

上面一二主要是writable流的,readable流的包括客戶端響應和服務端請求。它們都是一個對象:IncomingMessage對象。

IncomingMessage對象長成什么樣子可以把它輸出來看.由於IncomingMessage對象對於我們開發的來說不經常用,所以看看就好。

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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM