.NET Framework 4.5 旧版HTTP请求重定向到错误页的实现疑问
问题解答
基础判断验证
你通过Request.ServerVariables["SERVER_PROTOCOL"]获取到的就是当前请求对应的HTTP协议版本,这个判断完全正确,该服务器变量返回值的标准格式为HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3,和请求实际使用的协议版本完全对应。
两个方案疑问解答
- 情况1:不需要在业务代码中设置服务端HTTP版本再做对比。服务端支持的HTTP协议版本由你部署用的Web服务器(如IIS)、操作系统版本共同决定,业务代码没有权限修改服务端支持的协议范围,该方案逻辑不成立。
- 情况2:可以直接做字符串比对,但你的示例代码有两处明显问题:
SERVER_PROTOCOL返回值自带斜杠,你写的判断条件d=="HTTP1.1"永远无法匹配,正确写法应为d == "HTTP/1.1"- 不建议用“是否等于最新版本”作为判断逻辑,你的需求是拦截旧版本请求,应该反过来判断版本是否低于你设定的最低要求,比如要求最低支持HTTP/2的话,只需要判断请求版本为
HTTP/1.0或HTTP/1.1时跳转错误页即可。
延伸问题解答
- 如果你需要调整服务端支持的HTTP版本,直接在Web服务器配置中修改即可,比如IIS环境下可以在站点的绑定设置中开启/关闭HTTP/2、HTTP/3支持,不需要修改业务代码。
- 如果你采用的是“拦截低于最低要求的旧版本”的判断逻辑,后续HTTP/3甚至更高版本发布时都不需要修改代码,因为旧版本的标识固定为
HTTP/1.0和HTTP/1.1;如果你硬编码为“不等于最新版本就拦截”的逻辑,每次HTTP协议更新都需要修改代码适配,非常不推荐这种实现方式。
内容的提问来源于stack exchange,提问作者Asif Ali
相关产品推荐
相关产品推荐

