当 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

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

小结

搞技术的乐趣之一就是在遇到问题时能够找到自己心目中想要的解决方法,心目中想要的解决方法不是它已在你心中,而是当它出来时,你心中会知道 —— 就是它!

生活中也是一样,你心目中的那个人,你无法准确地描述出来,当她/他出现时,你心中会知道 —— 就是她/他。

[IIS]修改MaxFieldLength与MaxRequestBytes彻底解决Request Too Long的问题相关推荐

  1. 计算机应用程序池在哪,win10系统iis修改站点的应用程序池权限的详细方案

    有关win10系统iis修改站点的应用程序池权限的操作方法想必大家有所耳闻.但是能够对win10系统iis修改站点的应用程序池权限进行实际操作的人却不多.其实解决win10系统iis修改站点的应用程序 ...

  2. sp3无法安装IIS或者IIS安装进度条不动的解决方法

    无法正常安装IIS或安装好后无法正常浏览ASP网页(500错误)或修改权限后仍出现需输入密码却仍无法显示. ---------------------------------------------- ...

  3. Linux6.x修改出eth0网卡的解决方法

    Linux6.x修改出eth0网卡的解决方法 参考文章: (1)Linux6.x修改出eth0网卡的解决方法 (2)https://www.cnblogs.com/puloieswind/p/5855 ...

  4. 解决request中文乱码问题

    解决request中文乱码问题 参考文章: (1)解决request中文乱码问题 (2)https://www.cnblogs.com/wangguoning/p/6151517.html 备忘一下.

  5. 解决request.getSession().getServletContext().getRealPath(“/“)为null问题

    解决request.getSession().getServletContext().getRealPath("/")为null问题 参考文章: (1)解决request.getS ...

  6. IIS网站无法播放视频的解决方法

    IIS网站无法播放视频的解决方法 参考文章: (1)IIS网站无法播放视频的解决方法 (2)https://www.cnblogs.com/lichu-lc/p/10031150.html 备忘一下.

  7. .NET Core 2.2 IIS网站出现HTTP503无法访问解决方法

    .NET Core 2.2 IIS网站出现HTTP503无法访问解决方法 .NET Core 2.2 Runtime在未联网服务器上安装完成后,IIS所有网站都出现 HTTP 503无法访问的情况. ...

  8. pip安装遇到警告which is not on PATH 不修改site.py也可解决

    太长不看可以直接翻到最后看解决方法. 正常安装python,pip有时候会遇到: WARNING: The scripts pip.exe, pip3.7.exe and pip3.exe are i ...

  9. 无root 修改/usr/lib/x86_64-linux-gnu/libstdc 解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: v

    无root 修改/usr/lib/x86_64-linux-gnu/libstdc 解决ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: v ...

最新文章

  1. 爱奇艺效果广告的个性化探索与实践
  2. 什么是交换(Swap)与伪交换(Pseudo swap)
  3. hadoop集群配置与启动
  4. Java实现List中某个对象属性中的字符串参数首字母进行排序
  5. 计算机应用乘法,计算机系统原理(十) 二进制整数的乘法运算和除法运算
  6. UITableViewCell 选中的状态小技巧
  7. css 奇淫技巧 行内快 父级padding 子级margin 抵消
  8. chrome鼠标手势_Chrome插件推荐——第一弹
  9. 菜刀php教程,Weevely(php菜刀)工具使用详解
  10. tensorflow学习笔记1:batch normalization 用法
  11. 中国能源统计年鉴资源网站
  12. GoFrame带你从0-1快速入门
  13. 常见问题数组索引越界异常
  14. Profinet 协议
  15. 左室短轴切面_心脏超声常用切面与解剖.pptx
  16. 《Level up》书评
  17. 童玲:蚂蚁金服区块链在真实业务场景的实践与突破
  18. R语言用Rshiny探索lme4广义线性混合模型(GLMM)和线性混合模型(LMM)
  19. 如何修改服务器远程登录密码
  20. API-fox 接口神器

热门文章

  1. mysql join order by_MySQL 14 慢查询优化join、order by、group by
  2. doxygen 注释规范_编程规范 - doxygen注释规范示例(C++)
  3. 大数据在企业IT的应用
  4. docker中安装mycat
  5. JavaScript初学者编程题(12)
  6. php网站怎么伪静态,php怎么实现网页伪静态
  7. 【MySQL】数据库2- MySQL表的增删改查(基础)
  8. HDU3949(线性基算法模版)
  9. 关于学习Python的一点学习总结(51)
  10. 矩阵连乘算法代码JAVA_矩阵连乘问题的动态规划算法(java)