修改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服务器的相关文章

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

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

安卓开发 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

百度ueditor怎么修改图片上传路径(可以存储在单独的图片服务器么,不存储在项目根目录下)?

问题描述 百度ueditor怎么修改图片上传路径(可以存储在单独的图片服务器么,不存储在项目根目录下)? 百度ueditor怎么修改图片上传路径(可以存储在单独的图片服务器么,不存储在项目根目录下)? 解决方案 当然可以,找到保存文件的地方,路径参数改为局域网共享那种地址 192.168.1.xxxxxxx也可以保存,要记得给everyone写入权限 然后图片服务器也要安装iis,配置一个二级域名用来加载图片,修改ueditor image插件js的文件中返回的图片路径为二级域名的路径 解决方案

win8系统下hosts文件修改后无法保存的解决方法

  Hosts文件即hosts. Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析.这是一个非常特别的软件,所以在访问一些国外网站时往往要求修改hosts,但有用户反映修改后根本保存不了,所以今天小编就为

电脑系统时间无法修改的原因及怎么解决

  一.系统时间无法修改是什么原因 造成系统时间无法修改的原因有很多,一般有以下几种. 1.用户无操作权限 有时我们系统超级管理员设置了一些用户是普通用户,而我们登陆的用户就是使用了这些无权限的用户,所以就不能进进行修改系统时间了. 2.电脑主板电池没电 如果我们的电脑主板电池没电了这样一般是会出现时间日期丢失情况,即使我们更改了保存后重新关机后日期仍然无效,这样同样造成系统时间无法修改. 3.电脑系统中毒 如果我们的电脑系统中毒了也有可能造成系统时间无法修改. 二.系统时间无法修改解决方法 根

CentOS 7下修改MySQL5.6编码方式 解决网站中文显示问号

解决办法: CentOS 7下修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操作: 1.进入MySQL控制台 mysql  -u root -p 输入密码 查看当前mysql运行状态 mysql>status 后面四个编码是我在修改之后,所以显示utf-8:默认编码是latin1. 2.修改mysql配置文件 默认位置:/etc/my.cnf 进入etc文件夹>>vim my.cnf 图片是我添加设置后的. * 我的mysql没有

Vista中无法修改Hosts或Lmhosts如何解决

问:在 Microsoft Windows Vista中尝试更改Hosts文件或Lmhosts文件时,会收到以下两条错误消息中的任意一条. 错误消息 1 拒绝访问 C:\Windows\System32\drivers\etc\ hosts 错误消息 2 不能创建文件 C:\Windows\System32\drivers\etc\hosts. 请确认路径和文件名是否正确. 即使使用拥有管理凭据的帐户登录,也会出现此问题.请问如何解决呢? 答:其实解决这个问题的方法很简单,你只须要在管理员的身份

Win7无法修改账号密码要怎么解决?

  1.依次点击"开始/控制面板"菜单,在打开的控制面板窗口中点击"系统和安全"图标. 2.在打开的系统和安全窗口中点击"系统工具"快捷链接. 3.在打开的窗口中找到"计算机管理",点击"计算机管理"快捷链接. 4.在打开的计算机管理窗口点击左侧的"本地用户和组",在弹出的菜单中点击"用户"菜单项,右侧窗口就可以看到Administration账号了. 5.双击右侧的

Win7无法修改账号密码要怎么解决

  1.依次点击"开始/控制面板"菜单,在打开的控制面板窗口中点击"系统和安全"图标. 2.在打开的系统和安全窗口中点击"系统工具"快捷链接. 3.在打开的窗口中找到"计算机管理",点击"计算机管理"快捷链接. 4.在打开的计算机管理窗口点击左侧的"本地用户和组",在弹出的菜单中点击"用户"菜单项,右侧窗口就可以看到Administration账号了. 5.双击右侧的

win7系统下无法修改网络位置的的解决方法

  现在年轻人对于电脑安全是非常重视的,连接无线网络往往是现在的年轻人最方便使用网络的一种方式,对网络设置安全也就成了当务之急.在家中我们连接家庭网络,在公共场合我们连接公用,如果我们不进行网络位置设置就很有可能给不法分子留下可乘之机,危害我们的电脑安全,所以网络位置设置的最大好处便是可以为所连接网络的类型自动设置适当的防火墙设置,保证我们电脑系统的安全.但是最近有用户反映win7旗舰版电脑无法对网络位置进行设置,下面就请跟随小编看看解决方法吧. win7系统下网络位置设置方法 1.首先,我们单