# IIS 请求过滤、上传限制与超时：413/504 到底卡在哪

> 有意识地调整 IIS 请求限制、上传大小、URL/头限制和超时，并区分 413、404.13 与 504。

**测试环境**

- 版本号: 26100.33650
- 版本: Standard / Datacenter
- 架构: x64
- 证据: E1
- 核验日期: 2026-10-29

## 一句话结论

三种限制，三种症状：

| 症状 | 层 | 设置 |
|---|---|---|
| 上传 **413.1** / 连接重置 | 请求过滤 | `maxAllowedContentLength` |
| **404.13** | 请求过滤 | 处理器内容长度限制 |
| **404.15** | 请求过滤 | 查询串限制 |
| **400** / 错误请求 | HTTP.sys | URL/头大小、Host 格式 |
| **504** | 代理/应用超时 | ARR/ANCM/应用超时 |
| 上传慢/断开 | HTTP.sys | `minBytesPerSecond`、`connectionTimeout` |

不要把每个限制都改成“无限制”。每个都是 DoS 控制。

## 请求过滤

```xml
<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 请求。

## 验证

```powershell
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` 和失败请求跟踪。

> **警告: 限制不是授权**
>
> 放大上传限制不会让上传接口变安全。校验内容类型、扩展名、大小，并把上传存到可执行 Web 根之外。

## 常见错误

- 改了 `maxAllowedContentLength`，应用自己的限制还是 30MB。
- 为一个慢报表把 `requestTimeout` 设 24 小时。
- 为了“修”404.13 关掉请求过滤。
- 忘了反代的 `client_max_body_size`/ARR 限制。
- 调试时记录整个请求体。

## 实验室边界

E1。实验室没有制造 413/504，也没有改这些限制；命令和状态表是 Server 2025 的验证计划。

## 来源

- [Microsoft Learn — 请求过滤](https://learn.microsoft.com/zh-cn/iis/configuration/system.webserver/security/requestfiltering/)
- [Microsoft Learn — 请求限制](https://learn.microsoft.com/zh-cn/iis/configuration/system.webserver/security/requestfiltering/requestlimits/)
- [Microsoft Learn — serverRuntime](https://learn.microsoft.com/zh-cn/iis/configuration/system.webserver/serverruntime/)

---

来源页面: https://winbook.fyi/zh/server/web/iis-request-limits/
