环境:
操作系统:Windows Server 2019
IIS版本:10
问题
试用Nocobase的时候,遇到400 Bad Request的报错。
直接访问的话,报错页面是非常常见的Runtime Error。
诡异
这个问题,在开发端(Windows 11)的IIS中不会出现。同样的IIS版本。
解决办法
先说结论,时间比较赶的朋友直接试这个就可以了。核心是不要让ASP.Net接管反向代理中的处理逻辑。
1、在反向代理网站使用的Application Pool,“托管管道模式”(Managed pipeline mode),选择“经典”(Classic)
2、在反向代理对应使用的Application Pool,.Net CLR版本(.Net CLR version),选择“无托管代码”(No Managed Code)
上述两个任选1个即可。
原因
主要的原因是,访问路径(/api/app:getLang?locale=zh-CN)中包括了特殊符号,冒号(:)。
这种路径的设计方式,违反了RFC 2396技术规范,所以在ASP.Net的处理过程中处于安全考虑进行了屏蔽。
Valid URL Characters - Introducing .NET 4.0: with Visual Studio 2010 [Book]
踩过的坑
如果是其他原因搜到这篇文章的,可以看一下其他的处理方法(我踩过的坑),希望有所帮助。
1、修改web.config
包括在httpRuntime节点添加配置,屏蔽对特殊字符的过滤。在rules中实现多双字节字符的过滤。
2、修改注册表
在注册表 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTPFilter\Parameters
节点添加相应的DWORD值,主要是AllowRestrictedChars。
Http.sys registry settings for Windows - Internet Information Services | Microsoft Learn
web config - IIS 10 Bad Request - Invalid URL code 400 - Stack Overflow
3、其他
这篇讲的多一些,文末有所覆盖,但没有说太清楚。
在ASP.NET MVC中使用IIS级别的URL Rewrite_iis rewrite能获取参数吗-CSDN博客
标签:ASP,IIS,URL,无法访问,代理,反向,Net,特殊字符 From: https://www.cnblogs.com/workingbird/p/18502315