IIS 10.0访问短URL返回414.0 URL Too Long错误求解决
排查与解决步骤
- 检查HTTP.sys内核级URL限制
你配置的FRT没有生成日志,说明请求在进入IIS用户态处理管道之前就被内核层的HTTP.sys拦截返回了414,这部分配置不读取站点web.config,需要修改系统注册表:
打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters,新增两个DWORD值:MaxUrlLength:十进制值设为65535,支持最大64KB的URL长度UrlSegmentMaxLength:十进制值设为4096,默认值为260,若URL的任意一段路径超过260字符就会被拦截,哪怕整体URL长度很短
修改完成后执行命令net stop http && net start http,再执行iisreset重启IIS生效。
- 检查静态文件处理程序专属配置
你之前修改的httpRuntime节点配置默认仅作用于ASP.NET托管请求(例如aspx页面走的托管处理程序),js/css/txt这类静态文件默认走IIS原生的StaticFileModule,不受httpRuntime配置约束:
打开IIS管理器,找到对应站点→处理程序映射→找到StaticFile处理程序,右键选择「请求限制」,在「URL」选项卡确认「最大URL长度(字节)」的配置和你web.config里的requestLimits配置一致,没有额外的路径限制。 - 确认UNC共享路径的规则限制
你的站点物理路径用的是SMB共享的Azure文件存储路径,IIS访问UNC路径时会自动拼接虚拟路径生成完整的访问路径,可能触发额外的路径限制:
可以临时把测试js文件放到站点本地磁盘根目录,用短路径访问测试,如果访问正常,说明是UNC路径映射的限制,需要开启系统长路径支持:定位到注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,把LongPathsEnabled的DWORD值设为1,重启服务器生效。 - 排查前置中间件篡改请求
确认你的请求是否经过WAF、CDN、反向代理等中间服务,部分中间服务会给静态资源请求自动追加超长的查询参数(如缓存标识、跟踪参数),实际到达服务器的URL远长于你本地测试的URL,可以在服务器上用Wireshark抓包,确认实际收到的请求URL完整内容。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

