Nodejs:HTTP模块

144 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第5天

Node.js标准库提供了http模块,其中封装了一个高效的HTTP服务器http.sever和一个简易的HTTP客户端http.request。

HTTP服务器

http.Server是一个基于事件的HTTP服务器。http.server的使用很广泛,用Nodejs做的所有基于HTTP协议的系统,如网站、社交应用甚至代理服务器,都是基于http.server 实现的。

http.Server的事件

http.Server提供了以下几个事件:

request:当客户端请求到来时,该事件被发起,提供两个参数 req 和res,分别是http.ServerRequest 和http.ServerResponse的实例,表示请求和响应信息。

connection:当 TCP连接建立时,该事件被触发,提供一个参数 socket,为net .Socket 的实例。

close:当服务器关闭时,该事件被触发。

除此之外还有 checkContinue、upgrade、clientError 事件,具体可以查阅API文档,这里不做介绍

http.ServerRequest

http.ServerRequest是一个对象,是HTTP请求的信息。它一般由http.server的request事件发送,作为第一个参数传递,通常简称request或req。ServerRequest 提供一些属性。

HTTP请求一般可以分为两部分:请求头(Request Header)和请求体(Requset Body)。

为了解决请求体的传输问题,http.ServerRequest提供了以下3个事件用于控制请求体传输。

data:当请求体数据到来时,该事件被触发。该事件提供一个参数chunk,chunk表示接收到的数据。如果该事件没有被监听,那么请求体将会被抛弃。该事件可能会被调用多次。

end :当请求体数据传输完成时,该事件被触发,此后将不会再有数据到来。

close:用户当前请求结束时,该事件被触发。注意,如果用户强制终止了传输,也还是调用close。

ServerRequest的其他属性:

complete:客户端请求是否已经发送完成。

method:HTTP请求方法。

url:请求路径

headers:HTTP请求头

trailers:HTTP请求尾

connection:当前HTTP连接套接字,为 net.Socket的实例

socket:connection属性的别名

client:client 属性的别名