什么是 304 未修改回复?
304 Not Modified HTTP 服务器响应代码表示请求的资源自上次加载后未被修改,这意味着无需再次传输。对于浏览器来说,这意味着可以向用户显示资源的缓存版本。对于 Googlebot 等爬虫来说,这意味着无需重新抓取页面,因为页面上没有任何变化。
如何使用
以下是对 304 Not Modified 响应工作原理的简单解释:
-
初始请求客户端(浏览器或爬虫)首次向网络服务器发送资源请求时,服务器会以 200 OK HTTP 代码发送所请求的资源及其散列代码(称为 ETag)。客户端还会记录请求页面/资源的时间。
-
后续请求当客户端再次请求资源时,服务器会检查客户端的
If-None-Match
和/或If-Modified-Since
标头。这就是所谓的有条件 HTTP 请求。If-None-Match
包含 ETag(内容哈希代码)。如果它与服务器上的值相匹配,则表明内容没有改变,无需再次加载(内容改变时,其散列码也会改变)。If-Modified-Since
包含客户端最后一次请求内容的日期和时间。如果服务器发现内容在此日期后没有更改,则无需将资源发送给客户端。
-
服务器响应在这两种情况下,如果内容没有改变,服务器都会响应 304 HTTP 代码。
同时使用If-None-Match
和If-Modified-Since 时
,If-None-Match
优先于If-Modified-Since
。
浏览器和爬虫行为
当浏览器从服务器接收到 304 Not Modified HTTP 代码时,它会向用户显示缓存版本,这也是客户端重定向代码之一。对于爬虫来说,收到 304 响应意味着它们可以避免再次下载相同的内容,从而节省带宽和资源。
为什么 304 响应代码很重 要?
对于小型网站来说,304 HTTP 代码提供的缓存优势可能并不明显。但是,对于大型网站来说,304 响应代码具有很大的优势:
- 性能优化通过利用缓存内容,浏览器可以更快地为用户加载页面,从而改善整体用户体验。
- 抓取预算管理对于大型网站来说,抓取预算管理至关重要。谷歌的爬虫不会重新抓取没有变化的页面,从而可以专注于新的和更新的内容。这有助于确保新鲜内容更高效地被索引。
使用未修改 304 的最佳做法
- 设置适当的缓存标头确保服务器被配置为发送适当的
ETag
和Last-Modified
标头
。 - 监控缓存效率定期检查服务器日志,查看发出 304 响应的频率,并根据需要调整缓存策略。
- 优化内容交付使用支持高效缓存机制的内容交付网络 (CDN),以减少延迟并缩短加载时间。
有关 HTTP 状态代码以及网络性能和搜索引擎优化最佳实践的更多详细信息,请参阅Mozilla Developer Network (MDN)和Google's Web Fundamentals 等权威资料来源。