Skip to content

Latest commit

 

History

History
255 lines (192 loc) · 7.21 KB

43.modulo_http_do_node.md

File metadata and controls

255 lines (192 loc) · 7.21 KB

O módulo http do Node.js

Índice

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.

Propriedades

http.METHODS

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' ]

http.STATUS_CODES

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' }

http.globalAgent

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.

Métodos

http.createServer()

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.
});

http.request()

Faz uma solicitação HTTP para um servidor, criando uma instância da classe http.ClientRequest.

http.get()

Semelhante ao http.request(), mas define automaticamente o método HTTP como GET e chama req.end() automaticamente.

Classes

O módulo HTTP fornece 5 classes:

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

http.Agent

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.

http.ClientRequest

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.

http.Server

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.

http.ServerResponse

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') retorna true se a resposta tiver esse cabeçalho definido.
  • headersSent() retorna true 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';

http.IncomingMessage

Um objeto http.IncomingMessage é criado por:

  • http.Server ao ouvir o evento de request.
  • http.ClientRequest ao ouvir o evento de response.

Ele pode ser usado para acessar a resposta:

  • status usando seus métodos statusCode e statusMessage.
  • headers usando seu método headers ou rawHeaders.
  • 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.