强缓存和协商缓存

强缓存和协商缓存

强缓存是浏览器对之前请求过的文件进行缓存,以便下一次访问的时候重复使用节省带宽。强制缓存的工作原理是通过http响应头中的特定字段来控制的,包括expires cache-control 指示了资源的缓存有效时间,当浏览器在有效时间内请求统一资源的时候,会直接从本地缓存中获取资源,并不会向服务器发起请求。

协商缓存是浏览器与服务器之间进行通信以确认资源是否任然有效的过程涉及到了etag 和if-none-match,以及last-modified和if-modified-since。Etag和ifnonematch 当浏览器第一次请求这个资源的时候,服务器会返回一个etag,是资源版本的唯一标识符。浏览器在后续请求该资源的时候,会在请求头中携带ifnonematch字段,值为接受到的etag。服务器会根据这个值来判断资源是否更新,如果有更新,服务器会返回新的资源和新的etag,如果没有更新,则返回304 告诉浏览器中可以使用缓存中的资源。

Last modified if modified since 类似于etag机制,但是last-modified记录的是资源最后修改的时间,会在请求头中携带ifmodified since字段,这个值为先前接收到的lastmodified ,会检查最后修改的时间是否在这个时间之后,如果是,说明资源有更改,返回最新的资源,如果不是,服务器返回304状态码。

在浏览器加载资源的时候,会检查强缓存是否命中,如果强缓冲有资源的副本,并且没有过期,则直接使用。不会发送http请求到服务器,只有当强缓冲未命中或者资源已经过期的时候,浏览器才会进行协商缓冲。

应用场景:强制缓存适用于不经常变动的静态资源,如图片、CSS和JavaScript文件。这些资源的变更频率较低,因此可以设置较长的缓存时间,以提高加载速度并减少服务器压力。协商缓存则适用于那些可能被频繁更新的资源,通过服务器的验证确保用户能够获取最新的资源内容。

相关推荐
what丶k12 小时前
深入解析Redis数据持久化:RBD机制原理、实操与生产最佳实践
数据库·redis·缓存
共享家952712 小时前
搭建 AI 聊天机器人:”我的人生我做主“
前端·javascript·css·python·pycharm·html·状态模式
Halo_tjn14 小时前
基于封装的专项 知识点
java·前端·python·算法
Dreamboat-L15 小时前
Redis及其两种持久化技术详解
数据库·redis·缓存
lead520lyq16 小时前
Golang本地内存缓存
开发语言·缓存·golang
三水不滴16 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
m0_7482299916 小时前
Vue2 vs Vue3:核心差异全解析
前端·javascript·vue.js
C澒16 小时前
前端监控系统的最佳实践
前端·安全·运维开发
xiaoxue..16 小时前
React 手写实现的 KeepAlive 组件
前端·javascript·react.js·面试
hhy_smile17 小时前
Class in Python
java·前端·python