HTTP 缓存原理介绍

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.缓存结构图

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值