http.Client

2018-07-11 09:47 更新

使用服務(wù)器地址作為參數(shù)來構(gòu)造一個HTTP client,其返回的句柄可用來發(fā)出一個或者多個請求。根據(jù)連接的服 務(wù)器不同,這個客戶端可以使用管道處理機制來處理請求或者每個請求重新構(gòu)建stream。當(dāng)前的實現(xiàn)方式并沒 有用管道處理機制處理請求.

Example of connecting to google.com:
var http = require('http');
var google = http.createClient(80, 'www.google.com');
var request = google.request('GET', '/',
{'host': 'www.google.com'});
request.end();
request.on('response', function (response) {
console.log('STATUS: ' + response.statusCode);
console.log('HEADERS: ' + JSON.stringify(response.headers));
response.setEncoding('utf8');
response.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});

如下消息頭應(yīng)當(dāng)注意:

Node 并不會添加'Host',但是這個屬性對于一個網(wǎng)站來說通常是必須的。

發(fā)送'Connection: keep-alive'將告知Node 和服務(wù)器之間的連接應(yīng)當(dāng)是持久連接,直到下一次請求才斷開。 發(fā)送'Content-length'標(biāo)記將禁用默認的消息體編碼。

Event: 'upgrade'

function (request, socket, head)

當(dāng)服務(wù)器響應(yīng)upgrade 請求時觸發(fā)此事件,如果這個消息沒有被監(jiān)聽,客戶端接收到一個upgrade 頭的話會導(dǎo)致 這個連接被關(guān)閉。

可以查看http.Server 關(guān)于upgrade 事件的解釋來了解更多內(nèi)容。

http.createClient(port, host='localhost', secure=false, [credentials])

構(gòu)造一個新的HTTP 客戶端.port 和host 指明了將要連接的目標(biāo)。在發(fā)出請求之前不會建立流(establishe a stream)。 secure 是一個可選的布爾值,用來表示是否啟用HTTPS。credentials 是一個來自于crypto 模塊的可選參數(shù), credentials 中可以包含client 的私鑰,證書以及一個可信任的數(shù)字認證中心的證書列表. 如果連接使用了secure 但是沒有把數(shù)字認證中心證書傳給credentials,那么NODEJS 將缺省使用公開的可信任 數(shù)字認證中心整數(shù)列表,就比如http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt

client.request(method='GET', path, [request_headers])

發(fā)出一個請求,在必須時建立一個流。該函數(shù)返回一個http.ClientRequest 對象。method 是可選項,缺省會以 GET 方式發(fā)出請求

request_headers 是可選項。請求頭的額外部分一般由NODE 內(nèi)部實現(xiàn)。該函數(shù)返回一個ClientRequest 對象 如果你就想要發(fā)送一個信息體,記得要在頭信息里包含Content-Length 項。如果你想要將BODY 通過流的方式 傳輸發(fā)送,或許需要設(shè)置Transfer-Encoding: chunked.

譯注:大多數(shù)的站點相應(yīng)用戶請求時發(fā)送的HTTP Headers 中包含Content-Length 頭.此頭信息定義在HTTP1.0協(xié) 議RFC 1945 10.4章節(jié)中.該信息是用來告知用戶代理,通常意義上就是瀏覽器,服務(wù)端發(fā)送的文檔內(nèi)容長度.瀏覽 器接受到此信息后,接收完Content-Length 中定義的長度字節(jié)后開始解析頁面.如果服務(wù)端有部分數(shù)據(jù)延遲發(fā)送,那么瀏覽器就會白屏.這樣導(dǎo)致比較糟糕的用戶體驗. 解決方法在HTTP1.1協(xié)議.RFC2616中14.41章節(jié)中定義的 Transfer-Encoding:chunked 的頭信息.chunked 編碼定義在3.6.1中.根據(jù)此定義瀏覽器不需要等到內(nèi)容字節(jié)全部下 載完成,只要接收到一個chunked 塊就可解析頁面.并且可以下載html 中定義的頁面內(nèi)容,包括js,css,image 等.

注意:這個請求并不完全。這個方法僅僅發(fā)送了頭和請求。需要發(fā)送一個request.end()來真正的完成當(dāng)前這個請 求并且接收回應(yīng)。(這聽起來有點繞,但是這正好就提供了用戶通過使用request.write()方法來通過流方式發(fā)送 body 到服務(wù)器端的機會)

client.verifyPeer()

返回true/false 并在上下文附帶服務(wù)器定義的或者缺省數(shù)字認證中心的有效證書列表。

client.getPeerCertificate()

返回用JSON 結(jié)構(gòu)詳盡表述的服務(wù)器方證書,其中包含證書的‘主題’,‘發(fā)布者’,'有效來源','有效目標(biāo)'('subject', 'issuer', 'valid_from' and 'valid_to')。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號