http缓存

关于缓存

什么是缓存?

页面加载完成一次后,再次加载页面,有些资源没必要再次向服务端获取,暂存一份。

为什么要缓存?

优化网络请求,让页面加载更快

哪些资源可以被缓存?

通常情况下:静态资源(js css img)可以被缓存,html不能被缓存

强制缓存

在这里插入图片描述

浏览器向服务器初次发送请求,服务器返回资源和 Cache-Control 。当服务器认为该资源可以被缓存时,才返回 Cache-Control ,如果服务器认为该资源不适合被缓存时,就不会返回 Cache-Control
在这里插入图片描述
浏览器再次发送请求时,如果该资源有 Cache-Control 并且时间并未过期,浏览器则从本地获取缓存下来的资源,不会向服务端获取。
在这里插入图片描述
如果缓存失效了(时间过期了),就再次向服务端请求资源,服务端返回资源和 Cache-Control

Cache-Control

存在于 Response Headers 中,用于控制强制缓存的逻辑

Cache-Control 的值

max-age 缓存时间
no-cache 不缓存,交给服务端做缓存处理
no-store 不缓存,也不让服务端做缓存处理,直接让服务端返回资源
private 最终用户缓存
public 路由代理缓存

关于Expires

也在 Response Headers 中
也控制缓存是否过期
已被 Cache-Control 代替

协商缓存(对比缓存)

服务端缓存(判断一个资源是否可以被缓存,并不是缓存在服务的端)
服务端判断客户端资源是否和服务端资源一样
一致则返回304,否则返回200和最新资源

资源标识

在 Response Headers 中
Last -Modified 资源的最后修改时间
Etag 资源的唯一标识(一个字符串,服务端根据资源内容计算出来的)
对应的key
if-Modified-Since : Last-Modified
if-None-Match : Etag

Last-ModifiedEtag 共存时,会优先使用 Etag
因为
Last-Modified 只能精确到秒级
如果资源被重复生成,而内容不变,则 Etag 更精确(例如每隔一秒重复生成相同资源)
在这里插入图片描述
浏览器初次向服务端发送请求时,服务端返回资源和相应的资源标识。当浏览器再次发送请求时,会带着资源标识一起发送请求。服务器收到请求时,会根据资源标识做资源比较。例如最后一次修改时间 Last-Modified 没有变时,返回304;当最后一次修改时间 Last-Modified 发生了改变,返回资源和资源标识。唯一标识 Etag 相同时,返回304.;唯一标识 Etag 不同时,返回资源和资源标识。
在这里插入图片描述
在这里插入图片描述

http缓存综述

在这里插入图片描述
浏览器向服务端发送请求时,如果有 Cache-Control ,则检查是否过期。如果没有过期,就读取本地缓存,也就是强缓存,页面呈现。如果缓存已过期,则检查是否有 Last-ModifiedEtag,如果没有则向服务端发送请求,服务端返回资源,页面呈现。如果有 Last-ModifiedEtag ,则向服务端发送请求时,带上 if-None-Matchif-Modified-Since 字段,服务端收到请求后检查缓存是否可用,不可用则返回200和资源,页面呈现。可用则返回304,浏览器读取本地缓存,页面呈现

补充

304 状态码表示资源未被修改,不必再向服务端请求资源

刷新对缓存的影响

正常刷新:地址栏输入URL,跳转链接,前进后退等。此时强制缓存有效,协商缓存有效
手动刷新:F5,点击刷新按钮。此时强制缓存失效,协商缓存有效
强制刷新:Ctrl+F5 。此时强制缓存失效,协商缓存失效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值