如何将缓存控制设置为始终检查更新,但如果服务器无法访问则始终回退到缓存
How to set cache-control to always check for updates but always fall back to cache if server is unreachable
我遗漏了一些试图理解缓存控制的东西(例如,来自 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)。
如何设置缓存控制以完成以下操作(我将使用 .htaccess 文件):
- 如果客户端获取文件,它应该始终将其存储在缓存中。
- 当客户端需要一个文件时,它应该经常检查文件是否被更改,如果有更改则下载一个新的副本。
- 如果检查尝试失败——例如,服务器关闭或没有 Internet 连接——客户端应始终使用缓存副本(如果可用),无论该副本有多旧。任何文案都优于none.
使用Cache-Control: no-cache
并设置ETag
header。
- 资源将存储在缓存中。除了
no-store
. 之外的任何缓存 header 都是如此
no-cache
告诉客户端它必须检查服务器以查看缓存的副本是否有效。它通过发送条件请求来实现,这要求缓存的响应具有 ETag
(或 Last-Modified
)header.
- 默认行为是在没有连接时使用资源的缓存副本。您可以使用
must-revalidate
指令来防止这种情况。
我遗漏了一些试图理解缓存控制的东西(例如,来自 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)。
如何设置缓存控制以完成以下操作(我将使用 .htaccess 文件):
- 如果客户端获取文件,它应该始终将其存储在缓存中。
- 当客户端需要一个文件时,它应该经常检查文件是否被更改,如果有更改则下载一个新的副本。
- 如果检查尝试失败——例如,服务器关闭或没有 Internet 连接——客户端应始终使用缓存副本(如果可用),无论该副本有多旧。任何文案都优于none.
使用Cache-Control: no-cache
并设置ETag
header。
- 资源将存储在缓存中。除了
no-store
. 之外的任何缓存 header 都是如此
no-cache
告诉客户端它必须检查服务器以查看缓存的副本是否有效。它通过发送条件请求来实现,这要求缓存的响应具有ETag
(或Last-Modified
)header.- 默认行为是在没有连接时使用资源的缓存副本。您可以使用
must-revalidate
指令来防止这种情况。