写一个基于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

浙公网安备 33010602011771号