HTTP缓存

http缓存

分享文章:https://www.cnblogs.com/chenqf/p/6386163.html

Cache-control

Cache-control 是HTTP/1.1 定义,取代了之前的Expires(过期时间),
重要的参数:

  • "max-age = "
    设置指令从请求开始,允许响应被重用的时间,不向服务器发送请求,直接取浏览器缓存.

  • public
    表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存,不是必须.声明max-age就OK

  • private
    表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)

  • no-store
    直接禁止浏览器以及中间代理缓存,每次都下载完整的响应

  • no-cache
    在使用已存储的缓存数据前,发送带验证器(ETag)的请求到服务器.

ETag

服务器通过某种算法,给资源计算出一个标识符,返回响应时在头部加上"Etag:唯一标识符",客户端保留Etag字段,下次请求时通过请求头 "If-None-Match: ETag-value"后端校验相同就直接回送304,告诉浏览器使用缓存.浏览器会替我们完成所有工作:它会自动检测之前是否指定了验证令牌,它会将验证令牌追加到发出的请求上,并且它会根据从服务器接收的响应在必要时更新缓存时间戳,我们唯一要做的就是确保服务器提供必要的 ETag 令牌。

Last-Modified

服务器将资源传递给客户端时,会将资源最后更改的时间以“Last-Modified: GMT”的形式加在实体首部上一起返回给客户端。
客户端会为资源标记上该信息,下次再次请求时,会把该信息附带在"If-Modified-Since: Last-Modified-value"一并带给服务器去做检查,若传递的时间值与服务器上该资源最终修改时间是一致的,则说明该资源没有被修改过,直接返回304。

如果 Last-Modified 和 ETag 同时被使用,则要求它们的验证都必须通过才会返回304,若其中某个验证没通过,则服务器会按常规返回资源实体及200状态码。

你可能感兴趣的:(HTTP缓存)