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

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

Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Age: 1778
Ali-Swift-Global-Savetime: 1689232794
Content-Length: 39561
Content-Md5: ljKnHG4XVG8OawtkxhzFbQ==
Content-Type: application/javascript
Date: Thu, 13 Jul 2023 07:19:54 GMT
Eagleid: 3adc342816892345724022404e
Etag: "9632A71C6E17546F0E6B0B64C61CC56D"
Last-Modified: Wed, 12 Jul 2023 07:40:59 GMT
Server: Tengine
Timing-Allow-Origin: *
Vary: Accept-Encoding
Via: 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:128133721
X-Oss-Cdn-Auth: success
X-Oss-Hash-Crc64ecma: 14676842204871193490
X-Oss-Object-Type: Normal
X-Oss-Request-Id: 64AFA59AEE85213839C57630
X-Oss-Server-Time: 20
X-Oss-Storage-Class: Standard
X-Oss-Version-Id: CAEQZhiBgMDq1ZekyhgiIDZhMzY1MjA3YTA2MzQ4ODI4Y2ZiYzhkYjA5MGUwMTBl
X-Swift-Cachetime: 3600
X-Swift-Savetime: Thu, 13 Jul 2023 07:39:47 GMT
阅读 1.9k
3 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