有没有人知道在CSS文件中使用查询字符串的任何问题?

Ste*_*rks 16 css caching

我们正在对我们的主精灵进行更改,并且我正在讨论完全更改其名称或在末尾添加查询字符串的好处.

保持旧版本支持Google缓存,archive.com等是有逻辑的,但如果我只是编辑文件并在CSS图像调用中添加查询字符串,它在我们的系统上也会更清晰:

#element-id { background-image: url('my-sprite.png?version1'); }
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有人知道在CSS文件中使用查询字符串缓存破坏的任何浏览器问题?

我怀疑浏览器是否以相同的方式处理css图像请求,无论是来自CSS文件还是通过HTML,因此,只要我的服务器正确表达标题信息,我就应该没问题.

Bae*_*aer 20

tl; dr使用查询参数不是100%的解决方案.

使用资产管道时基本上存在两个问题:

  1. 确保在需要时缓存资源
  2. 在修改文件时使缓存无效.

查询字符串参数有时会导致网络或浏览器根本不缓存您的资源.更有意思的是,爱尔兰先生指出"查询字符串方法对于Squid代理服务器后面的客户端来说是不可靠的",因此对于破坏缓存也是不可靠的.基本上你不想依赖其他人的配置.

几个参考:

  • Rails指南:资产管道 - Rails资产管道建立在Sprockets上,这个项目几年来一直专注于解决这些类型的问题.他们特别以粗体表示"并非所有缓存都能可靠地缓存文件名仅因查询参数而异的内容".

  • Steve Soulders关于加速资产的文章 - 史蒂夫·索德斯(Steve Souders)是一位网络性能大师,奥莱利(O'Reilly)着作"高性能网站"(High Performance Websites)的作者写道,这篇文章在Rails指南中引用,建议使用文件名转换来避免代理人背后的问题服务器.

  • HTML5 Boilerplate建议 - 由着名的Paul Irish和Nicolas Gallagher维护的HTML5 Boilerplate项目使用.htaccess来创建一个过滤器来进行文件名加速.他们特别建议使用文件名转换来代替查询字符串版本.


Nie*_*sol 1

除非浏览器严重损坏,否则应该没有什么问题。假设您想使用动态文件,例如url('/layout.php?section=1')什么。那里需要查询字符串,所以如果浏览器不能工作,它就会被严重破坏。