什么是“?”标志是否在请求静态JS文件?

时间:2012-09-27 06:17:56

标签: javascript url

我已经看过很多,但我不知道这意味着什么。例如:

<script src="http://server.com/file.js?y=2345678" type="text/javascript"></script>

如果可以在javascript文件中“捕获”'y'的值,那会是怎样的?

谢谢。

PS。我知道mod_rewrite是什么,这不是答案,以防万一:)

3 个答案:

答案 0 :(得分:5)

这是为了强制浏览器不要缓存文件,因为它认为它是带有get参数的动态文件而不是静态文件。

答案 1 :(得分:2)

这通常用于促进JS文件的缓存。您设置了远期Expires标头,这意味着浏览器可能会将其缓存很长时间。如果您在文件中更改了某些内容,则还会更新查询字符串中的数字,这将使浏览器重新获取该文件。这是有效的,因为缓存是针对唯一的文件名,而查询字符串是文件名的一部分(就浏览器而言)。

类似的方法是在Web服务器中使用重写规则来获得它不关心的文件名的某些部分。这是一个Nginx规则来显示我的意思:

rewrite ^/style\..*\.css$ /style.css;

我使用此规则来获取style.42750cad6.css等文件名,该文件名始终指向文件style.css。每当我更改style.css时,中间的文本都会更改。第一种方法的区别在于,它不使用查询字符串,因此缓存可以在更多浏览器中使用。

答案 2 :(得分:1)

好吧,我用两种方式看待它。

  1. 它可用于加载js而无需缓存
  2. 对于服务器的每个请求,服务器可能会记录信息(如果启用了日志记录),如果我使用它进行分析,我可以使用不同的位置参数,从日志中我可以分析并获取所需的详细信息。