node01-http模块
用node搭建一个简单的服务器
http协议:浏览器和服务器之间的通讯协议;
浏览器发出请求,服务器接受请求并且响应返回数据.
相关基础:
TCP的三次握手:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器(请求建立联机),并且进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器接受到syn包,并且确认客户端的SYN(ack=j+1),同时自己也发送一个syn(syn=k)包(确认包),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端接受到服务器的SYN+ACK包,想服务器发送确认包ACK(ack=k+1),此包发送完毕,服务器和客户端进入ESTABLISHED状态,建立起可靠的双工连接,开始传送数据.
一次完整的浏览器请求过程:
域名解析--->
发起TCP的3次握手--->
建立TCP连接后发起http请求(GET方法,请求的URL是/,协议是HTTP/1.0)--->
服务器响应http请求,浏览器得到html代码--->
浏览器解析HTML包,并且解析代码中的资源(html,css,js,图片...)--->
浏览器对页面进行渲染呈现给用户
完整介绍:http://www.jianshu.com/p/fbe0e9fa45a6
http模块
1.是什么?
一个用来搭建http服务的模块,http模块封装了一个HTTP服务器和一个简易的HTTP客户端.http.Server是一个基于事件的http服务器,http.request则是一个http客户端工具,用于向服务器发起请求.
2.如何使用?
用法1:
//引用模块
const http=require("http");
//创建服务器
var server=http.createServer(function(req,res){
//接受和处理请求
res.write();
res.end();
})
//监听端口,服务器根据端口号判断客户端的需求,并提供相应的服务(web,邮件,数据库)
server.listen(8080);
上面函数中的参数req和res分别代表了请求对象和响应对象,req是http.IncomingMessage的实例,而res是http.ServerResponse的实例.
用法2:
const http=require("http");
var server=new Http.Server();
server.on("request",function(res,req){
res.writeHead(200,{
"content-type":"text/plain"
});
res.write("hello nodejs");
res.end();
});
server.listen(3000);
上述代码中直接创建了一个http.Server对象,
并为其添加了request事件监听.
由于http.Server是一个基于事件的服务器,她是继承自EventEmitter,实际上node中的大部分模块都是继承自EventEmitter,这就是为什么node是基于事件驱动的.
http.Server的事件:
request事件:当客户端发送请求来是,该事件触发并执行回调函数,函数提供2个参数req和res.
connection事件:当TCP连接建立时触发,并执行回调, 提供一个参数socket,是一个net.Socket的实例
close事件:当服务器关闭时触发(不是用户和服务器断开连接时)
浙公网安备 33010602011771号