为何Next.js/Vercel拒绝处理1.5MB大小的请求体?
Vercel拒绝1.5MB请求体排查(已配置Next.js 4.5MB限制)
可能的原因及解决方向
1. Vercel平台限制优先于Next.js配置
Vercel的Serverless函数(Next.js API路由默认采用该运行方式)有独立的请求体限制,即便官方文档标注上限4.5MB,仍可能出现以下情况:
- 部分边缘节点未同步最新限制规则
- 套餐层级存在更严格的临时限制
- 直接查看Vercel控制台的函数错误日志,确认是否是
Payload too large类的明确提示,这能快速定位问题核心
2. Next.js配置未实际生效
- 确认
next.config.js放在项目根目录,且部署时该文件被正确上传(避免.gitignore误排除) - 检查目标API路由是否有局部配置覆盖全局设置:比如在路由文件中添加了
export const config = { api: { bodyParser: ... } },会优先于全局配置 - 重新触发Vercel部署,确保配置变更被应用
3. 请求体实际大小超出预期
- 注意请求编码方式:比如
multipart/form-data格式会额外增加边界符、字段描述等内容,1.5MB的原始数据编码后可能超过Vercel实际限制 - 用Chrome开发者工具的Network面板查看请求的
Content-Length,确认实际发送的大小
4. 边缘函数的额外限制
如果API路由被配置为Edge Function(比如添加了runtime: 'edge'),其请求体限制会比Serverless函数更低,检查路由文件是否有相关配置
快速排查步骤
- 查看Vercel函数日志,获取具体错误信息
- 在本地开发环境测试相同的1.5MB请求,确认本地是否能正常处理
- 临时将Next.js的
sizeLimit调高至5mb,重新部署后测试 - 用工具确认实际发送的请求体大小
相关配置与代码
Next.js全局配置(next.config.js)
/** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, api: { bodyParser: { sizeLimit: "4.5mb", // Set desired value here }, }, }; module.exports = nextConfig;
API路由代码
import axios from "axios"; import type { NextApiRequest, NextApiResponse } from "next"; import { connectToDatabase } from "../../lib/connectToDatabase"; export default async function insertOne( req: NextApiRequest, res: NextApiResponse ) { const { body } = req; const { mongoClient } = await connectToDatabase(); const db = mongoClient.db("datamapper"); const collection = db.collection("team"); const teamId = req.query.teamShortId as string; const field = req.query.field as string; // TODO: Handle teamId also try { await collection.updateOne( { teamId: teamId }, { $push: { [`${field}`]: body, }, $set: { updatedAt: new Date(), }, }, { upsert: true } ); } catch (e) { console.error(e); } res.status(200).end(); }
内容的提问来源于stack exchange,提问作者János
相关产品推荐
相关产品推荐

