Azure App Service长POST请求返回413 Payload Too Large如何调整配置解决
问题现象
本地发送长POST请求无异常,向部署在Azure App Service的API发送携带超长请求体(实测请求体长度超过约10万字符时触发)的POST请求时,会收到413 Payload Too Large响应,本次异常请求携带的是较长的HTML字符串,请求体长度低于10万字符时请求均能正常响应。
无论从应用端调用接口还是使用Postman测试均能复现该问题,报错截图如下:
经过排查可排除应用本身配置问题,判断为Azure App Service平台侧默认限制导致。
可调整的平台配置项
根据App Service的托管环境不同,对应调整方式如下:
1. Windows 托管的 App Service(基于IIS)
默认请求体上限为30MB左右,你可以通过在项目根目录添加web.config文件调整限制:
<configuration> <system.web> <!-- 单位为KB,这里设置为100MB,可按需调整 --> <httpRuntime maxRequestLength="102400" /> </system.web> <system.webServer> <security> <requestFiltering> <!-- 单位为字节,这里设置为100MB,需和上面的配置保持一致 --> <requestLimits maxAllowedContentLength="104857600" /> </requestFiltering> </security> </system.webServer> </configuration>
配置文件发布到App Service后重启实例即可生效。
2. Linux 托管/容器化的 App Service
若使用Nginx作为反向代理
默认请求体上限为1MB,你可以通过自定义Nginx配置调整:
在Nginx配置的http、server或者对应接口的location段添加如下配置:
# 单位为M,这里设置为100MB,可按需调整 client_max_body_size 100M;
修改配置后重启Nginx服务即可生效。
若使用ASP.NET Core 原生托管
修改Program.cs文件,添加请求体大小限制配置:
builder.Services.Configure<Microsoft.AspNetCore.Http.Features.FormOptions>(options => { options.MultipartBodyLengthLimit = 104857600; // 100MB,单位为字节 }); // 可指定仅目标接口调整大小限制,避免全局放开带来的安全风险 app.UseWhen(context => context.Request.Path.StartsWithSegments("/api/目标接口路径"), appBuilder => { appBuilder.Use(async (context, next) => { var maxBodySizeFeature = context.Features.Get<Microsoft.AspNetCore.Http.Features.IHttpMaxRequestBodySizeFeature>(); if (maxBodySizeFeature != null) { maxBodySizeFeature.MaxRequestBodySize = 104857600; } await next.Invoke(); }); });
其他可行解决方案
- 拆分请求:如果请求体是可拆分的内容,可以将长HTML字符串拆分为多个片段,通过多个请求分批上传,服务端再拼接还原
- 压缩请求体:前端将超长HTML字符串用gzip等方式压缩后上传,服务端接收后解压处理,可大幅降低请求体实际传输大小
- 存储中转:先将长HTML内容上传到Azure Blob Storage等存储服务,再将文件地址通过请求发送给API,API从存储服务拉取内容处理,适合请求体特别大的场景
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

