修改MaxFieldLength与MaxRequestBytes彻底解决Request Too Long的问题_win服务器

当 IIS7/7.5 收到的请求头的长度超过16K(默认值),就会引发"Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long."的错误。

博客园服务器曾遭遇过这个问题,我为此写过一篇博文(cnzz统计代码引起的Bad Request - Request Too Long),问题的原因是第三方统计服务cnzz的统计代码写入大量的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)、名为 MaxRequestBytes、值为十进制32768的项目。

添加好了,如何让它们生效呢?最简单的方法就是重启,可是对于服务器,最不想做的就是重启。

还好,微软官方文档中提到了不重启的解决方法,需要运行四个命令:

复制代码 代码如下:

net stop http
net start http
net stop iisadmin /y
net start servicename

但是第3个命令 net stop iisadmin 会停用IIS相关的所有服务,第4个命令要将IIS相关的所有服务一个一个启动。
虽然不需要重启服务器,但是这四个命令的解决方案我不喜欢。。。在网上也没找到更好的解决方法。。。
后来,通过摸索,找到了一个更简单的方法,只需三个命令:

复制代码 代码如下:

net stop http
net start http
iisreset

这个方法已经在服务器上通过实际验证。

小结

搞技术的乐趣之一就是在遇到问题时能够找到自己心目中想要的解决方法,心目中想要的解决方法不是它已在你心中,而是当它出来时,你心中会知道 —— 就是它!
生活中也是一样,你心目中的那个人,你无法准确地描述出来,当她/他出现时,你心中会知道 —— 就是她/他。

时间: 2016-01-24

修改MaxFieldLength与MaxRequestBytes彻底解决Request Too Long的问题_win服务器的相关文章

IIS进程回收导致定时器失效的解决方法(CMD命令)_win服务器

公司开发的网站使用的.net,网站中用到了定时器,放在Global.asax.cs文件中,但由于IIS设置了网站进程定期回收,回收后定时器也就没了.如果不让进程回收,又担心程序中有内存泄露.有人说可以在Application_End发起HTTP请求,但这样做和设置不让进程回收没有任何区别,结果就是该进程一直运行,只有保证不存在内存泄露才可以这样做.也有人说可以用Windows Service,对这个不了解,所以这招放弃了.最后想到了一个方法,编写脚本命令(这里用DOS命令)访问网站,再通过Win

Provider错误80004005终极解决方法(完全有效的方法)_win服务器

IIS设置好之后打开ASP网站时总提示: Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005' [Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x728 Thread 0x854 DBC 0x276fb44 Jet', **********************************

w3wp.exe占用cpu过高的解决方法第1/2页_win服务器

iisapp.vbs:IIS 应用程序查询脚本 报告为特定的应用程序池提供服务且当前正在运行 w3pwp.exe 进程的进程标识符 (PID). 语法 iisapp [a/ AppPoolName | /p AppPoolID] 参数 /a AppPoolName 指定特定应用程序池的名称.(可选项) /p AppPoolID 按 ID 号指定应用程序池.(可选项) 注释 如果未指定应用程序池名或 ID,则 iisapp 列出所有运行应用程序. 仅当使用 /s 时,才可使用 /u 和 /p 命令

JSP用过滤器解决request getParameter中文乱码问题_JSP编程

(1)客户端的数据一般是通过HTTP GET/POST方式提交给服务器,在服务器端用request.getParameter()读取参数时,很容易出现中文乱码现象. (2)用过滤器解决request中文乱码问题. (3)代码如下: package my; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ChineseFilter implements Filter { //定义

注册表被修改的原因分析和解决方法

注册表被修改的原因分析和解决方法: 其实,该恶意网页是含有有害代码的ActiveX网页文件,这些广告信息的出现是因为浏览者的注册表被恶意更改的结果. 1.IE默认连接首页被修改 IE浏览器上方的标题栏被改成"欢迎访问******网站"的样式,这是最常见的篡改手段,受害者众多. 受到更改的注册表项目为: HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMainStart Page HKEY_CURRENT_USERSoftwareM

C# ComboBox控件“设置 DataSource 属性后无法修改项集合”的完美解决方法_C#教程

由于毕业后工作没有对接到专业问题,导致四五年没有碰过Winform程序了.突然由于工作问题,为了方便自己,所以想自己写写小winform小软件,用于自己使用.在使用ComboBox控件时,遇到了重新绑定赋值出问题的情况. 错误代码如下: if (CustomerBLL.select().Rows.Count > 0) { cbTcid.Items.Clear(); cbTcid.DataSource = CustomerBLL.select(); cbTcid.ValueMember = "

安卓开发 post方法-各位大神帮我解决下安卓用post方法向服务器传值,状态输出以及下面的输出都没有打印

问题描述 各位大神帮我解决下安卓用post方法向服务器传值,状态输出以及下面的输出都没有打印 private void postValues (JSONObject param) throws ClientProtocolException, IOException{ String url = "http://app.taosame.com/index.php/user/login.html"; System.out.println(url); HttpPost request = n

Windows Server 2003 启动中常见错误的解决方法_win服务器

摘要:在Windows Server 2003启动过程中,会出现各种各样的问题,本文介绍了操作系统启动过程的几个阶段,收集了一些经常出现的错误,并结合 Windows 操作系统启动过程,针对这些错误提出了解决方法. 当诊断一个系统启动错误时,判断系统是在哪一阶段出现错误非常关键,系统启动过程根据 CPU 架构不同略微有些差异,下面我们简单介绍一下 x86-based 系统启动过程的几个阶段: 1. Pre-Boot Sequence 2. Boot Sequence 3. Kernel Load

IIS6 ASP 页的执行造成响应缓冲区超过其配置限制的解决方法_win服务器

Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 此 ASP 页的执行造成响应缓冲区超过其配置限制. 因为页面中数据较多,有上千条,导致出现"超过响应缓冲区限制.此 ASP 页的执行造成响应缓冲区超过其配置限制". 如果 response.buffer=false这样设的话,可以查出,但是好慢.怎么解决? 我们可以加大Buffer的缓冲区,办法是:先在服务里关闭iisadminservice服务. 找到 windows\system32\in