http缓存

2018-04-03  本文已影响0人  TRYao

前后端的http交互中,使用缓存能很大程度上的提升效率,而且基本上对性能有要求的前端项目都是必用缓存的

强缓存与弱缓存


缓存可以简单的划分成两种类型:强缓存(200 from cache)与协商缓存(304)
区别简述如下:

对于协商缓存,使用Ctrl + F5强制刷新可以使得缓存无效

但是对于强缓存,在未过期时,必须更新资源路径才能发起新的请求(更改了路径相当于是另一个资源了,这也是前端工程化中常用到的技巧)

缓存头部简述


上述提到了强缓存和协商缓存,那它们是怎么区分的呢?

答案是通过不同的http头部控制
先看下这几个头部:

If-None-Match/E-tag
If-Modified-Since/Lasted-Modified
Cache-Control/Max-Age
Pragma/Expires

这些就是缓存中常用到的头部,这里不展开。仅列举下大致使用。

属于强缓存控制的:

(http1.1)Cache-Control/Max-Age
(http1.0)Pragma/Expires

注意:Max-Age不是一个头部,它是Cache-Control头部的值
属于协商缓存控制的:

(http1.1)If-None-Match/E-tag
(http1.0)If-Modified-Since/Last-Modified

可以看到,上述有提到http1.1和http1.0,这些不同的头部是属于不同http时期的

头部的区别


首先明确,http的发展是从http1.0到http1.1

而在http1.1中,出了一些新内容,弥补了http1.0的不足。

http1.0中的缓存控制:

http1.1中的缓存控制:

Max-Age相比Expires?

Expires使用的是服务器端的时间

但是有时候会有这样一种情况-客户端时间和服务端不同步

那这样,可能就会出问题了,造成了浏览器本地的缓存无用或者一直无法过期

所以一般http1.1后不推荐使用Expires

而Max-Age使用的是客户端本地时间的计算,因此不会有这个问题

因此推荐使用Max-Age。

注意,如果同时启用了Cache-Control与Expires,Cache-Control优先级高。

E-tag相比Last-Modified?

Last-Modified:

而E-tag:

各大缓存头部的整体关系如下图:

缓存头部

文章参考:从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!

上一篇 下一篇

猜你喜欢

热点阅读