计算机基础---HTTP缓存机制

HTTP缓存机制

一、HTTP/1.0 的缓存机制

  1. If-Modified-Since

    • 客户端在首次请求资源时,服务器会在响应头中返回资源的最后修改时间
    • 后续客户端再次请求该资源时,会在请求头中带上If-Modified-Since,其值为上次服务器返回的资源最后修改时间。
    • 服务器接收到请求后,会比较资源的实际最后修改时间与If-Modified-Since的值。如果资源没有被修改,服务器返回304 Not Modified状态码,客户端直接使用本地缓存的资源,减少数据传输量。
    • 优点是可以根据资源的修改时间来判断是否使用缓存,比较简单直接。缺点是如果资源的修改时间没有变化,但资源的内容实际上发生了变化(例如服务器内部对资源进行了一些不影响修改时间的操作),客户端可能会使用过期的缓存。
  2. Expires

    • 服务器在响应头中设置资源的过期时间
    • 客户端在接收到响应后,会根据Expires的值判断资源是否过期。如果资源未过期,客户端直接使用本地缓存的资源。
    • 优点是简单易用,可以直接指定资源的过期时间。缺点是依赖于客户端的时钟,如果客户端时钟不准确,可能会导致缓存判断错误。此外,服务器需要准确地预测资源的过期时间,这在动态内容较多的情况下比较困难。

二、HTTP/1.1 引入的更多缓存控制策略

  1. Entity tag(ETag):

    • 服务器为每个资源生成一个唯一的标识,称为实体标签(ETag)
    • 客户端在首次请求资源时,服务器在响应头中返回 ETag 值。
    • 后续客户端再次请求该资源时,会在请求头中带上If-None-Match,其值为上次服务器返回的 ETag 值。
    • 服务器接收到请求后,会比较资源的当前 ETag 值与If-None-Match的值。如果值不匹配,说明资源发生了变化,服务器返回完整的资源内容;如果值匹配,说明资源未发生变化,服务器返回304 Not Modified状态码,客户端使用本地缓存。 304 Not Modified:自从上次请求后,请求的资源未修改过。
    • 优点是不依赖于资源的修改时间,可以更准确地判断资源是否发生变化。即使资源的修改时间没有变化,但内容发生了变化,也能通过 ETag 检测到。
  2. If-Unmodified-Since

    • If-Modified-Since类似,但它要求资源在指定的时间之后没有被修改过才返回资源内容。如果资源在指定时间之后被修改了,服务器返回412 Precondition Failed状态码。
    • 可以用于确保客户端在进行某些操作(如上传新内容覆盖旧内容)时,资源没有被其他客户端修改过。
  3. If-Match

    • If-None-Match相反,它要求资源的 ETag 值与请求头中的值匹配时才返回资源内容。如果不匹配,服务器返回412 Precondition Failed状态码。
    • 可以用于确保客户端在进行某些操作时,资源的状态符合预期。

这些更多的缓存控制策略为开发者提供了更灵活、更准确的缓存管理方式,可以根据不同的应用场景选择合适的缓存头来控制缓存策略,提高了 HTTP 协议的性能和效率。

你可能感兴趣的:(http,缓存,网络协议)