关于 cache 控制
HTTP/1.0 提供了一种简单的 cache 机制。一个源头服务器,使用一个带有时间戳的 Expires 头部标识在一个响应中,这样的意思就是表示何时过期。进一步还有条件请求:在请求头部中包含一个 If-Modified-Since 字段,指定的是响应头中的 Last-Modified 时间戳,这样服务器就响应 304,暗示被缓存的条目是有效的,或者重新取一遍条目之后返回 200。
HTTP/1.0 还包含一个机制:Pragma: no-cache,对于客户端而言,意思是一个请求不能从 cache 中获得。
HTTP/1.0 的机制大体上是没有问题的,但是可能有缺点,没有允许服务器或者客户端对 cache 进行完全的或者明确的控制。
HTTP/1.1 尝试提供明确的和可扩展的协议机制,保留了 1.0 中的设计。
在 1.1 中,一个 cache 条目在达到过期时间之前是新鲜的,在过期之后则是不新鲜的。一个 cache 不需要丢弃一个不新鲜的条目,但是在返回给客户端之前,它通常必须重新从源头服务器那里获得,协议允许源头服务器和终端用户来覆盖这种行为。
在 HTTP/1.0 中,一个 cache 条目使用 If-Modified-Since 条目来重新强刷获得一个条目,它使用了绝对时间戳,带来的明显问题就是时间偏移可以。因此在 HTTP/1.1 中引入了更一般的概念:etag。HTTP 服务器将 etag 头部放在响应中。但问题是在大网站中多台机器的同一资源 etag 应该相同,但实际计算出来不同,因此不适合使用。 » 阅读更多: HTTP 头部 cache 控制字段