如何防止浏览器缓存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":例如&lt;script type="application/json src="mySaveFiles.json?nocache=123" &gt;&lt;/script&gt; 如何等到脚本加载完毕?目前其他脚本依赖它 @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”请求?

防止浏览器中的 iframe 缓存

防止图像文件被添加到浏览器缓存

sass构建CSS时,如何给文件随机加版本号,以防止老文件缓存?

防止javascript缓存与django表单assets。

gulp:自动为请求添加版本号以防止浏览器缓存