当文件从网络文件共享服务中提供时的浏览器缓存

5

据我了解,浏览器是否缓存一个项目取决于以下几点:

  1. 响应头告诉浏览器要做什么(例如:Cache-Control和Expires)。
  2. 验证器的存在(例如:ETag或Last-Modified头)。

对于从网络文件共享中提供的文件,以及在不同的浏览器中,情况会有所不同。考虑这个JavaScript包含:

<script type="text/javascript" src="\\SOMECOMPUTER\folder\file.js"></script>

当涉及到网络文件时,浏览器是否会遵循这样的标签?
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 31 Dec 2011 11:12:01 GMT">

我在这个主题上找到的文档很少。


2
这并不回答你的问题,但如果是我,我会尽量避免像这样链接,而是确保Web服务器通过服务器上的路径访问共享,例如http://intranet/files实际上可能是z:\SomeShare,它是映射到\\SomeComputer\files的网络驱动器。 - prodigitalson
很不幸,对我们来说避免文件共享部署不是一个选择。我们正在将一个JS重型Web应用程序部署到内部网络中,而IT部门规定了我们可以放置事物的位置。有时候会有一个内部网络Web服务器可用,但更多时候却没有。 - Elliot B.
HTTP控制缓存 - 如果不使用Web服务器,则HTTP为您执行的所有操作都将无效。 - Diodeus - James MacFarlane
我认为浏览器不允许您像那样访问共享文件。只有在从硬盘测试HTML文件时才能正常工作,因为大多数安全方面都被禁用了。 - Stefanos Kalantzis
1
我使用一个简单的HTML文件进行了测试,Chrome默默地隐藏了请求,而Firefox则尝试通过HTTP访问它(当然它不存在)。 - Stefanos Kalantzis
能否运行一个服务器端页面来获取文件呢?这样你仍然可以缓存该文件。例如,getJS.aspx将只返回 JS 文件的内容,你还可以使用 URL 重写来操作扩展名。 - Rafael Herscovici
2个回答

4

编辑:经过一些测试,如果设置了适当的权限,您可以使用IE8、Firefox和Google访问该文件,之前的混淆很抱歉。

现在问题回到了是否会缓存java-script文件(或任何其他文件),答案是肯定的。以下是如何解决此问题的方法:

使用<meta>标签在所有浏览器中关闭缓存?(对我来说这似乎很好用,因此看起来浏览器会遵循像这样的网络文件的元标记)

如何强制IE重新加载javascript?(这就像您通过将时间附加为未使用的变量来避免缓存ajax调用一样工作)


1

HTTP头部仅在文件通过HTTP协议发送时才被考虑。文件访问(本地和网络共享)不通过HTTP进行,因此您无法使用此方法控制缓存。

HTML文件在部分具有元标记的缓存控制。因此,如果您想控制.html文件的缓存,可以这样做。但是,对于.js文件,上述情况不适用,您无法以此方式控制js文件的缓存。

我建议两个选项:

  • 设置一个小型HTTP服务器,并从那里获取.js文件-这样您就可以通过HTTP头部控制缓存超时时间
  • 将JavaScript代码内联到HTML页面中(在标记中),并通过标记控制缓存。这样,您可以在
    中加载此文件-加载后甚至可以隐藏div。

我认为第二个选项更好,因为缓存控制更可靠,甚至更可控。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接