Understanding Axios maxBodyLength in Node.js
The maxBodyLength setting in Axios defines the maximum
allowed size, in bytes, for an HTTP request body sent from a Node.js
environment. This article explains the purpose of the
maxBodyLength configuration, how it protects application
resources, how it differs from similar settings like
maxContentLength, and how to adjust or remove this limit
when transmitting large payloads such as file uploads.
Purpose of maxBodyLength
When running in Node.js, Axios uses Node's native http
and https modules to dispatch requests. The
maxBodyLength option acts as a safeguard that restricts the
size of the outgoing request payload.
By default, Axios sets maxBodyLength to 10MB
(10 * 1024 * 1024 bytes). If an application attempts to
send a request with a body exceeding this threshold, Axios intercepts
the operation before the data is fully transmitted and throws an
error:
AxiosError: Request body larger than maxBodyLength limit
Why the Limit Exists
The primary purpose of maxBodyLength is resource
management and security:
- Memory Protection: Buffering large files or large JSON payloads directly in memory can lead to excessive heap allocation, causing Node.js processes to slow down or crash due to "Out of Memory" errors.
- Accidental Upload Prevention: It prevents client applications from inadvertently sending massive datasets over the network.
- Control Over Client Limits: It gives developers explicit control over acceptable request sizes before initiating network operations.
maxBodyLength vs. maxContentLength
Axios provides two distinct configurations for controlling payload sizes in Node.js:
maxBodyLength(Outgoing Request): Restricts the maximum size of the request payload sent to the server.maxContentLength(Incoming Response): Restricts the maximum size of the response payload received from the server (also defaulting to 10MB).
How to Configure maxBodyLength
You can modify maxBodyLength at the request level,
globally, or when creating an Axios instance.
1. Increase the Limit for a Specific Request
To allow larger payloads for a single request, such as a 50MB file upload:
const axios = require('axios');
const fs = require('fs');
const fileStream = fs.createReadStream('large-video.mp4');
axios.post('https://example.com/upload', fileStream, {
headers: {
'Content-Type': 'video/mp4',
},
maxBodyLength: 50 * 1024 * 1024, // 50MB
})
.then(response => console.log(response.data))
.catch(error => console.error(error));2. Remove the Limit Entirely
If your application regularly streams files of unpredictable sizes,
you can set the value to Infinity to bypass the check:
axios.post('https://example.com/upload', largeDataStream, {
maxBodyLength: Infinity,
maxContentLength: Infinity,
});3. Set a Global or Instance-Level Limit
If all requests across an Axios instance require higher limits,
specify it in axios.create():
const apiClient = axios.create({
baseURL: 'https://api.example.com',
maxBodyLength: Infinity,
maxContentLength: Infinity,
});