特定HTTP Get请求返回空响应的排查求助(ASP.NET MVC+IIS)
问题描述
项目基于ASP.NET MVC框架开发,部署在Windows Server 2012 R2服务器上,近期出现如下异常:
- 收到IIS工作进程行为异常告警,网站曾发生宕机
- 部分HTTP GET请求可正常获取数据,但部分请求返回200状态码却无响应体
- 异常GET请求已被IIS日志记录,但未出现在网站日志中,说明IIS接收请求后未转发至网站处理,直接返回空响应,疑似规则拦截/过滤
- 已执行IIS重置、服务器重启操作,网站对应的
w3wp.exe进程CPU使用率正常 - 将异常GET请求改为POST请求后可正常工作
正常GET请求截图:
异常GET请求截图:
排查与修复建议
1. 检查IIS URL重写规则
- 打开IIS管理器,定位目标网站,查看URL重写模块中的所有规则,确认是否存在针对GET请求的拦截、改写规则,尤其是可能导致响应截断的规则
- 临时禁用所有自定义重写规则,测试异常请求是否恢复正常,逐步排查出问题规则
2. 验证请求过滤模块设置
- 进入网站的请求过滤配置:
- 检查「HTTP谓词」选项卡,确认GET请求未被拒绝
- 查看「URL」和「查询字符串」过滤规则,是否存在匹配异常请求的禁止规则
- 检查「请求限制」中的内容长度、最大URL长度等设置,确认是否异常请求的参数或URL长度触发了限制
3. 排查ASP.NET请求限制
- 打开项目
web.config,查看<httpRuntime>节点的maxQueryStringLength、maxUrlLength等参数,确认是否因GET请求的查询字符串过长被拦截 - 检查IIS配置中的
<requestLimits>节点,确认是否限制了GET请求的相关参数
4. 检查第三方IIS模块
- 若服务器安装了安全类(如WAF)、性能优化类第三方IIS模块,临时禁用这些模块后测试异常请求
- 重点排查针对GET请求的防护规则,比如SQL注入检测、请求频率限制等是否误拦截了合法请求
5. 启用IIS失败请求跟踪
- 配置IIS的失败请求跟踪规则,针对返回200但无响应体的请求进行跟踪,查看请求在IIS管道中的处理流程,定位具体哪个环节截断了响应
- 跟踪日志会详细记录每个模块的处理动作,可明确是IIS原生模块还是自定义模块导致的问题
6. 检查应用程序池配置
- 确认应用程序池的.NET CLR版本、托管管道模式与项目要求匹配
- 查看应用程序池的「高级设置」,检查「队列长度」「请求限制」等参数,是否因队列溢出导致请求未转发至应用程序
内容的提问来源于stack exchange,提问作者Shan Mughal
相关产品推荐
相关产品推荐

