9.2 机器人的 HTTP

  • 机器人和所有其他 HTTP 客户端程序并没有什么区别。它们也要遵守 HTTP 规范中的规则。发出 HTTP 请求并将自己广播成 HTTP/1.1 客户端的机器人也要使用正确的 HTTP 请求首部。
  • 很多机器人都试图只实现请求它们所查找内容所需的最小 HTTP 集。这会引发一些问题;但短期内这种行为不会发生什么改变。结果就是,很多机器人发出的都是 HTTP/1.0 请求,因为这个协议的要求很少。

1. 识别请求首部

  • 尽管机器人倾向于只支持最小的 HTTP 集,但大部分机器人确实实现并发送了一些识别首部——最值得一提的就是 User-Agent 首部。
  • 建议机器人实现者们发送一些基本的首部信息,以通知各站点机器人的能力、机器人的标识符,以及它是从何处起源的。
  • 鼓励实现以下首部:
    • User-Agent:将发起请求的机器人名字告知服务器。
    • From:提供机器人的用户/管理者的 E-mail 地址。一种 RFC 822 E-mail 地址格式。
    • Accept:告知服务器可以发送哪些媒体类型。这有助于确保机器人只接收它感兴趣的内容(文本、图片等)。
    • Referer:提供包含了当前请求 URL 的文档的 URL。有些站点管理者会尝试着记录机器人是如何找到指向其站点内容的链接的,对这些人来说,这个首部非常有用。

2. 虚拟主机

  • 机器人实现者要支持 Host 首部。随着虚拟主机(参见第 5 章)的流行,请求中不包含 Host 首部的话,可能会使机器人将错误的内容与一个特定的 URL 关联起来。因此,HTTP/1.1 要求使用 Host 首部。
  • 在默认情况下,大多数服务器都被配置为提供一个特定的站点。因此,不包含 Host 首部的爬虫向提供两个站点的服务器发起请求时,就会和下图一样,获得的内容不是请求的站点:
    这里写图片描述

3. 条件请求

  • 由于页面数量巨大,所以只在内容发生变化时才重新获取内容是很有意义的。
  • 有些机器人实现了条件 HTTP 请求,它们会对时间戳或实体标签进行比较,看看它们最近获取的版本是否已经升级了。这与 HTTP 缓存查看已获取资源的本地副本是否有效的方法非常相似。

4. 对响应的处理

  • 很多机器人的兴趣主要在于用简单的 GET 方法来获取所请求的内容,所以,一般不会在处理响应的方式上花费太多时间。
  • 但是,使用了某些 HTTP 特性(比如条件请求)的机器人,以及那些想要更好地探索服务器,并与服务器进行交互的机器人则要能够对各种不同类型的 HTTP 响应进行处理。

1. 状态码

  • 机器人至少应该能够处理一些常见的,以及预期的状态码。有机器人都应该理解 200 OK 和 404 Not Found 这样的状态码。它们还应该能够根据响应的一般类别对它并不十分理解的状态码进行处理。
  • 有些服务器并不总能返回适当的错误代码,认识到这一点是很重要的。有些服务器甚至会将 HTTP 状态码 200 OK 与描述错误状态的报文主体文本一同返回!很难对此做些什么——只是实现者应该要了解这些情况。

2. 实体

  • 除了 HTTP 首部所嵌的信息之外,机器人也会在实体中查找信息。
  • HTML 元标签,比如元标签 http-equiv,就是内容编写者用于嵌入资源附加信息的一种方式。服务器可能会为它所处理的内容提供一些首部,标签 http-equiv 为内容编写者提供了一种覆盖这些首部的方式:
    <meta http-equiv="Refresh" content="1;URL=index.html">
    这个标签会指示接收者处理这个文档时,要当作其 HTTP 响应首部中有一个值为 1,URL=index.html 的 Refresh HTTP 首部。有时会将 Refresh HTTP 首部作为将用户(或者在这种情况下,就是将机器人)从一个页面重定向到另一个页面的手段。
  • 有些服务器实际上会在发送 HTML 页面之前先对其内容进行解析,并将 http-equiv 指令作为首部包含进去;有些服务器则不会。机器人实现者可能会去扫描 HTML 文档的 HEAD 组件,以查找 http-equiv 信息。根据 HTML 的规范,元标签一定要出现在 HTML 文档的 HEAD 部分。但并不是所有的 HTML 文档都会遵循规范,因此,它们有时也会出现在 HTML 文档的其他区域中。

5. User-Agent 导向

  • Web 管理者应该记住,会有很多的机器人来访问它们的站点,因此要做好接收机器人请求的准备。
  • 很多站点会为不同的用户代理进行内容优化,并尝试着对浏览器类型进行检测,以确保能够支持各种站点特性。这样的话,当实际的 HTTP 客户端根本不是浏览器,而是机器人的时候,站点为机器人提供的就会是出错页面而不是页面内容了。
  • 站点管理者应该设计一个处理机器人请求的策略。比如,它们可以为所有其他特性不太丰富的浏览器和机器人开发一些页面,而不是将其内容限定在特定浏览器所支持的范围。至少,管理者应该知道机器人是会访问其站点的,不应该在机器人访问时感到猝不及防。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值