今天小微开店宝在测试环境发布更新的时候,同事问:“为什么我需要手动清理浏览器缓存才能看到变更?难道系统上线后也需要客户自己清理浏览器缓存吗!”看来,这个坑需要我来填了。
什么是浏览器缓存浏览器缓存(Brower Caching)是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。
浏览器缓存的优点有:
- 减少了冗余的数据传输,节省了网费
- 减少了服务器的负担,大大提升了网站的性能
- 加快了客户端加载网页的速度
在前端开发面试中,浏览器缓存是web性能优化面试题中很重要的一个知识点,从而说明浏览器缓存是提升web性能的一大利器,但是浏览器缓存如果使用不当,也会产生很多问题,正所谓是,想说爱你,并不是很容易的事。所以,结合最近遇到的案例,本文对浏览器缓存相关的知识进行总结归纳,希望对读者有所帮助。
浏览器缓存的分类浏览器缓存主要有两类:缓存协商和彻底缓存,也有称之为协商缓存和强缓存。
浏览器在第一次请求发生后,再次请求时:
- 浏览器会先获取该资源缓存的header信息,根据其中的expires和cahe-control判断是否命中强缓存,若命中则直接从缓存中获取资源,包括缓存的header信息,本次请求不会与服务器进行通信;
- 如果没有命中强缓存,浏览器会发送请求到服务器,该请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified/IF-Modified-Since、Etag/IF-None-Match),由服务器根据请求中的相关header信息来对比结果是否命中协商缓存,若命中,则服务器返回新的响应header信息更新缓存中的对应header信息,但是并不返回资源内容,它会告知浏览器可以直接从缓存获取;否则返回最新的资源内容
强缓存
强缓存是利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间。
Expires
该字段是http1.0时的规范,它的值为一个绝对时间的GMT格式的时间字符串,比如Expires:Mon,18 Oct 2066 23:59:59 GMT。这个时间代表着这个资源的失效时间,在此时间之前,即命中缓存。这种方式有一个明显的缺点,由于失效时间是一个绝对时间,所以当服务器与客户端时间偏差较大时,就会导致缓存混乱。
Cache-Control
Cache-Control是http1.1时出现的header信息,主要是利用该字段的max-age值来进行判断,它是一个相对时间,例如Cache-Control:max-age=3600,代表着资源的有效期是3600秒。cache-control除了该字段外,还有下面几个比较常用的设置值:
Cache-Control与Expires可以在服务端配置同时启用,同时启用的时候Cache-Control优先级高。
协商缓存
协商缓存就是由服务器来确定缓存资源是否可用,所以客户端与服务器端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问,这主要涉及到下面两组header字段,这两组搭档都是成对出现的,即第一次请求的响应头带上某个字段(Last-Modified或者Etag),则后续请求则会带上对应的请求字段(If-Modified-Since或者If-None-Match),若响应头没有Last-Modified或者Etag字段,则请求头也不会有对应的字段。
Last-Modify/If-Modify-Since
浏览器第一次请求一个资源的时候,服务器返回的header中会加上Last-Modify,Last-modify是一个时间标识该资源的最后修改时间,例如Last-Modify: Thu,31 Dec 2037 23:59:59 GMT。
当浏览器再次请求该资源时,request的请求头中会包含If-Modify-Since,该值为缓存之前返回的Last-Modify。服务器收到If-Modify-Since后,根据资源的最后修改时间判断是否命中缓存。
如果命中缓存,则返回304,并且不会返回资源内容,并且不会返回Last-Modify。
ETag/If-None-Match
与Last-Modify/If-Modify-Since不同的是,Etag/If-None-Match返回的是一个校验码。ETag可以保证每一个资源是唯一的,资源变化都会导致ETag变化。服务器根据浏览器上送的If-None-Match值来判断是否命中缓存。
与Last-Modified不一样的是,当服务器返回304 Not Modified的响应时,由于ETag重新生成过,response header中还会把这个ETag返回,即使这个ETag跟之前的没有变化。
为什么要有Etag
你可能会觉得使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag呢?HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:
Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。
强缓存与协商缓存的区别可以用下表来表示:
|获取资源形式|状态码|发送请求到服务器
------|------------|------|----------------
强缓存|从缓存取 |200(from cache)|否,直接从缓存取
协商缓存|从缓存取|304(Not Modified)|否,通过服务器来告知缓存是否可用
地址栏回车 | 有效 | 有效 |
页面链接跳转 | 有效 | 有效 |
新开窗口 | 有效 | 有效 |
前进回退 | 有效 | 有效 |
F5刷新 | 无效 | 有效 |
Ctrl+F5强制刷新 | 无效 | 无效 |
如文章开头所属,代码更新到线上后用户浏览器不能自行更新,我们不能要求客户在系统更新后都进行一次缓存清理的操作。
到底该如何解决呢?
在资源请求的URL中增加一个参数,比如:js/mian.js?ver=0.7.1。这个参数是一个版本号,每一次部署的时候变更一下,当这个参数变化的时候,强缓存都会失效并重新加载。这样一来,静态资源,部署以后就需要重新加载。这样就比较完美的解决了问题。
进一步思考这样做是不是最完美的呢?很遗憾,不是。
百度张云龙给出了这样做的弊端,有兴趣可参照下文:
静态资源版本更新与缓存
谢谢!

