你可以强制浏览器总是获取缓存的文件而不是304的往返吗?

hen*_*ong 5 browser caching header browser-cache http-headers

据我了解,这是浏览器缓存的工作原理.假设一个远期未来的标题被设置为让我们说一年,并且foo.js被设置为缓存.以下是一些场景:

  1. 首次访问该页面,服务器返回200并且foo.js缓存一年.

  2. 下次访问时,浏览器会检查缓存,但必须检查服务器是否已修改foo.js.如果没有,服务器返回304 - 未修改.

  3. 用户已在页面上(并且foo.js在缓存中)单击链接以转到另一个页面,浏览器查看foo.js的缓存版本并在不对服务器进行往返的情况下提供服务并返回200(缓存) ).

  4. 用户已经在页面上(并且foo.js在缓存中)并且出于某种原因命中F5/Reload,浏览器检查缓存但是必须往返服务器并检查foo.js是否已被修改.如果没有,服务器返回304.

正如您所看到的,每当刷新页面时,它总是必须访问服务器以检查文件是否已被修改.我知道这不是很多,服务器只会返回标题信息,但在某些情况下往返时间非常重要.

问题是,有没有办法可以避免这种情况,因为我已经设置了文件的到期时间.我只是希望它总是从缓存中获取它,直到到期期满或用其他东西替换文件(通过版本控制).

小智 0

据我了解,按 F5/Ctrl-R 是浏览器特定的操作,因此将控制权留给了浏览器。

如果用户在单击另一个操作之前清除缓存会怎样?因此,即使有 HTTP 规范强制在 F5 中使用缓存,也不能保证您能够实现您的需求。

只需配置和编码即可尽可能缓存,剩下的交给用户即可。