zoukankan      html  css  js  c++  java
  • [IIS]修改MaxFieldLength与MaxRequestBytes彻底解决Request Too Long的问题

    当 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_MACHINESystemCurrentControlSetServicesHTTPParameters)中的两个参数 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_MACHINESystemCurrentControlSetServicesHTTPParameters ,

    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

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

    转载:https://www.cnblogs.com/dudu/archive/2012/08/26/iis_request_too_long_maxrequestbytes.html

  • 相关阅读:
    OI数学知识清单
    线段树入门教程
    扩展欧几里得定理基础讲解 代码及证明
    名字竞技场 V3.0
    可持久化线段树(主席树)新手向教程
    矩阵乘法浅析
    [Luogu] P1233 木棍加工
    高斯消元 模板
    位运算技巧
    [ZJOJ] 5794 2018.08.10【2018提高组】模拟A组&省选 旅行
  • 原文地址:https://www.cnblogs.com/csj007523/p/15267614.html
Copyright © 2011-2022 走看看