当显示旧浏览器的替代错误页面时,应使用哪个HTTP状态码? 答案:应该使用HTTP状态码406(Not Acceptable)。

3
我有一个网站,大量使用 CSS3 和一些 HTML5 的现代功能。因此,在 IE7 或更低版本中无法工作,并且看起来非常糟糕。决定是我们不会支持这些旧的浏览器,因为为非常少的用户付出太多的努力。他们没有看到常规页面,而是看到特殊的错误/警告页面,其中告知他们为什么看到它以及他们应该安装更新的浏览器。
这很好用。但我的问题是 - 我应该在这个页面中发送什么 HTTP 状态代码?这很重要吗?现在,它是普通的 200 OK。
感谢你的时间和努力。
回答:你可以使用状态代码410 Gone来表示网页已被永久删除,也就是说您不再支持IE7或更低版本的浏览器。如果您想保留已有URL,但要显示新内容,可以使用状态代码301 Moved Permanently或302 Found等。HTTP状态代码对于搜索引擎优化(SEO)至关重要,因此请根据需要选择正确的代码。
1个回答

4

您有几种选择,这些选择主要取决于两个参数:

  • 状态码是否适用于此问题,是否允许在不涉及HTTP事务但涉及发送到浏览器的内容时使用它?(浏览器显然无法通过HTTP告知其是否支持给定的HTML/CSS标准)。

  • 浏览器如何解释它。某些浏览器在接收到特定状态码时甚至不会渲染发送的HTML,而是显示默认内置页面。

我会选择一个经过适当记录的错误代码,并将其用作语义响应,并确保浏览器不会忽略正文。我建议采用两种不同的解决方案:

  • 当最初请求的资源返回 302 Found 时,将浏览器重定向到错误页面并发送 200 OK。这是大多数网站管理员在遇到此类问题时所做的,主要是因为在 HTTP 事务 中没有出现任何故障,只是我们正在重定向用户,以便根据额外的 HTTP 参数生成适当的视图。

  • 通过告诉浏览器发生了什么来给出响应的语义错误代码。同样,浏览器如何对此错误代码做出反应是实现相关的,并且可能会有很大差异。显然,应该返回 4xx 状态码 作为客户端错误的信号。我倾向于使用 415 Unsupported Media Type417 Expectation Failed

HTTP 响应代码来源:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes


我一开始也考虑了302,但我真的很喜欢你使用415或417的想法。 - Scott C Wilson
如果浏览器没有投诉,那就太好了。 - Halim Qarroum
“426 - 需要升级”是什么意思?我能理解,但描述与升级浏览器无关,而是涉及升级协议:“客户端应该切换到不同的协议,例如在升级头字段中给出的TLS/1.0。” - Rupert
HTTP升级用于指示切换到不同版本的HTTP或其他协议的偏好或要求,如果可能的话。有关更多信息,请参见此SO帖子 - Halim Qarroum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接