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
指向代理对象的全局实例,它是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.Agenthttp.ClientRequesthttp.Serverhttp.ServerResponsehttp.IncomingMessage
http.Agent
Node创建了一个http.Agent 类的全局实例来管理HTTP客户端的连接持久性和重复使用,这是Node HTTP网络的一个关键组成部分。
这个对象确保每一个向服务器发出的请求都是排队的,并且一个套接字被重复使用。
它还维护一个套接字池。这是性能方面的关键。
http.ClientRequest
当http.request() 或http.get() 被调用时,会创建一个http.ClientRequest 对象。
当收到一个响应时,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')如果响应中设置了该头信息,则返回trueheadersSent()如果头信息已经被发送到客户端,则返回true。
在处理完头信息后,你可以通过调用response.writeHead() ,将它们发送给客户端,它接受 statusCode 作为第一个参数、可选的状态信息和头信息对象。
要在响应体中向客户端发送数据,你可以使用write() 。它将发送缓冲的数据到HTTP响应流中。
如果使用response.writeHead() ,还没有发送头信息,它将首先发送头信息,其中的状态代码和信息是在请求中设置的,你可以通过设置statusCode 和statusMessage 属性值来编辑。
response.statusCode = 500
response.statusMessage = 'Internal Server Error'
http.IncomingMessage
一个http.IncomingMessage 对象是由创建的。
http.Server当监听 事件时requesthttp.ClientRequest当监听 事件时response
可以用它来访问响应。
- 使用它的
statusCode和statusMessage方法访问状态 - 使用它的
headers方法访问头文件,或rawHeaders - HTTP方法,使用其
method方法 - 使用
httpVersion方法的HTTP版本 - 使用
url方法的URL - 使用
socket方法的底层套接字
数据使用流来访问,因为http.IncomingMessage 实现了可读流接口。