3月阅读周·HTTP权威指南:Web机器人之拒绝机器人访问篇

举报
叶一一 发表于 2025/03/22 14:07:50 2025/03/22
【摘要】 引言HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解...

引言

HTTP(Hypertext Transfer Protocol,超文本传输协议[插图])是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。

《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。

这本书主要包括以下内容:

  • 第一部分描述了Web的基础构件与HTTP的核心技术
  • 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
  • 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
  • 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
  • 第五部分介绍了发布和传播Web内容的技巧。
  • 第六部分是一些很有用的参考附录,以及相关技术的教程。

Web机器人

Web机器人是能够在无需人类干预的情况下自动进行一系列Web事务处理的软件程序。很多机器人会从一个Web站点逛到另一个Web站点,获取内容,跟踪超链,并对它们找到的数据进行处理。根据这些机器人自动探查Web站点的方式,人们为它们起了一些各具特色的名字,比如“爬虫”、“蜘蛛”、“蠕虫”以及“机器人”等,就好像它们都有自己的头脑一样。

拒绝机器人访问

机器人社团能够理解机器人访问Web站点时可能引发的问题。1994年,人们提出了一项简单的自愿约束技术,可以将机器人阻挡在不适合它的地方之外,并为网站管理员提供了一种能够更好地控制机器人行为的机制。这个标准被称为“拒绝机器人访问标准”,但通常只是根据存储访问控制信息的文件而将其称为robots.txt。

机器人想要从Joe的五金商店下载。但在机器人去请求这个页面之前,要先去查看robots.txt文件,看看它是否有获取这个页面的权限。在这个例子中,robots.txt文件并没有拦截机器人,因此机器人获取了这个页面。

拒绝机器人访问标准

拒绝机器人访问标准是一个临时标准。编写本书的时候还没有官方标准机构承认这个标准,不同的厂商实现了这个标准的不同子集。但是,具备一些对机器人访问Web站点的管理能力,即使并不完美,也总比一点儿都没有要好,而且大部分主要的生产厂商和搜索引擎爬虫都支持这个拒绝访问标准。

尽管没有很好地定义版本的名称,但拒绝机器人访问标准是有三个版本的。

现在大多数机器人采用的都是标准v0.0或v1.0。版本v2.0要复杂得多,没有得到广泛的应用。可能永远也不会得到广泛应用。这里我们重点介绍v1.0标准,因为它的应用很广泛,而且与v0.0完全兼容。

Web站点和robots.txt文件

如果一个Web站点有robots.txt文件,那么在访问这个Web站点上的任意URL之前,机器人都必须获取它并对其进行处理。由主机名和端口号定义的整个Web站点上仅有一个robots.txt资源。如果这个站点是虚拟主机,每个虚拟的docroot都可以有一个不同的robots.txt文件,像所有其他文件一样。

通常不能在Web站点上单独的子目录中安装“本地”robots.txt文件。网管要负责创建一个聚合型robots.txt文件,用以描述Web站点上所有内容的拒绝访问规则。

1.获取robots.txt

机器人会用HTTP的GET方法来获取robots.txt资源,就像获取Web服务器上所有其他资源一样。如果有robots.txt文件的话,服务器会将其放在一个text/plain主体中返回。如果服务器以404 Not Found HTTP状态码进行响应,机器人就可以认为这个服务器上没有机器人访问限制,它可以请求任意的文件。

机器人应该在From首部和User-Agent首部中传输标识信息,以帮助站点管理者对机器人的访问进行跟踪,并在站点管理者要查询,或投诉的机器人事件中提供一些联系信息。下面是一个来自商业Web机器人的HTTP爬虫请求实例:

GET /robots.txt HTTP/1.0
Host: www.joes-hardware.com
User-Agent: Slurp/2.0
Date: Wed Oct 3 20:22:48 EST 2001

2.响应码

很多Web站点都没有robots.txt资源,但机器人并不知道这一点。它必须尝试着从每个站点上获取robots.txt资源。机器人会根据对robots.txt检索的结果采取不同的行动。

  • 如果服务器以一个成功状态(HTTP状态码2XX)为响应,机器人就必须对内容进行解析,并使用排斥规则从那个站点上获取内容。
  • 如果服务器响应说明资源并不存在(HTTP状态码404),机器人就可以认为服务器没有激活任何排斥规则,对此站点的访问不受robots.txt的限制。
  • 如果服务器响应说明有访问限制(HTTP状态码401或403),机器人就应该认为对此站点的访问是完全受限的。
  • 如果请求尝试的结果是临时故障(HTTP状态码503),机器人就应该推迟对此站点的访问,直到可以获取该资源为止。
  • 如果服务器响应说明是重定向(HTTP状态码3XX),机器人就应该跟着重定向,直到找到资源为止。

robots.txt文件的格式

robots.txt文件采用了非常简单的,面向行的语法。robots.txt文件中有三种类型的行:空行、注释行和规则行。规则行看起来就像HTTP首部(<Field>:<value>)一样,用于模式匹配。比如:

# this robots.txt file allows Slurp & Webcrawler to crawl
# the public parts of our site, but no other robots...

User-Agent: slurp
User-Agent: webcrawler
Disallow: /private

User-Agent: *
Disallow:

robots.txt文件中的行可以从逻辑上划分成“记录”。每条记录都为一组特定的机器人描述了一组排斥规则。通过这种方式,可以为不同的机器人使用不同的排斥规则。

每条记录中都包含了一组规则行,由一个空行或文件结束符终止。记录以一个或多个User-Agent行开始,说明哪些机器人会受此记录的影响,后面跟着一些Disallow和Allow行,用来说明这些机器人可以访问哪些URL。

前面的例子显示了一个robots.txt文件,这个文件允许机器人Slurp和Webcrawler访问除了private子目录下那些文件之外所有的文件。这个文件还会阻止所有其他机器人访问那个站点上的任何内容。

其他有关robots.txt的知识

解析robots.txt文件时还需遵循其他一些规则。

  • 随着规范的发展,robots.txt文件中可能会包含除了User-Agent、Disallow和Allow之外的其他字段。机器人应该将所有它不理解的字段都忽略掉。
  • 为了实现后向兼容,不能在中间断行。
  • 注释可以出现在文件的任何地方;注释包括可选的空格,以及后面的注释符(#)、注释符后面的注释,直到行结束符为止。
  • 0.0版的拒绝机器人访问标准并不支持Allow行。有些机器人只实现了0.0版的规范,因此会忽略Allow行。在这种情况下,机器人的行为会比较保守,有些允许访问的URL它也不去获取。

总结

robots.txt的思想很简单。所有Web服务器都可以在服务器的文档根目录中提供一个可选的、名为robots.txt的文件。这个文件包含的信息说明了机器人可以访问服务器的哪些部分。如果机器人遵循这个自愿约束标准,它会在访问那个站点的所有其他资源之前,从Web站点请求robots.txt文件。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。