304 未修改
什么是 304 未修改响应?
304 Not Modified HTTP 服务器响应代码表示所请求的资源自上次加载以来尚未被修改,无需再次传输。
对于浏览器来说,这意味着可以向用户显示资源的缓存版本。对于 Googlebot 等抓取工具来说,这意味着无需重新抓取页面,因为页面上没有任何更改。
它的工作原理如下:
- 当客户端(浏览器或爬虫)第一次从 Web 服务器请求资源时,服务器会发送请求的资源(带有 200 OK HTTP 代码)及其hash代码,称为ETag。客户端还记录请求页面/资源的时间。
- 当客户端再次请求资源时,服务器检查If-None-Match和/或If-Modified-Since请求客户端的读取器。这就是所谓的条件 HTTP 请求。
If-None-Match包含ETag(内容hash代码)。如果与服务器上的值匹配,则表明内容没有更改,无需再次加载(当内容更改时,其哈希码也会更改)。
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响应代码是节省抓取预算的绝佳机会。Google 的抓取工具不会重新抓取未更改的页面,而是能够抓取更多新的和更新的页面。