【发布时间】:2012-11-01 16:30:59
【问题描述】:
Github pages 在所有提供的内容上设置非常激进的缓存标头(Cache-Control: max-age=86400 1 天,Expires 1 个月前)。
如果你更新你的页面并推送到 github,重新访问已经获得缓存副本的页面的人不会在没有实际清理浏览器缓存的情况下获得新页面。
在页面中运行的脚本如何确定它已过时并强制更新?
步骤可能是:
- 确定你在 github 页面上运行:easy,解析
window.location为github.com/ - 确定页面的当前版本:hard,git 不允许您将 sha1 嵌入提交的页面;没有 RCS
$id$。那你怎么知道你是什么版本呢? - 在github中获取当前版本; hard,github 摆脱了未经身份验证的 v2 API。推送到 github 和 github 也开始发布之间存在时间上的脱节。那么你怎么知道你能得到什么版本呢?
- 确定您已过时,如何使页面无效并强制重新加载? 困难,
window.location.reload(true)在 Safari/Chrome 中不起作用,例如...
所以它的解决这些步骤;当然可能还有其他方法?
【问题讨论】:
-
IIRC GitHub 仅对实际页面使用缓存,如果您通过普通存储库视图访问 gh-pages 存储库的代码,则不会。您也许可以设计一个从存储库加载文件的脚本(有可用的“原始”版本,现在只有代码额外的 HTML 和东西)。然后该文件应该包含 lastupdate 的时间戳。将该时间戳与通过实际页面发送的时间戳进行比较。如果不同,则强制重新加载。不过我可能在缓存上错了。
-
@clentfort 完全符合我的想象;我已经分解了问题中可能存在的步骤,更清楚地说明了障碍是什么
-
max-age=86400不意味着提前 1 天(而不是提前 个月)? -
@JBNizet 是的,缓存控制设置为提前 1 天,Expires 标头设置为 1 个月。
-
我得到 一天
Expires的所有标题。
标签: javascript github browser-cache