2、cache-control
cache-control:max-age=number ,这是 http1.1 时出现的 header 信息,主要是利用该字段的 max-age 值来进行判断,它是一个相对值;资源第一次的请求时间和Cache-Control 设定的有效期,计算出一个资源过期时间,再拿这个过期时间跟当前的请求时间比较,如果请求时间在过期时间之前,就能命中缓存,否则未命中,cache-control 除了该字段外,还有下面几个比较常用的设置值:
- no-cache: 不使用本地缓存 。需要使用缓存协商,先与服务器确认返回的响应是否被更改,如果之前的响应中存在 ETag ,那么请求的时候会与服务端验证,如果资源未被更改,则可以避免重新下载 。
- no-store: 直接禁止浏览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源 。
- public: 可以被所有的用户缓存,包括终端用户和 CDN 等中间代理服务器 。
- private: 只能被终端用户的浏览器缓存,不允许 CDN 等中继缓存服务器对其缓存 。
Tips:如果 cache-control 与 expires 同时存在的话,cache-control 的优先级高于 expires 。协商缓存协商缓存都是由浏览器和服务器协商,来确定是否缓存,协商主要通过下面两组 header 字段,这两组字段都是成对出现的,即第一次请求的响应头带上某个字段 (Last-Modified或者 Etag ) ,则后续请求会带上对应的请求字段 (If-Modified-Since 或者 If-None-Match ) ,若响应头没有 Last-Modified 或者 Etag字段,则请求头也不会有对应的字段 。
1、Last-Modified/If-Modified-Since
二者的值都是 GMT 格式的时间字符串,具体过程:
- 浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的同时,在 respone 的 header 加上 Last-Modified字段,这个 header 字段表示这个资源在服务器上的最后修改时间 。
- 浏览器再次跟服务器请求这个资源时,在 request 的 header 上加上 If-Modified-Since 字段,这个 header 字段的值就是上一次请求时返回的 Last-Modified 的值 。
- 服务器再次收到资源请求时,根据浏览器传过来 If-Modified-Since 和资源在服务器上的最后修改时间判断资源是否有变化,如果没有变化则返回 304NotModified ,但是不会返回资源内容;如果有变化,就正常返回资源内容 。当服务器返回 304NotModified 的响应时, response header 中不会再添加 Last-Modified的header ,因为既然资源没有变化,那么 Last-Modified 也就不会改变,这是服务器返回 304 时的 response header 。
- 浏览器收到 304 的响应后,就会从缓存中加载资源 。
- 如果协商缓存没有命中,浏览器直接从服务器加载资源时,Last-Modified 的 Header 在重新加载的时候会被更新,下次请求时,If-Modified-Since 会启用上次返回的Last-Modified 值 。
这两个值是由服务器生成的每个资源的唯一标识字符串,只要资源有变化就这个值就会改变;其判断过程与 Last-Modified、If-Modified-Since 类似,与 Last-Modified 不一样的是,当服务器返回 304NotModified 的响应时,由于 ETag 重新生成过, response header中还会把这个 ETag 返回,即使这个 ETag 跟之前的没有变化 。
Tips:Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304 。Service Worker1、什么是 Service Worker
Service Worker 本质上充当Web应用程序与浏览器之间的代理服务器,也可以在网络可用时作为浏览器和网络间的代理 。它们旨在(除其他之外)使得能够创建有效的离线体验,拦截网络请求并基于网络是否可用以及更新的资源是否驻留在服务器上来采取适当的动作 。他们还允许访问推送通知和后台同步API 。
Service worker 可以解决目前离线应用的问题,同时也可以做更多的事 。Service Worker 可以使你的应用先访问本地缓存资源,所以在离线状态时,在没有通过网络接收到更多的数据前,仍可以提供基本的功能(一般称之为 Offline First) 。这是原生App 本来就支持的功能,这也是相比于 web app ,原生 app 更受青睐的主要原因 。
推荐阅读
- 从模拟接口到8K传输 显卡接口这些年变得太多
- 显示器高刷屏比低刷屏到底强多少?看这一目了然
- 因为迟到被扣工资合理吗 公务员上班迟到会怎样处理
- 吃什么去火 13种中草药去火有神效
- 导游|小饭店老板/导游皆沦为2022十大最困难职业,前三名你肯定想不到
- 芯片|芯片产能短期难以恢复:ASML称到2023年仍将紧张
- 电话|男子裸聊险被骗4800元:报警后接到缅甸来电破口大骂
- 巧克力|女生花5万买巧克力送校友被网暴 本人回应:从未后悔、清者自清
- 《王者荣耀》到贵7大概多少钱?
- 鸡子酒的功效与作用