客户端和代理服务器都可以强制缓存标识与数据
优采云 发布时间: 2021-07-15 21:11客户端和代理服务器都可以强制缓存标识与数据
对于强制缓存,将在服务器响应的标头中使用两个字段来指示-Expires 和 Cache-Control。
过期
Exprires 的值是服务器返回数据的过期时间。当再次请求的请求时间小于返回的时间时,直接使用缓存的数据。但是,服务器时间和客户端时间之间可能存在误差,这也会导致缓存命中错误。另一方面,Expires 是 HTTP1.0 的产物,所以现在大多使用 Cache-Control 代替。
缓存控制
Cache-Control 有很多属性,不同的属性有不同的含义。 private:客户端可以缓存 public:客户端和代理服务器都可以缓存 max-age=t:t 秒后缓存内容失效 no-cache:需要协商缓存来验证缓存数据 no-store:不会缓存任何内容。
协商缓存
需要比较协商缓存来判断是否可以使用缓存。当浏览器第一次请求数据时,服务器将缓存标识符和数据响应给客户端,客户端将它们备份在缓存中。客户端再次请求时,会将缓存中的标识符发送给服务器,服务器根据标识符进行判断。如果没有过期,则返回304状态码,浏览器获取到状态码后可以直接使用缓存的数据。对于协商缓存,我们需要重点了解缓存标识。下面我们将重点介绍它的两种缓存方案。
上次修改
Last-Modified:当服务器响应请求时,会告诉浏览器资源的最后修改时间。
if-Modified-Since:当浏览器再次向服务器请求时,请求头会收录这个字段,后面是缓存中获取的最后修改时间。服务器接收请求头中已有的if-Modified-Since,并与请求资源的最后修改时间进行比较。如果一致,则返回 304 和响应头。浏览器只需要从缓存中获取信息。字面意思是:从某个时间点开始,文件是否被修改过
<p>如果真的被修改了:那么开始整体发送响应,服务器返回:200 OK 如果没有被修改:那么只需要发送响应头,服务器返回:304 Not Modified