教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

HTTP模块常用的API有几个?

更新时间:2021年12月02日10时26分 来源:传智教育 浏览次数:

好口碑IT培训

HTTP服务器本质上也是一个Socket服务器,可以理解为在Socket服务器的基础上进行了一些封装,简化了一些操作。本节将对HTTP模块提供的API进行详细介绍。

1. http.Server

在Node.js中,HTTP服务器是指http.Server对象,用Node.js做的所有基于HTTP协议的系统,如网站、社交应用甚至代理服务器,都是基于http.Server实现的。它提供了一套封装级别很低的API,仅仅是流控制和简单的消息解析,所有的高层功能都要通过它的接口来实现。创建http.Server对象的语法如下:

    Var server = http.createServer();

在上述代码中,使用creatServer()函数创建的server对象就是一个http.Server对象。

http.Server是一个基于事件的HTTP服务器,继承自EventEmitter,所有的请求都被封装为独立的事件,开发者只需要对它的事件编写相应函数即可实现HTTP服务器的所有功能。http.Server提供了一些函数,具体如下:

(1)server.close([callback]):服务器停止已经开始的监听。

(2) server.listen(port[, hostname][, backlog][, callback])。

server.listen参数说明如下:

●port:指定监听的端口。

● hostname:指定主机名。

●backlog:指定被允许进行排队的最大待处理连接数,默认是511。

●callback:指定该服务器已经开始在指定的端口上监听时,要执行的回调处理函数。

(3))server listen(handle[,callback])和server.listen(path[,callback]):监听文件系统的连接。第一个是监听已打开文件描述句柄,第二个是要监听一个文件的路径。除此之外,http.Server 还提供了3个事件,具体如下:

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

(2)connection:当TCP连接建立时,该事件被触发,提供一个参数socket,为net.Socket 的实例。connection事件的粒度要大于request,因为客户端在Keep-Alive模式下可能会在同一个连接内发送多次请求。

(3)close:当服务器关闭时,该事件被触发。注意不是在用户连接断开时。除此之外,还有checkContinue、upgrade、clientError事件,通常不需要关心,只有在实现复杂的HTTP服务器时才会用到。


2. http.IncomingMessage 对象

在HTTP 服务器和客户端都会创建http.IncomingMessage对象,它一般由http.Server的request事件发送,作为第一个参数传递,通常简称为request或req。在发送HTTP 请求时,会发送请求报文,http.IncomingMessage对象实现了一个可读流,在服务器端,http.IncomingMessage 提供了一个close 事件,用户当前请求结束时,也就是底层的套接字被关闭时该事件被触发。另外,http.IncomingMessage对象中还提供了一些函数和属性,用来获取客户端请求和服务器端响应的一些信息,如下表所示。

表7-2 http.IncomingMessage 对象的常用函数和属性

函数&属性

说明

message.headers

包含了随请求/回应发送的标头的一个对象

message.httpVersion

指定用于构建客户端请求/响应的HTTP版本

message.setTimeout(msccs, callback)

设置连接的以毫秒为单位的套接字超时时间,连同一个如果发生超时时被执行的回调函数

message.method

指定用于请求/响应的方法

message. statusCode

指定来自服务器的3位数状态码。此属性只在处理服务器响应的HTTP客户端上有效

message.socket

这是一个指向net.Socket对象的句柄,用来与客户端/服务器通信

message.url

发送到服务器的URL字符串,只在处理服务器中有效


3. http.ServerResponse

htp.ServerResponse是返回给客户端的信息,决定了用户最终能看到的结果。它也是由http.Server的request事件发送的,作为第二个参数传递,一般简称为response或res。

http.ServerResponse是一个可写流,用来给客户端的Socket发送响应报文,在服务器做出响应之前会发送响应报文,http.ServerResponse中有3个重要的成员函数,前两个用于返回对应响应报文的响应头和响应内容,最后一个用于结束请求,具体如下:

(1)response.writeHead(statusCode,[headers]):向请求的客户端发送响应头。status-Code是HTTP状态码,如200(请求成功)、404(未找到)等。headers是一个类似关联数组的对象,表示响应头的每个属性。该函数在一个请求内最多只能调用一次,如果不调用,则会自动生成一个响应头。

(2)response.write(data,[encoding]):向请求的客户端发送响应内容。data是一个Buffer或字符串,表示要发送的内容。如果data是字符串,那么需要指定encoding来说明它的编码方式,默认是utf-8。在response.end 调用之前,response.write可以被多次调用。

(3)response.end([data],[encoding]):结束响应,告知客户端所有发送已经完成。当所有返回的内容发送完毕时,该函数必须被调用一次。它接收两个可选参数,意义和response.write相同。如果不调用该函数,客户端将永远处于等待状态。除上述成员函数外,还有一些函数和属性可供开发者使用,如表7-3所示。

表7-3 http.ServerResponse其他函数和属性

函数&属性

说明

response.add Trailers(headers)

将HTTP尾随标头写人响应的结束处

response.finished

默认为false,调用end)的数方法后结果为 true

response.getHeader(name)

获取已在响应中设置的HTTP标头的值

response.headersSent

如果标头已被发送,为true;否则为false

response.removeHeader(name)

移除已在响应中设置的一个HTTP标头

response.sendDate

如果设置为true,则Data标头的是自动生成的,并作为响应的一部分发送

response.setHeader(name, value)

设置一个特定的标头值

response.setTimeout(msecs, callback)

设置客户端连接的套接字超时时间,以毫秒计,带有一个如果发生超时将被执行的回调函数

response.statusCode

无须显式地写入标头来指定响应状态码

response.statusMessage

当使用隐式消息头并且游息头被刷新时,这个属性控制的消息状态将被发送到客户端

response.writeContinueO

发送一个HTTP/1.1100继续消息给客户端,表示请求主体应该发送

 

猜你喜欢:

HTTP通信机制中的一次完整通信过程的7个步骤

HTTPS使用什么加密方式?对称加密还是非对称加密?

HTTP的工作原理:工作过程可以分为哪几步?

什么是HTTP协议?如何查看HTTP消息?

传智教育HTML+前端开发培训

0 分享到:
和我们在线交谈!