Windows操作系统使用缓存来存储DNS条目。DNS(域名系统)是用于通信的互联网核心技术。特别是用于查找域名的IP地址。当用户在浏览器中键入域名时,加载站点时执行的首要任务之一是查找其IP地址。该过程需要访问DNS服务器。通常,互联网服务提供商的DNS服务器会自动使用,但管理员可能会切换到其他DNS服务器,因为这些服务器可能更快或提供更好的隐私。如果DNS用于阻止对某些站点的访问,则切换DNS提供商也可能有助于绕过Internet审查。Windows使用DNS解

什么是缓存?缓存(发音为ka·shay)是一种专门的高速硬件或软件组件,用于存储经常请求的数据和指令,这些数据和指令又可用于更快地加载网站、应用程序、服务和系统的其他部分。缓存使最常访问的数据随时可用。缓存文件与缓存内存不同。缓存文件是指经常需要的文件,如PNG、图标、徽标、着色器等,多个程序可能需要这些文件。这些文件存储在您的物理驱动器空间中,通常是隐藏的。另一方面,高速缓存内存是一种比主内存和/或RAM更快的内存类型。它极大地减少了数据访问时间,因为与RAM相比,它更靠近CPU并且速度

对于不熟悉这个术语的人来说,清空缓存就意味着清空它,本文将向您展示如何在 Windows 11 中轻松完成。如果您仍然想知道缓存文件是什么,您应该知道它并不像听起来那样技术性。考虑到计算机,缓存是将来可能再次需要的非永久文件(或文件)。因此,缓存在那个时间到来之前一直是隐藏的,从而保护了内容。缓存文件很重要,但它们也会占用宝贵的空间。如果您的 SSD 容量有限,这可能是个问题。不过,也有一些好消息。因此,在大多数情况下,可以安全地擦除缓存文件以清理磁盘空间。清除 Windows 11 缓存的重要

清理浏览器缓存的方法:1、手动清理;2、使用浏览器设置清理;3、使用第三方工具清理;4、定期清理;5、手动删除缓存文件;6、使用浏览器扩展程序清理;7、禁用浏览器缓存;8、手动删除Cookies和Cookie相关文件。详细介绍:1、手动清理,打开浏览器,按下键盘上的Ctrl+Shift+Delete键,在弹出的对话框中,选择“清除浏览数据”选项,并选择要清除的时间范围等等。

Safari的缓存使浏览速度更快,但它可能会出错,它会减慢您的Mac、iPhone或iPad的速度,并且还会占用大量存储空间。以下是清除它的方法和时间。与所有网络浏览器一样,Safari将数据存储在您的Mac、iPhone和iPad上,其明确目的是加快您的在线生活。您可能拥有ApplePark认为理所当然的那种互联网速度,但即便如此,最好将这种速度用于需要的地方。因此,当您重新访问一个网站时,Safari会尽可能地让您只需要下载已更改的内容。即使一个新闻网站整天都在更新,基本布局,页面的家具

1、以IE浏览器为例,在浏览器的菜单栏中点击工具,然后点击【internet选项】;如图所示:2、在internet选项中,我们可以看到有一个浏览历史记录的选项,下面有一个复选框,即【退出时删除浏览历史记录】,选定之后,在我们关闭浏览器的时候,所有的缓存网页,缓存的文字及图片音乐视频等就会全部删除。当然如果你现在就想删除,就点击下面的那个删除按钮就可以现在就删除这些缓存文件了,删除完成点击确定;如图所示:3、浏览器的缓存现在我们就清理完成了,但是有很多人用的并不是IE浏览器,而是其他的浏览器,其

如何利用浏览器缓存提升Java网站的访问速度?摘要:浏览器缓存是提升网站性能的重要手段之一。本文将详细介绍如何利用浏览器缓存提升Java网站的访问速度,并附上相应的代码示例。一、浏览器缓存介绍1.1什么是浏览器缓存?浏览器缓存是指浏览器在访问一个网页时,会将该网页的部分或全部资源(如页面文件、图片、脚本、样式表等)存储到本地硬盘或内存中,以便下次访问时可以

如何在Safari和其他应用程序中清除iPhone和iPad上的缓存苹果浏览器打开设置向下滑动并点按Safari再次向下滑动并点击清除历史记录和网站数据,再次点击确认或者,如果您想清除单个网站的数据而不清除整个Safari缓存,请在Safari设置的最底部选择“高级”>“网站数据”>“编辑”(或从右向左滑动以删除单个项目)。请记住,从iPhone或iPad删除的网站数据将从您登录到同一iCloud帐户的其他Apple设备中删除,如果它们与Safari同步。清除i


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 English version
Recommended: Win version, supports code prompts!

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)
