客户端使用旧 HTTP 版本时重定向到错误

Posted

技术标签:

【中文标题】客户端使用旧 HTTP 版本时重定向到错误【英文标题】:Redirect To Error when Client Side is using older HTTP Version 【发布时间】:2021-12-26 05:33:16 【问题描述】:

我认为这是一个理论问题。我有一个关于 dotnet 框架 4.5 的项目,我需要做的是,每当客户端使用较旧的 httpversion 时,我都必须将其重定向到错误页面。 我得到这样的http版本

 var d = Request.ServerVariables["SERVER_PROTOCOL"];

它给出的值是“HTTP/1.1”。我认为这是 Request 的 http 版本。正确的?现在我的问题是

//

CASE 1) 我们是否必须在服务器上设置 http 版本并将我们的服务器版本与我们从 Request.ServerVariables["SERVER_PROTOCOLS"] 获得的版本进行比较或

//

案例 2)我必须通过简单的字符串比较将它与最新的 http 版本(在 google 上显示 HTTP/2)进行比较

var d = Request.ServerVariables["SERVER_PROTOCOL"];
if(d=="HTTP1.1") //"HTTP/2 either of which is latest"

如果是 CASE 1,那么我们如何设置服务器的 http 版本,如果是 CASE 2,那么如果以后 httpversion 更改为“HTTP/3”,那么我是否必须再次编写代码并更改最新的条件http版本

【问题讨论】:

【参考方案1】:

我得到这样的 http 版本

var d => Request.ServerVariables["SERVER_PROTOCOL"]; 

它正在赋予价值 “HTTP/1.1”。我认为这是 Request 的 http 版本。对吧?

是的

我们是否必须在服务器上设置 http 版本并比较我们的服务器 版本与我们从中获得的版本 Request.ServerVariables["SERVER_PROTOCOLS"]

您想要支持的版本完全取决于您。如果你想支持 min HTTP/2 然后在服务器上创建一个配置值:MinHttpVersion = 2

上述方法的问题

我不知道您为什么这样做,但似乎是一个奇怪的要求,您可能会遇到一些与 SEO 相关的问题:

1> 机器人/爬虫:您需要区分用户和爬虫。爬虫不一定使用 Flash 浏览器,这样,您最终可能会阻止它们。您需要 detect crawlers 并将它们排除在任何版本要求之外。

2> 重定向到错误页面:这不是错误情况,不应重定向到错误页面。重定向是一种糟糕的用户体验(增加了页面加载时间),并且会使您的网站在 SEO 排名中下降。

更好的方法

不清楚您为什么要这样做?我怀疑您不想支持较旧的浏览器?如果是这种情况,那么常见的方法是检查用户的浏览器版本。例如,当您在 IE 中打开 *** 时会发生这种情况:

因此,您需要确定要支持的每种浏览器的最低版本。然后您需要检测用户的浏览器,如果它太旧,则显示“过时的浏览器”消息(不要重定向到错误页面)并确保排除爬虫。

您可以在服务器端和客户端执行此操作。 This library 可能会给你一些想法。

【讨论】:

感谢您的解释

以上是关于客户端使用旧 HTTP 版本时重定向到错误的主要内容,如果未能解决你的问题,请参考以下文章

django admin 在保存时重定向到错误的端口

sql Wordpress在迁移时重定向到旧站点。从数据库更新旧URL的所有发生。

Spring OAuth2 不会在表单登录时重定向回客户端

http状态码

根据地理位置在首次访问时重定向用户

Sentry 捕获错误时重定向到新页面