美文网首页
HTTP cache

HTTP cache

作者: 查桐宁 | 来源:发表于2018-07-05 15:33 被阅读0次

cache是一种存储给定资源,当下次有请求时用副本代替重新从服务器拉取源数据的一种技术。一般只有GET请求的资源才会被缓存。

主要可以分为两大类:privateshared

  • shared 被多个用户共享的cache,第一个请求会到服务器,其他的都直接获取被shared cache,eg: proxy caches
  • private 专门给单一用户的cache,每个用户的第一个请求都会到服务器,接下来的会直接使用本地cache, eg: browser caches
1、Cache-control(HTTP/1.1)
  • 不缓存: 每个请求都会发送到服务端,每次重新下载资源
    Cache-Control: no-store
    Cache-Control: no-cache, no-store, must-revalidate

no-cache意思不是do not cache, 而是说在每一次使用cache response之前需要revalidate with server

must-revalidate指当资源被过期之后必须revalidate之后才能被使用

  • 验证缓存
    Cache-Control: no-cache
  • 共有和私有缓存
    Cache-Control: private // 只会被单个用户缓存,比如浏览器缓存,不会被存为 shared cache
    Cache-Control: public // 能被任何缓存机制缓存。在一些不能被缓存的情况下,比如HTTP授权或者非正常可缓存状态码(200, 301),缓存资源
  • 过期
    Cache-Control: max-age: 31536000 // 设置最大过期时间,相对于请求时间,在缓存静态文件时很有用
2、Pragma(HTTP/1.0)
    Pragma: no-cache

Cache-Control: no-cache一样作用,可作为其在HTTP/1.0向后兼容的方案。

3、Freshness(过期与否)

缓存驱逐(cache eviction):理论上缓存是能被永久存储的,但是考虑缓存空间是有限制的,所有会有资源定期被从缓存中移除。

有效期限(lifeTime)

  • Cache-Control: max-age: N N就是有限期限
  • 很多情况都没有max-age这种设置,这样会去查看是否存在Expires头, Expire - Date值就是lifeTime
  • 如果上面都没有,找Last-Modify(Date - LastModify) / 10值就是lifeTime
    过期时间:
    expirationTime = responseTime + freshnessLifetime - currentAge
    // currentAge接近于0,会 `Age`头影响
    Last-Modified: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
    // Last-Modify需要配合 If-Modified-Since/If-None-Match
    // Last-Modify通常用来缓存与ETag无关的一些实体
4、缓存验证

点击重新加载按钮或者有Cache-control:must-revalidate头都会触发revalidation。而只有提供了强验证器和弱验证器才会验证。

强验证器:当Entity改变时,哪怕只是1bit的改变,Entity Tag就会改变时就是Strong validator

弱验证器:当Entity改变时,但Entity Tag不一定变化时就是weak validator

在资源过期之后,validator能让客户端不直接拉取新资源而是在可以在请求头携带特定标识让服务器去验证该资源是否真正失效,如果无效返回200和新的资源,如果还有效则返回304让浏览器继续使用缓存,并更新过期时间。

    ETag: W/"<etag_value>"
    ETag: "<etag_value>
    
    Etag: "686897696a7c876b7e"
    If-None-Match: "686897696a7c876b7e"

ETag是用来标识特定版本的资源的响应头,客户端是不知道这些标识的含义的(opaque-to-the-useragent),配合
If-None-Match使用。

Last-Modified是一种weak validator,配合If-Modified-SinceIf-Unmodified-Since

相关文章

  • http cache

  • HTTP cache

    cache是一种存储给定资源,当下次有请求时用副本代替重新从服务器拉取源数据的一种技术。一般只有GET请求的资源才...

  • HTTP Cache

    HTTP Cache Last-Modified 服务器为了通知浏览器当前文件的版本,会发送一个上次修改时间的标签...

  • http: cache

    http: 缓存 http/1.0 Pragma:它用于向后兼容HTTP / 1.0缓存,其中Cache-Cont...

  • HTTP Cache

    本文为web开发系列的一部分。 HTTP协议的Cache机制 HTTP协议提供Cache机制,当相应数据没有变化时...

  • HTTP Cache

    缓存是一个很大的话题,毕竟缓存作为一种性能优化的常规手段,在许多地方都有应用到。本文主要讨论web领域下浏览器与代...

  • 缓存相关

    Expires和Cache-Control Expires: Http1.0Cache-Control: Http...

  • HTTP 缓存策略

    引用自:[ HTTP 缓存策略](http://foofish.net/blog/95/http-cache-po...

  • 前端性能优化篇之设置缓存Expires、cache-contro

    1. Cache -Control HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。 在请...

  • http cache and nginx configurati

    概述 浏览器http缓存,既是网页静态资源服务性能优化的一把利器,也是无数web开发者在工作之初谈之色变的一大难题...

网友评论

      本文标题:HTTP cache

      本文链接:https://www.haomeiwen.com/subject/erypuftx.html