使用 HTTP 服务器或客户端功能必须调用 require('http')。 Node 里的 HTTP 接口支持协议里原本比较难用的特性。特别是很大的或块编码的消息。这些接口不会完全缓存整个请求或响应,这样用户可以在请求或响应中使用数据流。 HTTP消息头对象和下面的例子类似: - { 'content-length': '123',
- 'content-type': 'text/plain',
- 'connection': 'keep-alive',
- 'host': 'mysite.com',
- 'accept': '*/*' }
复制代码Keys 都是小写,值不能修改。 为了能支持尽可能多的 HTTP 应用程序,Node 提供的 HTTP API 接口都是底层的。仅能处理流和消息。它把消息解析成报文头和报文体,但是不解析实际的报文头和报文体内容。 定义报文头的时候,多个值间可用 , 分隔。除了 set-cookie 和 cookie 头,因为它们表示值的数组。诸如 content-length 的只有一个值的报文头,直接解析,并且只有单值可以表示成已经解析好的对象。 接收到的原始头信息以数组([key, value, key2, value2, ...])的形式保存在 rawHeaders 里。例如,之前提到的消息对象会有如下的 rawHeaders: - [ 'ConTent-Length', '123456',
- 'content-LENGTH', '123',
- 'content-type', 'text/plain',
- 'CONNECTION', 'keep-alive',
- 'Host', 'mysite.com',
- 'accepT', '*/*' ]
复制代码 http.METHODS解析器支持的 HTTP 方法列表。 http.STATUS_CODES全部标准 HTTP 响应状态码的和描述的集合。例如,http.STATUS_CODES[404] === 'Not Found'。 http.createServer([requestListener])requestListener 函数自动加到'request' 事件里。 http.createClient([port][, host])类: http.Server事件: 'request'function (request, response) { } 事件: 'connection'function (socket) { } 当建立新的 TCP 流的时候。 socket 是一个 net.Socket 对象。通常用户不会访问这个事件。协议解析器绑定套接字时采用的方式使套接字不会出发 readable 事件。也能通过 request.connection 访问 socket。 事件: 'close'function () { } 服务器关闭的时候触发。 事件: 'checkContinue'function (request, response) { } 当 http 收到 100-continue 的 http 请求时会触发。如果没有监听这个事件,服务器将会自动发送 100 Continue 的响应。 注意:触发并处理这个事件的时候,不会再触发 request 事件。 事件: 'connect'function (request, socket, head) { } 当客户端请求 http 连接时触发。如果没有监听这个事件,客户端请求连接的时候会被关闭。 - request 是 http 请求的参数,与 request 事件参数相同。
- socket 是服务器和客户端间的 socket。
- head 是 buffer 的实例。网络隧道的第一个包,可能为空。
这个事件触发后,请求的 socket 不会有 data 事件监听器,也就是说你需要绑定一个监听器到 data 上,来处理在发送到服务器上的 socket 数据。 事件: 'upgrade'function (request, socket, head) { } 当客户端请求 http upgrage 时候会触发。如果没有监听这个事件,客户端请求一个连接的时候会被关闭。 - request 是 http 请求的参数,与 request 事件参数相同。
- socket 是服务器和客户端间的 socket。
- head 是 buffer 的实例。网络隧道的第一个包,可能为空。
这个事件触发后,请求的 socket 不会有 data 事件监听器,也就是说你需要绑定一个监听器到 data 上,来处理在发送到服务器上的 socket 数据。 事件: 'clientError'function (exception, socket) { } 如果一个客户端连接触发了一个 'error' 事件, 它就会转发到这里. socket 是导致错误的 net.Socket 对象。
|