为什么要将版本号添加到CSS文件路径?

时间:2011-10-06 07:09:09

标签: css

我注意到有些网站将版本号(特别是)放在CSS文件路径中。例如:

<link rel="stylesheet" type="text/css" href="style.css?v=12345678" />

放置版本号的主要目的是什么?如果目的是记住上次更新CSS文件的时间,那么不应该在CSS文件中添加版本号作为注释吗?

6 个答案:

答案 0 :(得分:50)

来自HTML5 ★ Boilerplate Docs

  

什么是?v = 1“'?v = 1'是带有的JavaScript / CSS版本控制   缓存无效化

     

为什么需要缓存JavaScript CSS?网页设计越来越多   更丰富,更丰富,这意味着更多的脚本和样式表   页。首次访问您网页的访问者可能需要制作多个HTTP   请求,但通过使用Expires标头,您可以创建这些组件   缓存。这可以避免后续页面上不必要的HTTP请求   观点。过期标题最常用于图像,但它们   应该用在所有组件上,包括脚本,样式表等。

     

HTML5 Boilerplate如何处理JavaScript CSS缓存? HTML5   Boilerplate附带服务器配置文件:.htacess,   web.config和nginx.conf。这些文件告诉服务器添加   JavaScript CSS缓存控制。

     

什么时候需要使用版本控制和cachebusting?   传统上,如果您使用远期未来的Expires标头,则必须这样做   每当组件发生变化时,都要更改组件的文件名。

     

如何使用cachebusting?如果您更新JavaScript或CSS,只需   将“?v = 1”更新为“?v = 2”,“?v = 3”......这将欺骗浏览器   认为你正在尝试加载一个新文件,因此,解决了缓存   问题

答案 1 :(得分:6)

确保您拥有当前版本。如果您更改网站并保留以前的名称,浏览器可能不会注意到更改并使用其缓存中的旧CSS。如果您添加版本,浏览器将下载新的样式表。

答案 2 :(得分:3)

如果您将缓存设置为将来过期添加?v=2将让服务器知道这是一个新文件,但您不需要为其指定唯一名称(为您节省全局搜索和替换)

HTM5 boilerplate 也将其包含在他们的项目中。

也请观看此视频:HTML5 Boilerplate Walkthrough

答案 3 :(得分:2)

其中一个原因可能是绕过文件缓存。同名CSS文件可以由服务器缓存,如果新版本具有布局更改,则可能导致显示错误。

答案 4 :(得分:1)

这是为了优化浏览器缓存。您可以将CSS文件的标题设置为永不过期,以便浏览器始终从其缓存中获取它。

但是如果你这样做,你在更改CSS文件时会遇到问题,因为有些浏览器可能没有注意到这一变化。通过添加/更改版本参数,它是“另一个”请求,因此不会从缓存中获取(但在缓存新版本之后,将来从那里获取以节省带宽/请求数量,直到版本再次改变。)

详细说明可在html5boilerplate.com找到。

答案 5 :(得分:0)

我的知识在网站上已经过时了,但是存储在'href'参数中的变量是由浏览器通过HTTP接收的。使用URL重写中的常用技巧,实际上可以有一个任意脚本在调用时产生CSS输出。该输出可能会有所不同,具体取决于参数。