如果我有一个永远不应该被缓存并且应该始终从服务器检索的页面,当用户按下后退按钮时,我怎样才能让 turbolinks 做到这一点?它会服从来自 http 响应的缓存控制指令吗?
4 回答
这在Turbolinks 5中发生了变化,现在您需要将其设置<head>
为不缓存页面的级别:
<head>
...
<meta name="turbolinks-cache-control" content="no-cache">
...
</head>
参考:https ://github.com/turbolinks/turbolinks#opting-out-of-caching
您可以执行以下操作以使 turbolinks 始终从服务器获取所有页面的页面(至少在我的情况下这是所需的行为,因此单击后退按钮页面也会更新):
// js
Turbolinks.pagesCached(0);
或者,根据文档为一个站点禁用它,只需将data-no-transition-cache
属性添加到任何元素,例如在您不想被缓存的站点上将其添加到正文:
<body data-no-transition-cache>...</body>
在用户访问启用了 turbolink 的页面后,您无法禁用 turbolinks 效果,即使您禁用了 turbolinks,当用户按下返回按钮时,可能会显示浏览器缓存的页面。
后面部分是不可逃避的,但格式化程序部分很容易通过设置链接来强制制作正常链接来逃避,data-no-turbolink
这导致总是需要像这样检索页面
<div>
<a href="retrieve_always.html" data-no-turbolink>Special Page</a>
<a href="normal_page.html">NormalPage</a>
</div>
而且,您可以在data-no-turbolink
全局范围内设置更多
<div data-no-turbolink>
<a href="retrive_page1.html">Retrive page 1</a>
<a href="retrive_page2.html">Retrive page 2</a>
</div>
在这些情况下,所有检索所需的页面都由浏览器而不是 turbolinks 缓存,因此,后退按钮按下处理委托给浏览器。
简短的回答是否定的,当按下后退按钮时,您不能禁用显示页面的缓存副本。这种行为与浏览器的默认行为不同,Turbolinks 会尽可能地模仿浏览器的默认行为。
如果您访问任何网站,单击几个链接,然后按返回按钮,您会注意到浏览器显示一个缓存副本。据我所知,不能在浏览器级别禁用。