搜索抓取

HTTP/2 与蜘蛛抓取:连接复用会怎样影响抓取效率

蜘蛛抓取不只是 URL 排队的问题,连接层同样影响效率。本文从 HTTP/1.1 的连接上限讲到 HTTP/2 的多路复用,说明 ALPN 协商、GOAWAY、超时等配置细节怎样干扰抓取,并给出从日志观察连接表现、调整服务端配置的实用思路。

搜索抓取

HTTP/2 与蜘蛛抓取:连接复用会怎样影响抓取效率

蜘蛛抓取不止发生在 URL 层

讨论抓取时,多数人习惯从 URL、Sitemap、内链这些看得见的地方入手。但蜘蛛真正拿到一个页面,要先完成 DNS 解析、建立连接、发送请求、接收响应。URL 决定抓什么,连接层决定能不能顺畅抓到。当站点规模变大,连接层的差异会慢慢显现出来。

HTTP/1.1 下的连接限制

HTTP/1.1 的浏览器和爬虫普遍会对同一个域名限制并发连接数,通常在几条到十几条之间。这意味着蜘蛛在抓取一个页面时,如果页面上还引用了额外资源,或者同一时间有多个 URL 排队,就需要在这些连接上排队复用。而连接建立本身是有成本的,TLS 握手、慢启动都会让每个新连接变慢。

对内容型站点来说,这种开销通常可以接受;但如果页面依赖大量同域资源,例如样式、脚本和接口请求,HTTP/1.1 的队头阻塞和连接上限就会成为抓取速度的隐形瓶颈。

HTTP/2 改变了什么

HTTP/2 在一条 TCP 连接上支持多路复用,多个请求可以并行传输,不用为每个请求单独建连。对蜘蛛而言,常见的变化有:

  • 同一连接内并发发送多个请求,省去反复握手的时间开销
  • 头部压缩减少小请求的传输体积,对大量小页面更友好
  • 连接复用降低服务器侧的连接数压力,也更容易做稳定的并发控制

理论上,更少的连接承载了更多请求。但这并不等于抓取量会自动变多——抓取节奏主要由蜘蛛自己的调度策略和服务器响应决定,HTTP/2 只是把通道做得更顺。

服务端配置里容易踩的坑

启用 HTTP/2 之后,一些配置细节会直接影响蜘蛛的体验。

ALPN 与 TLS

HTTP/2 通常要求走 TLS,服务器需要通过 ALPN 协商出对应的协议。如果证书链不完整、TLS 版本过低,或者中间设备只放行 HTTP/1.1,蜘蛛可能退回旧协议甚至握手失败。这类问题在抓取日志里往往表现为连接被重置,而不是某个状态码错误。

连接被提前关闭

HTTP/2 里有两个信号值得留意:GOAWAY 表示服务器准备关闭连接,REFUSED_STREAM 表示某个流被拒绝。如果服务器或中间层频繁发送这类信号,蜘蛛的请求就会失败重试,抓取速度随之下降。连接超时设置过短,同样会让正常请求被切断。

keep-alive 与超时配置

连接复用依赖合理的空闲超时。超时太短,连接刚建立就被回收,复用率上不去;太长则占用服务器资源。对于抓取量较大的站点,建议先按实际并发观察一段时间,再调整参数,而不是照搬默认值。

从日志里看连接层的表现

抓取日志不只记录 URL 和状态码,还能读出连接特征:

  • 同一 IP 与 UA 的请求时间分布,是否集中在少数时间段
  • 同一连接上是否出现多个请求,也就是有没有走到多路复用
  • 响应时长、连接重置、超时各自占多大比例
  • 被 429、503 挡回的请求,是否与并发突然上升相关

把这些数据和服务器侧的连接数、CPU、带宽曲线放在一起看,更容易判断是蜘蛛来得太急,还是站点自己接不住。

实践建议

  1. 确认服务器已正确启用 HTTP/2,用命令行工具或在线检测验证协商结果,而不是只看配置文件。
  2. 连接层的限流别做得过于激进。直接断开连接,比返回明确的 503 加 Retry-After 更难被蜘蛛理解。
  3. CDN 或 WAF 如果会改写协议、拦截可疑 UA,先确认没有误伤正常抓取。
  4. 抓取量大的站点,分开观察页面请求和资源请求的连接占用,避免资源把页面抓取的位置挤掉。
  5. 改动配置后观察一到两周日志,用数据确认变化,而不是凭感觉判断。
连接层优化不能保证收录,也不会直接提升排名。它解决的是蜘蛛能不能稳定、高效地把页面取回去这一步,属于基础工程,而不是增长手段。