nodejs中的http模块封装了一个http服务器模块和一个简易的http客户端。node
http.Server是一个基于事件的http服务器数组
http.request是http客户端工具,用于向http服务器发起请求服务器
而http.createServer方法中的函数参数req和res分别表明请求对象和响应对象。socket
req是http.incomingMessage的实例函数
res是http.ServerResponse的实例工具
1、http服务器编码
1).http.Server对象
http.Server是一个基于事件的服务器,继承自EventEmitter,提供以下事件:继承
request:当客户端请求到来时,该事件被触发,提供两个参数res和req,表示响应信息和请求信息,是最经常使用的事件事件
connection:当TCP链接创建时,该事件被触发,提供一个socket参数,是net.Socket的实例
close:当服务器关闭时,触发事件
2).http.incomingMessage
是HTTP请求的信息,通常由http.Server的request事件发送,并做为第一个参数传递,http请求通常能够分为两部分:请求头和请求体,并提供以下三个事件
1.data:当请求体数据到来时,该事件被触发,提供一个参数chunk,表示接受的数据,若是该事件没有被监听,则请求体会被抛弃,该事件有可能会被屡次调用
2.end:当请求体数据传输完毕时,该事件会被触发,,此后不会再有数据
3.close:当用户请求结束时,该事件被触发,不一样于end,若是强制终止传输,也会触发close
3).http.ServerResponse
是返回给客户端的信息,决定了用户最终看到的信息,通常由http.Server的request事件发送,并做为第二个参数传递,他有三个重要的成员函数,用于返回响应头,响应内容及结束请求。
res.writeHead(statusCode,[heasers]):向请求的的客户端发送响应头,该函数在一个请求中最多调用一次,若是不调用,则会自动生成一个响应头
res.write(data,[encoding]):向请求的客户端发送响应内容,data是一个buffer或者字符串,若是data是字符串,这须要定制编码方式,默认为"utf-8",在res.end调用以前能够屡次调用
res.end([data],[encoding]):结束响应,告知客户端全部发送已经结束,当全部要返回的内容发送完毕时,该函数必须被调用一次,两个可选参数与res.write()相同
2、http客户端
1.http.request(options,callback)
options是一个相似关联数组的对象,表示请求的参数,callback做为回调函数,须要传递一个参数,为http.ClientResponse的实例,http.request返回一个http.ClientRequest的实例
2.http.get(options, callback)
是http.request的简化版
3.http.ClientRequest
http.ClientRequest是由http.request或http.get返回产生的对象,表示一个已经产生且正在进行中的HTTP请求,提供一个response事件,就是咱们使用http.get和http.request方法中的回调函数所绑定的对象。
4.http.ClientResponse
与http.ServerRequest相似