
@[TOC](IIS 6/7/7.5 收到的请求头的长度超过16K(默认值),就会引发"Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long."的错误。)
# 问题原因
```
代码写入大量的cookie,请求时会携带着这些cookie,从而造成请求头长度超过限制。
```
本来以为这个问题只在Chrome中出现,后来有园友反馈Firefox也会出现这个问题。所以,要解决这个问题,必须从服务器端下手,这篇文章分享的就是如何从服务器端下手。
# 何处下手
根据IIS官方论坛的帖子(HTTP 400. The size of the request headers is too long),16K的请求头/请求长度限制由是注册表(HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters)中的两个参数 MaxFieldLength(请求头) 与 MaxRequestBytes(请求头与请求体) 决定的。所以,要从这两个参数下手。
# 了解下手的对象
通过微软官方文档(http://support.microsoft.com/kb/820129)进一步了解
```
MaxRequestBytes与MaxFieldLength:
MaxFieldLength - Sets an upper limit for each header.
```
用于设置每一个请求头的字节数上限(默认16K)。
```
MaxRequestBytes - Determines the upper limit for
the total size of the Request line and the headers.
```
用于设置请求行(请求体)与请求头的总字节数上限(默认16K)。
# 如何下手 设置注册表
下手也就是调整 MaxFieldLength 与 MaxRequestBytes 的值(这里假设将这两个值修改为32K),并使其生效。
运行regedit,进入 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters ,
```
1. 添加类型为 DWORD(32-bit)、名为 MaxFieldLength、值为十进制32768的项目;
2. 添加类型为 DWORD(32-bit)、名