http是日常工作中打交道最多的技术之一,无论页面要渲染具体内容的html,还是与后台数据的读取。都离不开它。

缓存的好处

http缓存可以减少接口的请求,减少带宽,以及浏览器主进程对网络请求的开销。例如:客户端访问一个服务器读取同一个信息文件。那么,多次请求的结果都一样,就没必要反复与服务端创建连接,下载数据。此外,缓存可以避免时延,减少对网络和服务器负载影响的依赖。这样在弱网下,也可以保持尽可能被正常使用。

缓存的方式

强缓存和协商缓存是http缓存的两大方式。

强缓存是通过HTTP请求头上的cache-control和expires字段完成的。原理就是服务器会对资源加一个有效期,当再次请求资源时,用当前时间和有效期进行比较。在有效期的则算命中缓存了。

然后我们再说下Cache-Control和Expires的区别。

  • Cache-Control: max-age:max-age可以用来设置缓存存储的最大周期,超过这个时间缓存被认为过期 (单位秒)。与Expires相反,时间是相对于请求的时间。

  • Expires:响应头包含日期或者时间,表示该时间之后,响应过期。无效的日期,比如 0等,代表着过去的日期,即该资源已经过期。

这里要注意的是如果在Cache-Control响应头设置了 "max-age" 或者 "s-max-age" 指令,那么 Expires 头会被忽略。

协商缓存,顾名思义,客户端和服务端协商,确认客户端缓存是否需要更新。也就是它发生在缓存过期后。而且它通过Last-Modified 和 If-Modified-Since两个字段完成。

协商情况有两种:

  • 资源内容已经被修改,那么协商缓存会获取最新资源。这里的新老资源在同一个位置上。然后再给到客户端。
  • 资源数据未发生变更,这时协商缓存只会修改有效期,也就是只进行头部更新,不发生实际数据传输。

这里要注意的是当If-None-Match出现时,If-Modified-Since会被忽略掉,除非服务器不支持If-None-Match

结束语

希望通过本文,可以帮助大家了解http的作用,并且掌握强缓存和协商缓存的原理(大体上)。此外,也给出了两个注意事项。帮助大家在常用细节上不出错。

深窥自己的心,而后发觉一切的奇迹在你自己。——培根