IIS 请求过滤、上传限制与超时:413/504 到底卡在哪
有意识地调整 IIS 请求限制、上传大小、URL/头限制和超时,并区分 413、404.13 与 504。
测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 任务
三种限制,三种症状:
| 症状 | 层 | 设置 |
|---|---|---|
| 上传 413.1 / 连接重置 | 请求过滤 | maxAllowedContentLength |
| 404.13 | 请求过滤 | 处理器内容长度限制 |
| 404.15 | 请求过滤 | 查询串限制 |
| 400 / 错误请求 | HTTP.sys | URL/头大小、Host 格式 |
| 504 | 代理/应用超时 | ARR/ANCM/应用超时 |
| 上传慢/断开 | HTTP.sys | minBytesPerSecond、connectionTimeout |
不要把每个限制都改成“无限制”。每个都是 DoS 控制。
<system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="104857600" maxUrl="4096" maxQueryString="2048" /> <fileExtensions allowUnlisted="true" /> </requestFiltering> </security></system.webServer>maxAllowedContentLength 单位是字节(上面 100MB)。旧 ASP.NET maxRequestLength 单位是 KB,只作用于 ASP.NET 请求,不要混。
还要查处理器级限制(ASP.NET maxRequestLength、maxJsonLength)和反代 body 限制。
- HTTP.sys/连接:
connectionTimeout、headerWaitTimeout、minBytesPerSecond。 - IIS 请求:
serverRuntime requestTimeout(默认 00:02:00),长上传/导出可能要加。 - 应用池:空闲超时不是请求超时;它停空闲工作进程。
- ARR/ANCM/应用:上游超时;504 是前端等到放弃。
按最慢的合法请求设超时,不要“为了让 504 消失”设 30 分钟。长报表应该异步,不是长 HTTP 请求。
Get-WebConfigurationProperty -PSPath 'MACHINE/WEBROOT/APPHOST' ` -Filter 'system.webServer/security/requestFiltering/requestLimits' -Name '.'
curl.exe -I -H "Content-Length: 200000000" http://lab.local/upload用略低于/略高于限制的文件测;查 IIS 日志 sc-status/sc-substatus 和失败请求跟踪。
- 改了
maxAllowedContentLength,应用自己的限制还是 30MB。 - 为一个慢报表把
requestTimeout设 24 小时。 - 为了“修”404.13 关掉请求过滤。
- 忘了反代的
client_max_body_size/ARR 限制。 - 调试时记录整个请求体。
E1。实验室没有制造 413/504,也没有改这些限制;命令和状态表是 Server 2025 的验证计划。