HTTP缓存

Posted guolizhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP缓存相关的知识,希望对你有一定的参考价值。

浏览器端的缓存可以分为强制缓存对比缓存

强制缓存

如果是强制缓存,浏览器会直接读取浏览器本地存储的缓存。

如果未失效,则直接使用缓存数据。

如果缓存失效,则会请求服务器端,服务器端返回缓存规则和数据。

对比缓存

如果是对比缓存,浏览器首先回去服务器端验证该缓存是否失效。

如果未失效,则通知浏览器该资源未失效。

如果已失效,则返回给浏览器最新的数据和缓存规则。并且将缓存规则和最新的数据写入浏览器本地缓存

强制缓存规则

服务器端会返回两个字段Expires(HTTP1.0)Cache-Control(HTTP1.1)两个字段来控制强制缓存

由于客户端的时间不太可控,因此在HTTP1.1中,新增了Cache-Control,该字段可以直接设置资源的缓存时间max-age。这样一来,资源的缓存期可以使用服务器端的时间了。

对比缓存规则

对比缓存存在两套规则

第一种:ETag/If-None-Match这套规则的优先级会高于下面介绍的第二种规则

在第一次服务器端返回一个资源时,在响应头信息里面会包含一个ETag的字段,该字段有服务器端生成。

下一次浏览器端判断这个资源是不是过期时,会带上一个If-Modifed-Since的信息,该信息就是上一次的ETag信息。用于验证这个资源是不是过期。

如果相同,则返回304的状态码

如果不同,则返回200的状态码以及最新的资源

第二种:Last-Modified/If-Modified-Since,本套规则的优先级低于第一套

在第一次返回一个资源时,响应头信息里面会包含一个Last-Modifed的字段,该字段有服务器端生成,标识了该资源的上一次修改时间

浏览器端再次请求时,会带上一个If-Modifed-Since的字段,该信息就是Last-Modifed的时间

如果资源的最后修改时间大于If-Modifed-Since,就返回200和最新的资源

如果资源的最后修改时间小于If-Modifed-Since,就返回304,浏览器继续使用本地缓存

以上是关于HTTP缓存的主要内容,如果未能解决你的问题,请参考以下文章

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

如何缓存片段视图

phalcon: 缓存片段,文件缓存,memcache缓存

如何使用yii2的缓存依赖特性

在每个用户的Rails中使用片段缓存

从 Apollo 缓存中读取特定类型的所有片段