计算机网络HTTP:HTTP缓存

缓存命中 -> 缓存再验证成功 -> 缓存再验证失败 = 缓存未命中

  • Cache_Control

    可缓存性 解释
    public HTTP请求返回的过程中,在cache_control中设置这个值,代表HTTP请求返回的内容所经过的任何路径当中(包括中间一些HTTP代理服务器以及发出请求的客户端浏览器),都可以对返回内容进行缓存操作
    private 代表只有发起请求的浏览器才可以进行缓存
    no_cache 可以在本地进行缓存,但每次发请求时,都有向服务器进行验证,如果服务器允许,才能使用本地缓存
    no_store 本地和代理服务器都不可以存储缓存,每次都要重新请求,拿到内容
    no_transform 主要用在proxy服务器,不允许进行格式转换
  • max_age 和 Expires
    • 浏览器会先检查缓存是否过期,如果没有过期,就不向服务器发起请求,直接使用本地缓存,这叫做缓存命中。
    • max_age:最大缓存时间
    • Expires:有效期
    • 这两个同时存在时,max_age优先生效
  • Etag 和 Last_Modified
    • 如果没有max_age和Expires标签,或者验证失败,则浏览器向服务器发起请求,浏览器通过Etag或Last_Modified判断浏览器缓存的内容是否过期。
      • 如果没过期返回304(服务端已经执行了请求,但是响应没有改变),这叫做缓存再验证成功,浏览器更新本地缓存的max_age和Expires,并且使用本地缓存。
      • 如果过期了,这叫做缓存再验证失败(缓存未命中),则返回新的数据。
    • Etag:被请求变量的实体标记(与客户端请求头If_None_Match对应)
    • Last_Modified:被请求变量的最后修改时间(与客户端请求头If_Modified_Since对应)
    • 如果两者都有,就必须同时验证,并且两者都满足才会返回304

猜你喜欢

转载自www.cnblogs.com/xiaobaizzz/p/12302043.html