【发布时间】:2015-07-18 02:30:17
【问题描述】:
我已经用一些新内容更新了我的网站。 我与一些人交谈以查看他们计算机上的内容, 但似乎他们无法看到内容,除非他们删除浏览器缓存。有没有办法在我身边处理这个问题,所以所有新事物都会自动显示在每个浏览器上?
【问题讨论】:
标签: html
我已经用一些新内容更新了我的网站。 我与一些人交谈以查看他们计算机上的内容, 但似乎他们无法看到内容,除非他们删除浏览器缓存。有没有办法在我身边处理这个问题,所以所有新事物都会自动显示在每个浏览器上?
【问题讨论】:
标签: html
如果不清理缓存,就无法做到这一点。
不过,您可以通过按CTRL+SHIFT+R(至少在 Firefox 上)轻松删除缓存。
【讨论】:
为了将来参考,有两种类型的缓存:基于过期的缓存和 ETag 缓存。
如果您在 HTTP 响应中设置了明确的过期日期,则客户端将在过期日期过去之前根本不会进行检查。这大大减少了网络流量,代价是可能存在过时的内容。明智地选择到期日期以获得最佳折衷。
另一种选择是 ETags,在这种情况下,服务器发送一个 ETag 令牌,客户端将询问“向我发送新内容,除非此令牌仍然有效”。这只会在一定程度上减少网络流量,但可以保证您始终拥有最新的内容。
您需要在实践中平衡您的缓存策略。首先决定你是否需要缓存,然后决定你需要多少以及你愿意做出什么样的权衡。对于一个高流量的网站,即使是几分钟的缓存也是值得的,而在这种情况下,过时内容的问题将是微不足道的。
【讨论】:
您无法从服务器/客户端代码中删除删除用户的浏览器缓存。
展望未来,你能做的最好的事情就是告诉浏览器not to cache at all 或to cache for a specified time(少于下一次预期更新)
Cache-Control : no-cache
Cache-Control : max-age=315600
ETag 听起来可以达到目的(尽管我从未使用过)。
服务器生成并返回一个任意令牌,通常是 文件内容的哈希或其他指纹。这 客户端不需要知道指纹是如何生成的,它只需要知道 需要在下一个请求时将其发送到服务器:如果指纹 仍然是一样的,那么资源没有改变,我们可以跳过 下载。
【讨论】: