Node http模块

Node.js的http模块提供有用的功能和类来构建HTTP服务器

HTTP核心模块是Node网络的关键模块。

可以使用

const http = require('http')

该模块提供了一些属性和方法以及一些类。

特性

http.METHODS

此属性列出了所有受支持的HTTP方法:

> require('http').METHODS
[ 'ACL',
  'BIND',
  'CHECKOUT',
  'CONNECT',
  'COPY',
  'DELETE',
  'GET',
  'HEAD',
  'LINK',
  'LOCK',
  'M-SEARCH',
  'MERGE',
  'MKACTIVITY',
  'MKCALENDAR',
  'MKCOL',
  'MOVE',
  'NOTIFY',
  'OPTIONS',
  'PATCH',
  'POST',
  'PROPFIND',
  'PROPPATCH',
  'PURGE',
  'PUT',
  'REBIND',
  'REPORT',
  'SEARCH',
  'SUBSCRIBE',
  'TRACE',
  'UNBIND',
  'UNLINK',
  'UNLOCK',
  'UNSUBSCRIBE' ]

http.STATUS_CODES

此属性列出了所有HTTP状态代码及其描述:

> require('http').STATUS_CODES
{ '100': 'Continue',
  '101': 'Switching Protocols',
  '102': 'Processing',
  '200': 'OK',
  '201': 'Created',
  '202': 'Accepted',
  '203': 'Non-Authoritative Information',
  '204': 'No Content',
  '205': 'Reset Content',
  '206': 'Partial Content',
  '207': 'Multi-Status',
  '208': 'Already Reported',
  '226': 'IM Used',
  '300': 'Multiple Choices',
  '301': 'Moved Permanently',
  '302': 'Found',
  '303': 'See Other',
  '304': 'Not Modified',
  '305': 'Use Proxy',
  '307': 'Temporary Redirect',
  '308': 'Permanent Redirect',
  '400': 'Bad Request',
  '401': 'Unauthorized',
  '402': 'Payment Required',
  '403': 'Forbidden',
  '404': 'Not Found',
  '405': 'Method Not Allowed',
  '406': 'Not Acceptable',
  '407': 'Proxy Authentication Required',
  '408': 'Request Timeout',
  '409': 'Conflict',
  '410': 'Gone',
  '411': 'Length Required',
  '412': 'Precondition Failed',
  '413': 'Payload Too Large',
  '414': 'URI Too Long',
  '415': 'Unsupported Media Type',
  '416': 'Range Not Satisfiable',
  '417': 'Expectation Failed',
  '418': 'I\'m a teapot',
  '421': 'Misdirected Request',
  '422': 'Unprocessable Entity',
  '423': 'Locked',
  '424': 'Failed Dependency',
  '425': 'Unordered Collection',
  '426': 'Upgrade Required',
  '428': 'Precondition Required',
  '429': 'Too Many Requests',
  '431': 'Request Header Fields Too Large',
  '451': 'Unavailable For Legal Reasons',
  '500': 'Internal Server Error',
  '501': 'Not Implemented',
  '502': 'Bad Gateway',
  '503': 'Service Unavailable',
  '504': 'Gateway Timeout',
  '505': 'HTTP Version Not Supported',
  '506': 'Variant Also Negotiates',
  '507': 'Insufficient Storage',
  '508': 'Loop Detected',
  '509': 'Bandwidth Limit Exceeded',
  '510': 'Not Extended',
  '511': 'Network Authentication Required' }

http.globalAgent

指向Agent对象的全局实例,该实例是http.Agent班级。

它用于管理HTTP客户端的连接持久性和重用,它是Node HTTP网络的关键组成部分。

更多内容http.Agent稍后对类进行描述。

方法

http.createServer()

返回一个新的实例http.Server班级。

用法:

const server = http.createServer((req, res) => {
  //handle every single request with this callback
})

http.request()

向服务器发出HTTP请求,并创建一个实例http.ClientRequest班级。

http.get()

如同http.request(),但会自动将HTTP方法设置为GET并调用req.end()自动地。

班级

HTTP模块提供5个类:

  • http.Agent
  • http.ClientRequest
  • http.Server
  • http.ServerResponse
  • http.IncomingMessage

http.Agent

节点创建一个全局实例http.Agent类,用于管理HTTP客户端(Node HTTP网络的关键组件)的连接持久性和重用。

该对象确保对服务器的每个请求都排队,并且单个套接字被重用。

它还维护一个套接字池。出于性能原因,这是关键。

http.ClientRequest

一个http.ClientRequest对象何时创建http.request()或者http.get()叫做。

收到回应后,response通过响应调用事件http.IncomingMessage实例作为参数。

可以通过两种方式读取响应的返回数据:

  • 你可以打电话给response.read()方法
  • 在里面response事件处理程序,您可以为data事件,因此您可以侦听流进其中的数据。

http.Server

通常使用创建新服务器时实例化并返回该类。http.createServer()

拥有服务器对象后,就可以访问其方法:

  • close()阻止服务器接受新连接
  • listen()启动HTTP服务器并监听连接

http.ServerResponse

由创建http.Server并作为第二个参数传递给request一旦发生火灾。

众所周知并在代码中用作res

const server = http.createServer((req, res) => {
  //res is an http.ServerResponse object
})

您将始终在处理程序中调用的方法是end(),它会关闭响应,消息已完成,服务器可以将其发送给客户端。必须在每个响应上调用它。

这些方法用于与HTTP标头进行交互:

  • getHeaderNames()获取已设置的HTTP标头的名称列表
  • getHeaders()获取已设置的HTTP标头的副本
  • setHeader('headername', value)设置HTTP标头值
  • getHeader('headername')获取已设置的HTTP标头
  • removeHeader('headername')删除已经设置的HTTP标头
  • hasHeader('headername')如果响应中设置了该标头,则返回true
  • headersSent()如果标头已经发送到客户端,则返回true

处理标头后,您可以通过调用将其发送给客户端response.writeHead(),它接受statusCode作为第一个参数,可选的状态消息和标头对象。

要将数据发送到响应正文中的客户端,请使用write()。它将缓冲的数据发送到HTTP响应流。

如果尚未发送标题,请使用response.writeHead(),它将首先发送标头,以及请求中设置的状态代码和消息,您可以通过设置statusCodestatusMessage属性值:

response.statusCode = 500
response.statusMessage = 'Internal Server Error'

http.IncomingMessage

一个http.IncomingMessage对象是由以下人员创建的:

  • http.Server当听request事件
  • http.ClientRequest当听response事件

它可以用来访问响应:

  • 使用其状态statusCodestatusMessage方法
  • 标头使用其headers方法或rawHeaders
  • HTTP方法使用method方法
  • HTTP版本使用httpVersion方法
  • 使用网址url方法
  • 底层套接字使用socket方法

使用流访问数据,因为http.IncomingMessage实现Readable Stream接口。

免费下载我的Node.js手册


更多节点教程: