什么是“?” for在html脚本标记的src属性中?

时间:2010-11-18 22:15:57

标签: javascript

如果之前有人问过,我道歉,但这是一个难以搜索的问题。这是我在网络开发的这些年里第一次遇到这个问题,所以我很好奇。

我正在为一个网站编辑一些HTML文件,我注意到在脚本标记的src属性中,前一位作者附加了一个问号后跟数据。

例如:<script src="./js/somefile.js?version=3.2"></script>

我知道这在某些语言中用于GET请求中的值传递,例如PHP,但就我所知,这不是在javascript中完成的 - 至少在调用javascript文件时。有谁知道这有什么作用,如果有的话?

编辑:哇,很多回复。谢谢你们所有人。由于很多人都在说类似的事情,我会发布全球更新,而不是评论所有人。

在这种情况下,javascript文件是静态的,因此我的好奇心。我也打开了它们,没有看到任何尝试访问文件加载变量的事情。我从来没有想过缓存或简单的版本控制,这两种情况在这种情况下更容易发生。

8 个答案:

答案 0 :(得分:10)

我相信作者正在做的是确保如果他创建了他的脚本版本3.3,他可以更改脚本的url中的version =以确保用户下载新文件而不是运行旧脚本缓存在他们的浏览器中

所以在这种情况下,它是缓存策略的一部分。

答案 1 :(得分:6)

我的猜测是,如果他发布新版本的JavaScript文件,他可以在HTML文档中使用该版本。这在请求时不会对服务器端执行任何操作,但会导致浏览器将其视为不同的文件,从而有效地强制浏览器重新获取脚本并绕过文件的本地缓存。

这样,你可以设置一个非常高的缓存时间(比如一周或一个月!),但不要牺牲频繁更新脚本的能力。

答案 2 :(得分:5)

您必须记住的是,此./js/somefile.js?version=3.2不一定是物理文件。它可以是一个动态创建文件的页面。所以你可以在请求中说“请给我这个js文件的第3版”,服务器端代码创建它并将其写入输出流。

另一种选择是强制浏览器不缓存文件,并在发出请求时下拉新文件。由于URI发生了变化,它会认为该文件是全新的。

答案 3 :(得分:2)

(配置良好的)Web服务器将一次性发送JavaScript源代码等静态文件,并告知Web浏览器在本地缓存该文件一段时间(可能是一天,一周,一个月或更长时间) )。当浏览器看到对该文件的另一个请求时,它将只使用该版本,而不是从服务器获取新代码。

如果URL更改 - 例如通过添加查询字符串 - 那么浏览器怀疑其缓存版本不好并获得新版本。因此,?可以帮助开发人员说“糟糕,我更改了此文件,确保浏览器获得新副本。”

答案 4 :(得分:1)

在这种情况下,它可能用于确保源文件不在版本之间缓存。

当然,它也可以用于服务器端生成javascript文件,而不知道你在请求的另一端有什么,很难确定。

BTW,网址的?...部分称为查询字符串。

答案 5 :(得分:1)

这用于保证浏览器在可用时下载新版本的脚本。每次部署新版本时,URL中的版本号都会递增,以便浏览器将其视为不同的文件。

答案 6 :(得分:1)

仅因为文件扩展名为.js并不意味着目标是实际的.js文件。他们可以设置他们的Web服务器将请求的URL传递给脚本(或者字面上有一个名为somefile.js的脚本),然后解释文件名和版本。

答案 7 :(得分:1)

查询字符串与javascript无关。某些服务器端代码根据它出现的查询字符串托管不同的版本。

您永远不应该假设URL中的路径。 URL中路径上的扩展名并不能真正告诉您任何内容。 URL可以是完全动态的,由某些服务器端代码提供,也可以动态地在Web服务器中重写。

现在通常在加载javascript文件时向URL添加查询字符串以防止客户端缓存。如果页面更新并引用了新版本的脚本,则页面可能会破坏并导致客户端刷新其脚本。