我在运维一个10几年前的老项目,有一个问题,一直困扰着我的客户。很久都没有解决。
表现就是在用中文搜索表单时,会看到如下的错误:
后来经过我的测试发现,只要是GET请求中传参包含中文时就必然出现这个报错。
探索过程
看到这个界面,最开始我误以为是IIS的报错信息。我就各种在网上搜索关键字类似与URL中文 报500错误
,很显然没能解决这个错误。
我把IIS的根编码格式相关的参数都修改了个遍就是解决不了。
然后这个事情就搁置了近一年时间,期间如果客户很在意这个报错,我就会修改后台代码,避免在GET方法中使用中文。或者把中文转成其他格式传输。虽然可以解决问题,但是工作量巨大。
直到近期,我给客户部署我亲自开发的项目,发现GET请求中包含中文时还是报这个错。这个时候我在想会不会不是IIS的原因。因为我的项目使用的是nginx。
直到在配置域名的时候,发现我的项目,无法正常登录。我有文章如下:
《ISA Server2006部署RuoYi无法登录的问题》https://blog.csdn.net/lxyoucan/article/details/135722244
记录了这个过程。
此时我才发现,客户用的反向代理软件竟然是ISA Server2006
这是我第1次听说这个软件。
此时我才意识到,之前的项目访问时URL中带有中文报错的情况,不是因为IIS,而是因为
ISA Server2006
导致。
之前花了大量时间探索,竟然方向完全错误了。
得到原本原因以后就好解决了。
解决办法
- 打开 ISA控制台。
- 点击 “防火墙策略”
- 找到自己的网站并鼠标右击,选择
配置HTTP
- 在弹出的为规则配置HTTP策略 对话框,点击
常规
选项卡,在URL保护中,把验证正则化
和阻止高位字符
这两项前面的复选框去掉。然后点击确定。
- 点击应用,后问题解决。
总结
真是坑啊,ISA的默认配置竟然有如此大的坑。不过毕竟是10多年前的软件了,也不能要求太高。反正在当前的视角看,这个默认配置验证正则化
和阻止高位字符
因引起中文用户困扰。其实英文用户应该是不会有影响的。
总体来说ISA更像是一个防火墙软件,安全性第一的原则来看,又好理解了。
困扰我近1年的问题,总算解决了。
参考
https://blog.51cto.com/liunn/230980