如何知道它实际上是404页?

Til*_*ddy 10 webserver http http-status-code-404

我从Foregenix那里学到了什么:

HTTP 404 Not Found Error表示在服务器上找不到您尝试访问的网页.这是一个客户端错误,这意味着页面已被删除或移动,URL未相应更改,或者您在URL中输入错误

但后来我也用Python做网络应用程序测试,我想知道如果我只检查404页面上的字符串,它可能不是一个404错误.它可能发生在页面存在但标题404只是为了欺骗我们.

那我怎么知道呢?

And*_*ers 55

您可以检查HTTP状态代码,看看它是否为404.状态代码位于响应的第一行:

HTTP/1.1 404 Not Found
Run Code Online (Sandbox Code Playgroud)

如果您使用HTTPlib,则只需读取对象的status属性即可HTTPResponse.

但是,服务器决定要发送什么HTTP状态代码.仅仅因为404定义为"未找到页面"并不意味着服务器不能骗你.做这样的事情是很常见的:

  • 发送404而不是403,以隐藏需要身份验证的资源.
  • 发送404而不是500,隐藏事实不起作用.
  • 出于某种原因阻止IP时发送404.

如果无法访问服务器,就无法知道窗帘背后的真实情况.

  • 有些网站会严重破坏状态代码.他们可能会显示404但返回200(如您所述).如果您发现网站正在执行此操作,则应与他们联系并告知他们,特别是如果您使用API​​端点. (9认同)
  • ......发送404而不是418 [当你是茶壶时](https://httpstatuses.com/418). (8认同)

A. *_*win 9

你是对的:有人可以在HTML页面中写"404 Page Not Found"并让你认为页面不存在.

为了正确识别HTTP状态代码(如404),您应该使用Python捕获HTTP响应并解析它.HTTP 1和HTTP 2标准规定HTTP响应(以HTTP通用消息格式编写)必须包含状态代码.

HTTP响应示例(来自Tutorials Point):

HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
  <h1>Not Found</h1>
   <p>The requested URL /t.html was not found on this server.</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

你绝对不应该相信HTML部分,当实际可以找到页面时,它可以显示404错误(甚至是418我是茶壶).

  • @Anders如果页面向您发送包含虚假状态代码的HTTP响应,我不知道还能做些什么来检查是否找不到该页面,如果没有用另一个IP地址或用户代理检查它这是一个特别的消息. (7认同)
  • 我同意你不应该相信HTML,但你应该相信HTTP状态代码吗? (2认同)
  • @Anders:您应该信任状态代码.如果网站被破坏或故意与您玩游戏,您无能为力.如果网站上写着"页面不存在",那么就您而言,它并不存在. (2认同)