服务器返回网页 404,但页面在浏览器中显示正常 - 为什么?

Hei*_*cht 5 browser http http-status-code-404

一个奇怪的网页横亘在我面前。(作为一名开发人员,我必须解开这个谜团。)

在任何浏览器中访问网页时,一切似乎都很正常。网页按预期显示。

但是当查看控制台时,服务器实际上返回了 404 状态代码:

在此输入图像描述

那么浏览器为什么要渲染页面呢?

查看正文显示返回了有效的 HTML:

在此输入图像描述

坚持,稍等。响应 404 并一路发送 HTML?浏览器渲染它?

为什么会发生这种情况?这是服务器配置错误吗?还是这里发生了一些我不明白的聪明事情?故意将服务器配置为这样的行为是否有实际原因?

Hei*_*cht 3

Stack Overflow 上的另一个答案包含一些有趣的信息:规范实际上建议使用 404 的 HTTP 状态代码加上 HTML 响应正文。

4xx 类状态代码适用于
客户端似乎犯了错误的情况。除非响应 HEAD
请求,服务器应该包含一个表示,其中包含
错误情况的解释
,以及它是临时的还是
永久的情况。这些状态代码适用于任何
请求方法。
用户代理应该向用户显示任何包含的表示。

这给我留下了两种可能的解释:

解释1:这是服务器错误。

  • 服务器错误返回404状态码
  • 浏览器认为响应正文包含有关错误的详细信息并显示它 - 对于最终用户来说,这是实际页面

解释2:这是故意的,目的是为了击败爬虫和页面观察者。

  • 服务器故意返回 404 - 非浏览器用户代理不会处理结果,因为它们将其解释为错误
  • 浏览器不受影响,只要页面正在显示,最终用户就不会关心

如果您不希望页面被索引,那么第二个确实会很聪明。