搜索引擎优化术语表 / 304 未修改

304 未修改

什么是 304 未修改回复?

304 Not Modified HTTP 服务器响应代码表示请求的资源自上次加载后未被修改,这意味着无需再次传输。对于浏览器来说,这意味着可以向用户显示资源的缓存版本。对于 Googlebot 等爬虫来说,这意味着无需重新抓取页面,因为页面上没有任何变化。

如何使用

以下是对 304 Not Modified 响应工作原理的简单解释:

  1. 初始请求客户端(浏览器或爬虫)首次向网络服务器发送资源请求时,服务器会以 200 OK HTTP 代码发送所请求的资源及其散列代码(称为 ETag)。客户端还会记录请求页面/资源的时间。

  2. 后续请求当客户端再次请求资源时,服务器会检查客户端的If-None-Match和/或If-Modified-Since标头。这就是所谓的有条件 HTTP 请求。

    • If-None-Match包含 ETag(内容哈希代码)。如果它与服务器上的值相匹配,则表明内容没有改变,无需再次加载(内容改变时,其散列码也会改变)。
    • If-Modified-Since包含客户端最后一次请求内容的日期和时间。如果服务器发现内容在此日期后没有更改,则无需将资源发送给客户端。
  3. 服务器响应在这两种情况下,如果内容没有改变,服务器都会响应 304 HTTP 代码。

同时使用If-None-MatchIf-Modified-Since 时,If-None-Match优先于If-Modified-Since

浏览器和爬虫行为

当浏览器从服务器接收到 304 Not Modified HTTP 代码时,它会向用户显示缓存版本,这也是客户端重定向代码之一。对于爬虫来说,收到 304 响应意味着它们可以避免再次下载相同的内容,从而节省带宽和资源。

为什么 304 响应代码很重要?

对于小型网站来说,304 HTTP 代码提供的缓存优势可能并不明显。但是,对于大型网站来说,304 响应代码具有很大的优势:

  • 性能优化通过利用缓存内容,浏览器可以更快地为用户加载页面,从而改善整体用户体验。
  • 抓取预算管理对于大型网站来说,抓取预算管理至关重要。谷歌的爬虫不会重新抓取没有变化的页面,从而可以专注于新的和更新的内容。这有助于确保新鲜内容更高效地被索引。

使用未修改 304 的最佳做法

  • 设置适当的缓存标头确保服务器被配置为发送适当的ETagLast-Modified 标头
  • 监控缓存效率定期检查服务器日志,查看发出 304 响应的频率,并根据需要调整缓存策略。
  • 优化内容交付使用支持高效缓存机制的内容交付网络 (CDN),以减少延迟并缩短加载时间。

有关 HTTP 状态代码以及网络性能和搜索引擎优化最佳实践的更多详细信息,请参阅Mozilla Developer Network (MDN)Google's Web Fundamentals 等权威资料来源。