一.概述
通过重新使用以前获取的资源,可以显着提高网站和应用程序的性能。Web缓存减少了等待时间和网络流量,因此减少了显示资源表示形式所需的时间。通过使用HTTP缓存,网站变得更加敏感。
二.与缓存相关的HTTP首部字段
1. 通用首部字段(就是请求报文和响应报文都能用上的字段)

2. 请求首部字段

3.响应首部字段

4.实体首部字段

三.缓存关键实现的进化史
http本地缓存(强缓存)
在 http1.0 时代,给客户端设定缓存方式可通过两个字段——“Pragma”和“Expires”来规范。虽然这两个字段早可抛弃,但为了做http协议的向下兼容,你还是可以看到很多网站依旧会带上这两个字段。
1.Pragma
Pragma是HTTP / 1.0标头,未指定用于HTTP响应,因此,如果请求中省略标头字段Cache-Control,尽管它的行为与之相同,但它不是常规HTTP / 1.1 标头的可靠替代。使用仅适用于HTTP / 1.0客户端的向后兼容性。如下图使用fidder抓包工具,调试微软的官方网站,这个网站为了向下兼容,出现了“Pragma”和“Expires字段

通过fidder设置请求参数:
//以下头部信息前者缓存半天,后者不保存。
Cache-Control:pulic,max-age=43200
Pragma:no-cache

再次请求:

再次请求时发现,还是会向服务器发起请求,此时Cache-Control字段都没了,值保留Pragma字段,即Pragma优先级大于Cache-Control
2.Expires
有了Pragma来禁用缓存,自然也需要有个东西来启用缓存和定义缓存时间,对http1.0而言,Expires就是做这件事的首部字段。
Expires的值对应一个GMT(格林尼治时间),比如Sat, 23 May 2020 12:44:25 GMT来告诉浏览器资源缓存过期时间,如果还没过该时间点则不发请求。

修改操作同上,我们通过Pragma禁用缓存,又给Expires定义一个还未到期的时间,刷新页面时发现均发起了新请求,这意味着Pragma字段的优先级会更高。有兴趣的可以去试一下
但是响应报文中Expires所定义的缓存时间是相对服务器上的时间而言的,如果客户端上的时间跟服务器上的时间不一致(特别是用户修改了自己电脑的系统时间),那缓存时间可能就没啥意义了。所以就出现新的缓存实现,Cache-Control
3.Cache-Control
针对上述的“Expires时间是相对服务器而言,无法保证和客户端时间统一”的问题,http1.1新增

本文深入探讨了HTTP缓存机制,从通用首部字段到关键实现的进化,包括Pragma、Expires和Cache-Control的作用。文章还讨论了http本地缓存和缓存校验字段(如Last-Modified和ETag)的使用,以及如何优化HTTP缓存策略以提高性能和减少网络流量。
最低0.47元/天 解锁文章
1353

被折叠的 条评论
为什么被折叠?



