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

时间:2017-05-31 19:17:11

标签: http browser http-status-code-404

一个奇怪的网页越过了我的路。 (作为一名开发人员,我必须解开这个谜团。)

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

但是在查看控制台时,服务器会异常返回404状态代码:

enter image description here

那么为什么浏览器呈现页面?

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

enter image description here

等一下。响应404并沿途发送HTML?浏览器渲染它?

为什么会这样?这是一些服务器配置错误吗?或者是一些聪明的事情,我不明白?有意配置服务器的行为是否有实际原因?

2 个答案:

答案 0 :(得分:0)

Another answer on Stack Overflow 包含一些有趣的信息:spec实际建议使用404状态代码加上HTML响应正文。

  

4xx类状态代码适用于其中的情况   客户似乎有错误。除了回应HEAD时   请求,服务器应该包含一个包含
的表示   错误情况的解释
,以及是暂时还是
  永久条件。这些状态代码适用于任何
  请求方法。用户代理应该显示任何包含的内容   表示给用户。

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

解释1:服务器错误。

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

解释2:它是故意破坏抓取工具和网页浏览器的。

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

如果您不希望将您的网页编入索引,那么第二个确实会很聪明。

答案 1 :(得分:0)

我面临着同样的情况。我的门户网站托管在tomcat服务器中。命中主机名和tomcat目录路径时,将加载门户。但是在加载网页时,网页重定向到了深层链接URL并呈现了该页面。但是,如果您直接在浏览器中点击深层链接URL,尽管网页可以正常显示,但它将在Dev工具的“网络”标签中给您404错误。 发生这种情况是因为服务器配置文件中的任何地方都没有资源作为您的深层链接URL,因此当它搜索资源时,找不到资源并在Dev工具的“网络”选项卡中返回404。 但是浏览器在资源URL上的行为有所不同。它首先加载并连接到资源的主机名,成功返回时,将根据配置文件设置重定向该主机名,并呈现深层链接URL资源HTML,正确设置内容的样式。

相关问题