当前位置: 首页 > 知识库问答 >
问题:

前端 - 无expires 和 cache-control,为什么浏览器命中强缓存?

梁英喆
2023-07-14

响应头如下,为什么浏览器命中强缓存?

Accept-Ranges: bytesAccess-Control-Allow-Origin: *Age: 1778Ali-Swift-Global-Savetime: 1689232794Content-Length: 39561Content-Md5: ljKnHG4XVG8OawtkxhzFbQ==Content-Type: application/javascriptDate: Thu, 13 Jul 2023 07:19:54 GMTEagleid: 3adc342816892345724022404eEtag: "9632A71C6E17546F0E6B0B64C61CC56D"Last-Modified: Wed, 12 Jul 2023 07:40:59 GMTServer: TengineTiming-Allow-Origin: *Vary: Accept-EncodingVia: cache80.l2cn3022[0,0,304-0,H], cache69.l2cn3022[0,0], kunlun20.cn5209[0,0,200-0,H], kunlun20.cn5209[1,0]X-Cache: HIT TCP_MEM_HIT dirn:9:128133721X-Oss-Cdn-Auth: successX-Oss-Hash-Crc64ecma: 14676842204871193490X-Oss-Object-Type: NormalX-Oss-Request-Id: 64AFA59AEE85213839C57630X-Oss-Server-Time: 20X-Oss-Storage-Class: StandardX-Oss-Version-Id: CAEQZhiBgMDq1ZekyhgiIDZhMzY1MjA3YTA2MzQ4ODI4Y2ZiYzhkYjA5MGUwMTBlX-Swift-Cachetime: 3600X-Swift-Savetime: Thu, 13 Jul 2023 07:39:47 GMT

共有2个答案

闽高峯
2023-07-14

一般来说,印象中现代浏览器会默认是协商缓存,但是很多情况,比如说微信内置的浏览器,并不支持协商缓存,就会命中强缓存。特别是在没有明确声明过期时间的时候,为了加快访问速度还直接给你缓存了页面。
所以如果有去配置HTTP服务中的不缓存返回头,用户访问的页面就会被缓存起来了。所以一般我们在做前端的加速处理的时候,入口页面(index.html)是强制不缓存的,其它的JS、CSS、IMG等资源才会开启缓存。具体可以看我很早之前写过的一篇笔记 页面的缓存到底应该怎么做?

许博
2023-07-14

这两个字段也会影响Last-Modified和Etag,Age 的值是 1778,这说明着资源在缓存里已经存放了 1778 秒

 类似资料:
  • 我们正在使用Azure CDN来提供图像,我正在尝试了解为什么图像会被Web浏览器强缓存,即使图像响应中没有Cache-Control或Expires标头。 例如,对于来自Azure CDN的图像,返回以下响应头: 如您所见,返回了一个Etag标头,但没有Cache-Control或Expires标头。 当从浏览器(Chrome)跟踪流量(使用Fiddler)时,我们看不到对这些图像的任何后续请求

  • 问题内容: 有什么办法可以在页面上放置一些代码,以便当有人访问网站时,它会清除浏览器缓存,以便他们可以查看更改? 使用的语言:ASP.NET,VB.NET,当然还有HTML,CSS和jQuery。 问题答案: 如果这是关于和变化,一种方法是到“缓存无效”是通过附加像“ ”为每个版本的文件名。例如: 或者,在文件名之后执行此操作:

  • 问题内容: 这些天,我的应用程序一直在变化,因为我们的团队现在正在运行快速更新。 由于缓存,我们的客户并不总是拥有最新版本的代码。 那么有没有办法强制浏览器清除缓存? 问题答案: 您可以使用一种非常简单的解决方案,其中包括将哈希值附加到脚本文件中。每次部署App时,您都会通过gulp /grunt任务自动为文件提供不同的哈希值。例如,您可以使用gulp-rev。我在所有项目中都使用了这种技术,并且

  • 上面是mdn的一个例子,为什么no-store和no-cache同时出现,那不相当于no-store吗?

  • 日期:1998年10月30日星期五格林尼治时间13:19:41 服务器:Apache/1.3.3(Unix) 缓存控制:max-age=3600,必须重新验证 有效期:1998年10月30日星期五格林尼治时间14:19:41 最后修改:1998年6月29日星期一02:28:12格林尼治时间 ETAG:“3E86-410-3596FBBC”

  • 在我的servlet过滤器中,我设置了以下响应标头以启用一些资源的缓存: 所以,您能解释一下为什么或者如何在我的servlet过滤器(在JBoss AS 7上部署的JSF/PrimeFaces应用程序中)中设置的值作为http响应标头在chrome中未被修改,但在firefox和IE中却发生了变化。我自己没有编写任何可能覆盖这个头的javascript。实际上,我试图为所有提到的三个浏览器启用“相