在Node.js的核心模块中主要有http、fs、url、querystring模块,在前面的博文中有一篇已经介绍了url模块,在上一篇博文中http模块使用到过,在这篇博文中我将详细分析其方法和原理。html
使用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服务器发起请求。上面的req和res分别为http.IncomingMessage和http.ServerResponse。性能
http.Server的事件主要有ui
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
所以,我将把上面提到的知识点融合到上面第一个服务器的代码中。
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是返回客户端的信息,其经常使用的方法为:
这些方法在上面的代码中已经实现。
在上面的方法中都是HTTP模块在服务端的使用,接下来看看客户端的使用,向HTTP服务器发起
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();
浏览器中的显示效果: