IIS托管Angular应用分号格式长URL触发400错误求根因
IIS托管Angular应用的URL分号参数长度限制问题
浏览器通常支持长度达2K的查询字符串,但我们发现托管于IIS的Angular应用,当URL仅使用分号格式传递键值对参数且长度超约350字符时,就会直接返回400(Bad Request)错误,请求根本无法到达Angular应用。该错误的返回格式和应用池停止时的503(Service Unavailable)错误格式一致。
故障触发条件
- 非localhost环境(localhost下无此问题)
- 使用分号(
;)格式传递键值对查询参数 - 子域名、域名及顶级域名长度无限制
- URL总长度不超过2000字符
- 可同时存在
?&格式参数,但总长度仍需≤2000字符 - 站点由IIS托管
示例对比
错误400示例(构造)
https://citations.venteksys.com/search;metu=santemaximusleo;idpharetranuncarcuegetlorem=Nuncdignissimerosneque;veleuismodnequeblanditvitae=Namconsectetursedmassaape;llentesque=Maecenasliguladui;cursussedsc=elerisqueeget;gravidaacerat=Nullautaliquet;tellus=Curabitureleifendmis;edcommodovehicula=Suspend;issepotenti=Donecorcienim;hendreriteg=etviverraeget;efficiturutnibh=Pellentesquefauci;busvariusturpisquisdapibus=Duisiaculisfelisseddolorcursus
成功200示例(缩短分号参数长度)
https://citations.venteksys.com/search;metu=santemaximusleo;idpharetranuncarcuegetlorem=Nuncdignissimerosneque;veleuismodnequeblanditvitae=Namconsectetursedmassaape;llentesque=Maecenasliguladui;cursussedsc=elerisqueeget;gravidaacerat=Nullautaliquet;tellus=Curabitureleifendmis
成功200示例(改用?&格式参数)
https://citations.venteksys.com/search?metu=santemaximusleo&idpharetranuncarcuegetlorem=Nuncdignissimerosneque&veleuismodnequeblanditvitae=Namconsectetursedmassaape&llentesque=Maecenasliguladui&cursussedsc=elerisqueeget&gravidaacerat=Nullautaliquet&tellus=Curabitureleifendmis&edcommodovehicula=Suspend&issepotenti=Donecorcienim&hendreriteg=etviverraeget&efficiturutnibh=Pellentesquefauci&busvariusturpisquisdapibus=Duisiaculisfelisseddolorcursus
已尝试的排查操作
- 逐步缩短URL长度直至获得200响应
- 切换为
?&格式参数后请求成功 - 尝试使用路由定义的超长路径属性加载,结果如预期失败
疑问
我猜测IIS可能存在子文件夹名称长度限制,且将分号分隔的URL部分视为完整路径段,而非像?&格式那样识别为查询参数。此猜测是否成立?该问题的根本原因是什么?
内容的提问来源于stack exchange,提问作者Jessel Aquing
相关产品推荐
相关产品推荐

