写一个基于http.sys的web server碰到一个url返回400错误 其它URL不会

URL地址:

http://www.37a.cn/xjs/_/js/k=xjs.s.zh_CN.UyvhaAaVwLg.O/m=sy31,sy37,em3,em2,sy39,em0,sy249,aa,abd,sy63,sy62,sy61,sy64,em14,async,sy3,sy237,sy466,sy1,sy5,sy43,sy467,sy500,sy20,sy501,dvl,sy66,foot,fpe,idck,ipv6,sy127,sy250,lu,m,sf,sy206,sy207,sy46,sy35,sy118,sy208,sy209,sy47,sy105,sy137,sy210,sy265,sy266,sy263,sy203,sy264,sy96,sy271,sy212,sy267,sy281,em9,em10,sy36,sy97,em13,em11,em8,em12,sy282,skp,sy174,sy140,sy175,sy71,sy34,sy121,sy187,sy226,sy154,sy229,sy153,sy122,sy186,sy227,sy230,sy232,sy224,spch,vs,sy74,sy75,sy77,sy79,sy70,sy72,sy76,sy80,sy67,sy73,sy78,sy81,sy68,tnv,apmf,sy483,sbbl,apml,me,sy93,sy94,atn/am=AEqaBYNE_OEPAsIWwgFBYsAIFg0/rt=j/d=0/t=zcms/rs=ACT90oG9Gv6cjHiCwanXdRgEpYl6OjaKtA

错误信息:

我在自己写的web server服务器里打印所有接收到的URL请求,发现居然没有这个URL,也就是说根本没接收到。

so 原因可能在于底层的http.sys有坑了。

折腾了一会,猜测可能是URL中有特殊字符或者超过长度约束,看了一下没什么很特殊的字符,所以就是长度限制的问题。

这个URL将近700个字符!!

解决办法:

注册表 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

没有键值的时候默认是260个字符

为什么是260个字符限制呢?通过查找,原来是因为windows的物理路径限制了260个字符,所以默认情况下,url的虚拟路径(斜线内字符)也限定了260

 

 

关于默认值,在微软的这个页面可以找到:

https://support.microsoft.com/zh-cn/kb/820129

 

posted @ 2016-04-25 19:38  kpzdev  阅读(628)  评论(0)    收藏  举报