9.2 机器人的 HTTP

来源:互联网 发布:js 设置高度 编辑:程序博客网 时间:2024/05/21 22:59
  • 机器人和所有其他 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 客户端根本不是浏览器,而是机器人的时候,站点为机器人提供的就会是出错页面而不是页面内容了。
  • 站点管理者应该设计一个处理机器人请求的策略。比如,它们可以为所有其他特性不太丰富的浏览器和机器人开发一些页面,而不是将其内容限定在特定浏览器所支持的范围。至少,管理者应该知道机器人是会访问其站点的,不应该在机器人访问时感到猝不及防。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 盗图被删除还是待处理违规该怎么办 如果买家说你们的买家秀一样怎么办 花呗唤起安全核身验证失败怎么办 淘宝买东西花呗分期额度不够怎么办 支付宝余额支付额度已达上限怎么办 我是淘宝卖家遇到无良买家怎么办 我的保证金被淘宝当做违约金怎么办 淘宝顾客不想退货申请仅退款怎么办 被买家提供证明说我卖假货怎么办 淘宝退货快递公司填错了俩次怎么办 淘宝上退货把运单号写错了怎么办? 阿里巴巴发货了快递单号掉了怎么办 淘宝上买东西货物被物流扣留怎么办 淘宝买错了对方已发货怎么办 淘宝卖家发货的时候没货了怎么办 买了球显示未出票中奖了怎么办 点错了允许易企秀获得权限怎么办 淘宝还没发货商家拒绝退款怎么办 买家不补邮费还要你发货怎么办 天猫客服提示获取信息失败怎么办 拼多多下单了商家不发货怎么办 店铺扣2分宝贝降权了怎么办 淘宝店没订单没流量怎么办啊 淘宝id账号登录密码忘记了怎么办 淘宝网店铺授权客服联系不上怎么办 卖家发货买家查不到物流信息怎么办 物流信息到了但东西没到怎么办 淘宝详情已更改对方恶意投诉怎么办 淘宝店写的不给退换怎么办 从饿了么商家借款逾期怎么办 谷歌浏览器网页无法复制文字怎么办 复制粘贴在文件本里找不到了怎么办 淘宝商家给我寄错东西怎么办 美团客户点餐商家没有了怎么办 如果银行卡里的钱突然没有了怎么办 微信绑定的银行卡怎么没有了怎么办 西亚超市商品退货赠品不退怎么办 淘宝发布宝贝推荐橱窗位不够怎么办 抖音和微信软件冲突怎么办 淘宝开过店想给别家做客服怎么办 学网上开店别人不主动教你怎么办