例如,如果我在 Safari 中打开一个页面
http://stackoverflow.com
然后打开 safari 控制台并打开一个 websocket,例如:
var ws = new WebSocket("ws://ws.dslreports.com")
然后我单击页面上的链接,然后按 BACK 后缓存现在被忽略并重新加载页面。我在 Safari 5.0(它首先引入了 hixie websocket 支持)和使用 hybi 的最新 Safari 6.x 上观察到了这一点。Chrome 和 Firefox 以及其他支持 websockets 的浏览器似乎并没有以这种方式使后端缓存失效。
结果,我无法在 Safari 中启用 websockets,因为这样做会使第一个 BACK 到创建连接的任何页面的后缓存无效。但是,除非页面努力重新连接,否则后续的 BACK 会起作用,如果是这样,每个页面都会导致后台缓存未命中。
这是设计使然吗?除了回退到 Safari 用户轮询之外的任何解决方法。这将是一种耻辱,因为 Safari 在其他方面支持 websockets 就好了。
更新:移动 Safari 不会发生意外的失效行为,例如在 IOS 上,页面可以使用 websocket 并转到新链接,然后按回不会从服务器重新请求页面。