IIS使用反向代理,解决路径包含特殊字符无法访问的问题

环境:

操作系统: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中实现多双字节字符的过滤。

How to solve error "A potentially dangerous Request.Path value was detected from the client (:)." - Microsoft Q&A

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博客

 

posted @ 2024-10-25 13:30  ZhZhen  阅读(224)  评论(0)    收藏  举报