Node 之http模塊

   在Node.js的核心模塊中主要有http、fs、url、querystring模塊,在前面的博文中有一篇已經介紹了url模塊,在上一篇博文中http模塊使用到過,在這篇博文中我將詳細分析其方法和原理。html

  一、http模塊-----建立HTTP服務器、客戶端

         使用http模塊只須要在文件中經過require(‘http’)引入便可。http模塊是Node.js原生模塊中華最爲亮眼的模塊。在傳統的HTTP服務器會由Apache、Nginx、IIS之類的軟件來擔任,可是Node.js並不須要。Node.js的http模塊自己就能夠構建服務器,並且性能很是可靠喲!json

        (1)Node.js服務器端瀏覽器

 server.js服務器

const http=require('http'); const server=http.createServer(function(req,res){ res.writeHead(200,{ "Content-Type":"text/html;charset=UTF-8" }); res.end("歡迎來到perfect*的博客園!!!"); }); server.listen(3000,function(){ console.log('listening port 3000'); });

運行結果:socket

在瀏覽器中輸入http://localhost:3000/或者http://127.0.0.1:3000/,頁面中會顯示以下字樣:工具

  http.createServer()方法返回的是http模塊封裝的一個基於事件http服務器。一樣,http.request是其封裝的一個HTTP客戶端工具,能夠用來向http服務器發起請求。上面的reqres分別爲http.IncomingMessagehttp.ServerResponse。性能

     http.Server的事件主要有ui

  •  request:最經常使用的事件,當客戶端請求到來時,該事件被觸發,提供req和res參數,表示請求和響應信息。
  • connection:當Tcp鏈接創建時,該事件被觸發,提供一個socket參數,是net.Socket的實例。
  • close:當服務器關閉時,觸發事件(注意不是在用戶斷開鏈接時)

     http.createServer()方法其實就是添加一個request事件進行監聽,利用下面的代碼也能夠實現上面的效果哦!url

 

const http=require('http'); const server=new http.Server(); server.on('request',function(req,res){ res.writeHead(200,{ "Content-Type":"text/html;charset=UTF-8" }); res.end("歡迎來到perfect*的博客園喲!!!"); }); server.listen(3000,function(){ console.log('welcome !!!'); });

 

 

 

 

瀏覽器顯示效果:spa

http.IncomingMessage是HTTP請求提供的信息,提供瞭如下3個事件:

  • data:當請求體數據到來時該事件被觸發。該事件提供一個chunk參數,表示接受的數據。
  • end:當請求體數據傳輸完畢時該事件被觸發,此後不會再有數據。
  • close:用戶當前請求結束時,該事件被觸發。

http.IncomingMessage提供的主要屬性有:

  • method:HTTP請求的方法,好比:get。
  • header:http請求頭。
  • URL:請求路徑。
  • httpVersion:http協議版本。

 

 

所以,我將把上面提到的知識點融合到上面第一個服務器的代碼中。

 

const http=require('http'); const server=http.createServer(function(req,res){ let data=''; req.on('data',function(chunk){ data += chunk; }); req.on('end',function(){ let method=req.method; let url=req.url; let headers=JSON.stringify(req.headers); let httpVersion=req.httpVersion; res.writeHead(200,{ "Content-Type":"text/html;charset=UTF-8" }); let dataHtml='<p>data:'+data+'</p>'; let methodHtml='<p>method:'+method+'</p>'; let urlHtml='<p>url:'+url+'</p>'; let headersHtml='<p>headers:'+headers+'</p>'; let httpVersionHtml='<p>httpVersion:'+httpVersion+'</p>'; let resData=dataHtml+ methodHtml+ urlHtml+ headersHtml+httpVersionHtml; res.end(resData); }); }); server.listen(3000,function(){ console.log('listening port 3000'); });

 

 

 在瀏覽器中的顯示頁面:

http.ServerResponse是返回客戶端的信息,其經常使用的方法爲:

  • res.writeHead(statusCode,[heasers]):向請求的客戶端發送響應。
  • res.write(data,[encoding]):向請求發送內容;
  • res.end([data],[encoding]);結束請求

這些方法在上面的代碼中已經實現。

 

二、客戶端向HTTP服務器發起請求

      在上面的方法中都是HTTP模塊在服務端的使用,接下來看看客戶端的使用,向HTTP服務器發起

  •   http.request(option[,callback]):option爲json對象,主要的字段有host、port(默認爲80)、method(默認爲get)、path(請求的相對路徑,默認「/」、header等。
  • http.get(optionoption[,callback]):http.request()使用HTTP請求方式get的簡便方法。
const http=require('http'); let reqData=''; http.request({ 'host':'127.0.0.1', 'port':'3000', 'method':'get' },function(res){ res.on('data',function(chunk){ reqData +=chunk; }); res.on('end',function(){ console.log(reqData); }); }).end();

 

瀏覽器中的顯示效果:

相關文章
相關標籤/搜索