O módulo nativo HTTP é um módulo chave para a rede Node.js.
Pode ser utilizado usando:
const http = require('http');
O módulo fornece algumas propriedades e métodos, e algumas classes.
Essa propriedade lista todos os métodos HTTP suportados:
> 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' ]
Essa propriedade lista todos os códigos de status HTTP e suas descrições:
> 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' }
Aponta para a instância global do objeto Agent, que é uma instância da classe http.Agent
.
Ele é usado para gerenciar a persistência e a reutilização de conexões para clientes HTTP e é um componente chave de rede HTTP Node.js.
Mais informações na descrição da classe http.Agent
adiante.
Retorna uma nova instância da classe http.Server
.
Utilização:
const server = http.createServer((req, res) => {
// manipula qualquer requisição simples com esse callback.
});
Faz uma solicitação HTTP para um servidor, criando uma instância da classe http.ClientRequest
.
Semelhante ao http.request()
, mas define automaticamente o método HTTP como GET e chama req.end()
automaticamente.
O módulo HTTP fornece 5 classes:
http.Agent
http.ClientRequest
http.Server
http.ServerResponse
http.IncomingMessage
O Node.js cria uma instância global da classe http.Agent
para gerenciar a persistência e a reutilização de conexões para clientes HTTP, um componente chave da rede HTTP Node.js.
Esse objeto garante que todas as solicitações feitas a um servidor sejam enfileiradas e um único soquete seja reutilizado.
Ele também mantém um pool de soquetes. Isso é fundamental por razões de desempenho.
Um objeto http.ClientRequest
é criado quando http.request()
ou http.get()
é chamado.
Quando uma resposta é recebida, o evento de resposta (response
event) é chamado com a resposta, com uma instância http.IncomingMessage
e como argumento.
Os dados retornados de uma resposta podem ser lidos de 2 maneiras:
- você pode chamar o método
response.read()
. - no event handler você pode configurar um event listner para o
data
event, para que possa ouvir os dados transmitidos.
Essa classe geralmente é instanciada e retornada ao criar um novo servidor usando http.createServer()
.
Depois de ter um objeto de servidor, você tem acesso aos seus métodos:
close()
impede o servidor de aceitar novos conexões.listen()
inicia o servidor HTTP e escuta as conexões.
Criado por um http.Server
e passado como o segundo parâmetro para o evento de solicitação (request
) que ele dispara.
Comumente conhecido e usado no código como res
:
const server = http.createServer((req, res) => {
// res é um objeto http.ServerResponse
});
O método que você sempre chamará no handler é end()
, que fecha a resposta, a mensagem está completa e o servidor pode enviá-la ao cliente. Deve ser chamado em cada resposta.
Estes métodos são usados para interagir com cabeçalhos HTTP:
getHeaderNames()
obtém a lista dos nomes dos cabeçalhos HTTP já definidos.getHeaders()
obtém uma cópia dos cabeçalhos HTTP já definidos.setHeader('headername', value)
define um valor de cabeçalho HTTP.getHeader('headername')
obtém um cabeçalho HTTP já definido.removeHeader('headername')
remove um cabeçalho HTTP já definido.hasHeader('headername')
retornatrue
se a resposta tiver esse cabeçalho definido.headersSent()
retornatrue
se os cabeçalhos já foram enviados ao cliente.
Depois de processar os cabeçalhos, você pode enviá-los ao cliente chamado response.writeHead()
, que aceita o statusCode
como o primeiro parâmetro, a mensagem de status opcional e o objeto headers.
Para enviar dados ao cliente no corpo da resposta, use write()
. Ele enviará dados em buffer para o fluxo de resposta HTTP.
Se os cabeçalhos ainda não foram enviados usando response.writeHead()
, ele enviará os cabeçalhos primeiro, com o código de status e a mensagem definidos na request
, que você pode editar definindo os valores das propriedades statusCode
e statusMessage
:
response.statusCode = 500;
response.statusMessage = 'Internal Server Error';
Um objeto http.IncomingMessage
é criado por:
http.Server
ao ouvir o evento derequest
.http.ClientRequest
ao ouvir o evento deresponse
.
Ele pode ser usado para acessar a resposta:
- status usando seus métodos
statusCode
estatusMessage
. - headers usando seu método
headers
ourawHeaders
. - HTTP method usando seu método
method
. - HTTP version usando o método
httpVersion
. - URL usando o método
url
. - socket subjacente usando o método
socket
.
Os dados são acessados usando streams, pois http.IncomingMessage
implementa a interface Readable Stream.