如何防止浏览器缓存json文件
Posted
技术标签:
【中文标题】如何防止浏览器缓存json文件【英文标题】:How to prevent the browser from caching a json file 【发布时间】:2013-02-09 02:23:03 【问题描述】:所以我正在制作这个小项目,但我在捕捉时遇到了一些麻烦。不工作的一件事是浏览器不断缓存包含保存数据的 json 文件,当我在其他地方更新 json 时,浏览器会回到它缓存的旧版本的 json 文件并读取它。不幸的是我不想那样。我根本不希望浏览器缓存文件,这样每次加载页面时,它都会向服务器询问 json 文件并根据该文件而不是它缓存的任何文件行事。但是,我希望能够缓存页面上的所有其他内容,但如果必须为此做出牺牲,那么这是我愿意做出的牺牲。我设想在 javascript 中会有一个调用,说丢弃当前的 json 文件并再次向服务器询问它或类似的东西
<script src="mySaveFiles.json" cache="no">
或类似的东西来帮助我实现我所说的......帮助?
【问题讨论】:
**缓存..... 【参考方案1】:最简单的方法是在源字符串中附加一些随机参数,在服务器端会被忽略
<script src="mySaveFiles.json?nocache=123" ></script>
一种解决方案是使用 JavaScript 生成脚本元素并像这样附加当前时间:
var el = document.createElement( script );
el.src = 'mySaveFiles.json?nocache=' + (new Date()).getTime();
document.head.appendChild( el );
这样,浏览器将永远不会缓存 JSON 文件,因为它在每次调用中看起来都是不同的文件(由于参数)。
【讨论】:
因此,我不会在标题中使用具有 mySaveFiles src 的标记,而是调用类似于您在函数中提供的代码,该函数在页面加载时首先运行,它将是我怎么描述的? 谢谢。我尝试了其他一些人建议的其他一些方法,但这似乎是实现我想要的最成功的方法。谢谢 您可能需要在脚本标签中添加type="application/json"
:例如<script type="application/json src="mySaveFiles.json?nocache=123" ></script>
如何等到脚本加载完毕?目前其他脚本依赖它
@EvgeniyK 这超出了这个问题的范围。但总的来说,看看依赖管理的框架。【参考方案2】:
我最喜欢的一个就是 htaccess(如果这对你来说是可能的,我看不到)
禁用多个扩展的缓存
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi|json)$">
Header unset Cache-Control
</FilesMatch>
仅对 1 个扩展禁用缓存
<Files .json>
Header unset Cache-Control
</Files>
我在这里找到它:http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips
【讨论】:
哦,哇,这是一个很棒的解决方案,我现在必须尝试一下 :) 希望这会比在 o.o 上添加时间戳更简单 好的,我在这里遇到了问题。我将它粘贴进去并过滤掉了我不想要的东西,但在页面顶部它有这行文本,上面写着 Header unset Cache-Control,我不想显示那行文本。我该怎么办? 您在代码中究竟粘贴了什么?我更新为禁用 1 个扩展的缓存 这不适用于 android 上的 chrome。否则,这是一个很好的解决方案。【参考方案3】:两种选择:
-
将 mySaveFiles.json?t=timestamp 查询参数添加到 url 的末尾。
使用 XmlHttpRequest 对象拉入文件(您可能仍需要添加时间戳,具体取决于服务器)。
【讨论】:
【参考方案4】:如果你不想缓存任何数据,那么你可以使用下面的元标记
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="-1">
【讨论】:
如果我可以缓存除 json 文件之外的所有内容,那就太好了。我已经尝试过了,但它似乎大大降低了性能。如果我能找到最好的选择,我认为这将是我最后的选择:( 这有助于停止 JSON 文件中的缓存吗?它适用于单个 html 页面,对吗? @Ranjith以上是关于如何防止浏览器缓存json文件的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 Web 浏览器对缓存文件发出“If-Modified-Since”请求?
sass构建CSS时,如何给文件随机加版本号,以防止老文件缓存?