cnzz统计分析编码引发的Bad Request

2021-02-23 13:38 admin

难题诱因

今日1位网友向大家意见反馈,用Chrome开启一些blog文章内容时,会出現"Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long."的不正确网页页面:

用IE, Firefox都没难题,惟有Chrome。

以前大家遇到过1次这样的难题,那时候认为是不经意要素引发的Chrome难题,因而在"%LOCALAPPDATA%\Google\"中将Chrome的配备文档重取名,让Chrome复建配备,处理了难题。

今日,这个难题再度出現,就不可以忽略了,务必找出难题的真实缘故并寻找处理方法。

处理全过程

刚开始大家推断,将会是一些缘故导致Chrome传出的恳求头包括过量內容。查询Chrome恳求的网站地址是一切正常的,也没发现Request Header的出现异常。既然没在Chrome寻找难题的缘故,那大家从服务端着手吧,恳求长就长1点,要是能让客户看到一切正常的內容。

服务端IIS到底在哪儿个地区回到这个不正确的?刚开始认为是Request Filtering Module,调剂了Request Limits设定不可以处理难题,禁用Request Filtering Module也处理不上难题。

后来在IIS官方论坛的帖子HTTP 400. The size of the request headers is too long中获知,这个不正确是Http.sys回到的,恳求头长度限定是由申请注册表HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters中的两个主要参数决策的:MaxFieldLength与MaxRequestBytes,缺省值全是16384字节,详见Http.sys registry settings for IIS。

因为改动这两个设定必须重新启动IIS(net stop http, net start http, iisreset),而且只是表层上处理难题,因此大家沒有马上采用这个方式。又转过头来在Chrome中查询恳求头,忽然发现cookie的值好长。

进1步查询cookie:

许多cnzz_eid,这是cnzz统计分析编码造成的,但是大家在blog中沒有应用cnzz。可是,有的客户blog自身加了cnzz的统计分析编码。大家查验了1些会造成"Bad Request - Request Too Long"的网页页面,确实一些加了cnzz的编码。

大家手动式在Chrome中删掉了1些带有cnzz_eid的cookie,难题就处理了。

原先是cnzz惹的祸!

为何在IE与Firefox中不容易出現这个难题呢?

将会是IE与Firefox针对request header太长的恳求会全自动断开;而Chrome对此无动于衷。

小结

这篇文章内容共享的內容是:当IIS回到"Bad Request - Request Too Long. HTTP Error 400. The size of the request headers is too long."的不正确时,表明顾客端传出的恳求头长度超过了Http.sys的限定,这个限定是由申请注册表"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters"中的两个主要参数MaxFieldLength与MaxRequestBytes决策的,默认设置值是16384字节。