缓存和压缩

缓存
缓存类型
强缓存:浏览器不会向服务器发送请求,直接从缓存中读取资源。

通过设置以下响应头实现:

Expires:HTTP/1.0,指定一个绝对过期时间。

Cache-Control:HTTP/1.1,优先级高于Expires,常用指令:

max-age=:资源最大有效时间(秒)。

public:允许任何中间节点缓存。

private:仅允许浏览器缓存,不允许CDN等中间节点缓存。

no-cache:不使用强缓存,每次需向服务器验证(即跳过强缓存,直接进行协商缓存)。

no-store:禁止缓存,每次都要从服务器获取完整的资源。

协商缓存:当强缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器决定是否使用缓存。

如果资源未变,服务器返回304,浏览器使用缓存;否则返回200和新资源。

有两组头部字段:

第一组(优先级高):

请求头:If-None-Match

响应头:ETag(实体标签,资源内容的唯一标识,如哈希值)

第二组:

请求头:If-Modified-Since

响应头:Last-Modified(资源最后修改时间)

缓存策略
静态资源(如图片、样式表、脚本):通常设置强缓存,并带上hash值作为文件名(或查询参数),这样当文件内容变化时,文件名改变,从而触发重新获取。

HTML文件:一般不做长期强缓存,可以设置Cache-Control: no-cache,这样每次都会请求服务器,但可以通过协商缓存判断是否使用本地缓存(304)。

API数据:

静态数据(如字典表):可长时间缓存(如max-age=3600)。

动态数据(如用户信息):一般设置no-cache或private,max-age=0,表示每次都需要验证。

注意
强缓存和协商缓存可以互相转化,但通常我们通过设置响应头来控制。

在Windows中,可以使用命令wmic memcache list查看内存缓存(注意:这个命令可能不适用于所有Windows版本,且通常用于系统内存缓存,而非HTTP缓存)。

压缩
常见压缩算法
gzip:适用于文本资源(如HTML、CSS、JS),压缩率较高,目前使用最广泛。

br(Brotli):由Google开发,压缩率比gzip更高,但需要浏览器支持(现代浏览器大都支持)。

deflate:一种通用的压缩算法,但使用不如gzip广泛。

适用场景
文本资源:非常适合压缩(如HTML、CSS、JS、JSON、XML等),可以显著减小传输体积。

图片、视频:这些资源本身已经是二进制格式,并且通常已经过压缩(如JPEG、PNG、MP4),再次压缩效果有限,甚至可能增加体积,所以不建议对它们进行额外的压缩。

二进制文件:例如已压缩的归档文件(如zip、tar.gz)或可执行文件,也不建议再次压缩。

posted @ 2025-12-25 19:43  傲气大叔  阅读(0)  评论(0)    收藏  举报