HTTP 缓存原理介绍

版权声明:Gavin原创,转载请保留原博文地址 https://blog.csdn.net/hiredme/article/details/73468040

HTTP的缓存,主要存在本地浏览器和web代理服务器中。

HTTP缓存

1.响应头ETag

ETag全称Entity Tag,用来标识一个资源。
在服务器返回响应时包含这个值,不同的资源response返回不一样的ETag。
其实就是标识,hash值。
在下次再请求相同的资源时,浏览器会在If-None-Match中带着ETag的传给服务器,如果服务器发现ETag和上次相同,直接返回304资源未发生改变,浏览器使用缓存数据。

2.响应头Cache-Control

Cache-Control 主要用来控制缓存相关的东西。
Cache-Control 头在 HTTP/1.1 规范中定义,取代了之前用来定义响应缓存策略的头(例如 Expires)。当前的所有浏览器都支持 Cache-Control,因此,使用它就够了。

2.1 max-age
max-age是允许响应被重用的时间,通俗的说是缓存有效期,单位是 秒。
要注意的是,在max-age时间内,即使服务器资源发生改变,浏览器也不会得到通知,会继续使用缓存。
比如,max-age=60,在60秒内,不会向服务器发生任何请求,包括验证资源是否邮箱,而直接使用缓存数据。

2.2 public和private
public 是用来声明此缓存是公共的,浏览器和web代理服务器都可以缓存。
private 声明此缓存是私有的,web代理不允许缓存(比如CDN)
默认情况下是 public 。
比如 Cache-Control:public, max-age=60 = Cache-Control: max-age=60

2.3 no-cache
no-cache 的误区!no-cache不是指 不缓存,而是指每次请求资源之前 都先向服务器验证 该资源是否发生改变。
验证方式就是 上面提到的ETag

2.4 no-store
这个才是真正的不缓存,只要设置了Cache-Control:no-store,那么所有的浏览器和代理都不会缓存数据,每次都是向服务器请求最新的数据。

3.缓存结构图

这里写图片描述

猜你喜欢

转载自blog.csdn.net/hiredme/article/details/73468040
今日推荐