HTTP 413 错误(Payload Too Large / Request Entity Too Large)解决方法大全
HTTP 413 错误表示客户端请求的负载(payload)太大,服务器拒绝处理。通常发生在上传大文件、POST 大量数据(如 JSON、表单)时。服务器默认有限制(如 Nginx 1MB、IIS 30MB),超出即报错。
常见原因
- 服务器配置限制请求体大小(最常见)。
- 代理(如 Cloudflare、CDN)或反向代理限制。
- PHP 配置限制(upload_max_filesize / post_max_size)。
- WCF/ASP.NET 特定限制。
- SSL 握手时预读缓冲区太小(IIS 常见)。
通用客户端解决方法(如果你是用户,非服务器管理员)
- 压缩文件:用 ZIP 或图像压缩工具减小大小。
- 分块上传:如果应用支持,将大文件分成小块上传。
- 检查浏览器:清除缓存、试其他浏览器(Chrome 有时缓存旧限制)。
- 联系管理员:如果是第三方服务(如 API、网站),报告问题。
服务器端解决方法(按常见服务器分类)
1. Nginx(最常见)
- 编辑主配置文件
/etc/nginx/nginx.conf(或站点配置)。 - 在
http {}、server {}或location {}块中添加/修改:client_max_body_size 100M; # 根据需求调整,如 100M、500M 或 0(无限制) - 保存后测试配置:
nginx -t - 重启 Nginx:
systemctl restart nginx
2. Apache
- 编辑主配置文件
/etc/httpd/conf/httpd.conf或站点 .conf 文件。 - 添加/修改:
LimitRequestBody 104857600 # 单位字节,如 100MB = 104857600,0 为无限制 - 或在 .htaccess 文件中添加相同指令。
- 重启 Apache:
systemctl restart httpd
3. IIS(Windows Server)
- 编辑 web.config 文件:
<system.web> <httpRuntime maxRequestLength="102400" /> <!-- KB 单位,如 100MB --> </system.web> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="104857600" /> <!-- 字节单位 --> </requestFiltering> </security> </system.webServer> - 对于 SSL 站点,可能需调整 uploadReadAheadSize(服务器级):
- 用 appcmd:
appcmd set config /section:system.webServer/serverRuntime /uploadReadAheadSize:104857600
- 用 appcmd:
- 重启 IIS 或应用池。
4. PHP 配置(常与 Nginx/Apache/IIS 结合)
- 编辑 php.ini:
upload_max_filesize = 100M post_max_size = 100M memory_limit = 128M # 至少大于 post_max_size - 重启 Web 服务器/PHP-FPM。
5. Cloudflare 或其他 CDN/代理
- 检查 Cloudflare 仪表盘 → Network → Maximum Upload Size,增大或关闭。
- 或绕过代理(灰云 DNS)。
其他注意事项
- 单位换算:1M = 1048576 字节。
- 测试:修改后,用 curl 测试:
curl -X POST -d @largefile http://your-site - 安全:不要无限制增大(设 0),易遭 DoS 攻击,建议合理值(如 50-500MB)。
- 日志检查:查看服务器日志定位具体限制。
- WordPress 等 CMS:额外在 wp-config.php 或 functions.php 调整上传限制。
大多数情况下,调整服务器的 client_max_body_size(Nginx)或 maxAllowedContentLength(IIS)即可解决。如果你是服务器管理员,按以上步骤操作;否则压缩数据或求助管理员。问题解决后,上传应正常!如果有具体服务器类型,欢迎提供更多细节。