The Node http module
The http module of Node.js provides useful functions and classes to build an HTTP server
The HTTP core module is a key module to Node networking.
It can be included using
const http = require('http')
The module provides some properties and methods, and some classes.
Properties
http.METHODS
This property lists all the HTTP methods supported:
> 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
This property lists all the HTTP status codes and their description:
> 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
Points to the global instance of the Agent object, which is an instance of the http.Agent class.
It’s used to manage connections persistance and reuse for HTTP clients, and it’s a key component of Node HTTP networking.
More in the http.Agent class description later on.
Methods
http.createServer()
Return a new instance of the http.Server class.
Usage:
const server = http.createServer((req, res) => {
//handle every single request with this callback
})
http.request()
Makes an HTTP request to a server, creating an instance of the http.ClientRequest class.
http.get()
Similar to http.request(), but automatically sets the HTTP method to GET, and calls req.end() automatically.
Classes
The HTTP module provides 5 classes:
http.Agenthttp.ClientRequesthttp.Serverhttp.ServerResponsehttp.IncomingMessage
http.Agent
Node creates a global instance of the http.Agent class to manage connections persistance and reuse for HTTP clients, a key component of Node HTTP networking.
This object makes sure that every request made to a server is queued and a single socket is reused.
It also maintains a pool of sockets. This is key for performance reasons.
http.ClientRequest
An http.ClientRequest object is created when http.request() or http.get() is called.
When a response is received, the response event is called with the response, with an http.IncomingMessage instance as argument.
The returned data of a response can be read in 2 ways:
- you can call the
response.read()method - in the
responseevent handler you can setup an event listener for thedataevent, so you can listen for the data streamed into.
http.Server
This class is commonly instantiated and returned when creating a new server using http.createServer().
Once you have a server object, you have access to its methods:
close()stops the server from accepting new connectionslisten()starts the HTTP server and listens for connections
http.ServerResponse
Created by an http.Server and passed as the second parameter to the request event it fires.
Commonly known and used in code as res:
const server = http.createServer((req, res) => {
//res is an http.ServerResponse object
})
The method you’ll always call in the handler is end(), which closes the response, the message is complete and the server can send it to the client. It must be called on each response.
These methods are used to interact with HTTP headers:
getHeaderNames()get the list of the names of the HTTP headers already setgetHeaders()get a copy of the HTTP headers already setsetHeader('headername', value)sets an HTTP header valuegetHeader('headername')gets an HTTP header already setremoveHeader('headername')removes an HTTP header already sethasHeader('headername')return true if the response has that header setheadersSent()return true if the headers have already been sent to the client
After processing the headers you can send them to the client by calling response.writeHead(), which accepts the statusCode as the first parameter, the optional status message, and the headers object.
To send data to the client in the response body, you use write(). It will send buffered data to the HTTP response stream.
If the headers were not sent yet using response.writeHead(), it will send the headers first, with the status code and message that’s set in the request, which you can edit by setting the statusCode and statusMessage properties values:
response.statusCode = 500
response.statusMessage = 'Internal Server Error'
http.IncomingMessage
An http.IncomingMessage object is created by:
http.Serverwhen listening to therequesteventhttp.ClientRequestwhen listening to theresponseevent
It can be used to access the response:
- status using its
statusCodeandstatusMessagemethods - headers using its
headersmethod orrawHeaders - HTTP method using its
methodmethod - HTTP version using the
httpVersionmethod - URL using the
urlmethod - underlying socket using the
socketmethod
The data is accessed using streams, since http.IncomingMessage implements the Readable Stream interface.
download all my books for free
- javascript handbook
- typescript handbook
- css handbook
- node.js handbook
- astro handbook
- html handbook
- next.js pages router handbook
- alpine.js handbook
- htmx handbook
- react handbook
- sql handbook
- git cheat sheet
- laravel handbook
- express handbook
- swift handbook
- go handbook
- php handbook
- python handbook
- cli handbook
- c handbook
subscribe to my newsletter to get them
Terms: by subscribing to the newsletter you agree the following terms and conditions and privacy policy. The aim of the newsletter is to keep you up to date about new tutorials, new book releases or courses organized by Flavio. If you wish to unsubscribe from the newsletter, you can click the unsubscribe link that's present at the bottom of each email, anytime. I will not communicate/spread/publish or otherwise give away your address. Your email address is the only personal information collected, and it's only collected for the primary purpose of keeping you informed through the newsletter. It's stored in a secure server based in the EU. You can contact Flavio by emailing flavio@flaviocopes.com. These terms and conditions are governed by the laws in force in Italy and you unconditionally submit to the jurisdiction of the courts of Italy.