我在HTML源代码中看到如下语句
<link rel='stylesheet' type='text/css' href='/css/jquery-ui.css?700241AD2550.node' />
这是什么意思?是将param或后缀传递给文件名吗?
答案 0 :(得分:2)
至少在这种情况下,它不是将细节传递给CSS。通常,当资产被连接或缩小时,这是确保浏览器缓存可以被CSS提供者破坏的一种方法。使用my.css?somestringofnumber
通常也被认为不如使用唯一文件名,例如my-12312341234.css
,但这两种方法都被广泛使用。
请注意fingerprinting for Rails上的资产管道指南:
1.2什么是指纹识别,我为什么要关心?
指纹识别是一种使文件名依赖于内容的技术 文件。文件内容更改时,文件名也会更改。 对于静态或不经常更改的内容,这提供了一个 简单的方法来判断文件的两个版本是否相同,甚至 跨越不同的服务器或部署日期。
当文件名是唯一的并且基于其内容时,HTTP标头可以 设置鼓励各地的缓存(无论是在CDN,ISP,在 网络设备,或在网络浏览器中)保留自己的副本 内容。更新内容后,指纹将发生变化。 这将导致远程客户端请求新的副本 内容。这通常称为缓存清除。
在查询字符串方法上:
查询字符串策略有几个缺点:
并非所有缓存都能可靠地缓存仅限文件名的内容 不同的查询参数:史蒂夫索德斯建议,“...避免 可缓存资源的查询字符串。“他发现在这种情况下5-20% 请求不会被缓存。查询字符串尤其没有 使用一些CDN来缓存失效。
文件名可以在多服务器环境中的节点之间更改: [...]当资产部署到集群时,没有 保证时间戳是相同的,导致不同 根据哪个服务器处理请求而使用的值。
- 醇>
缓存失效过多:每次部署静态资产时 新版本的代码,mtime(最后一次修改的时间)的全部 这些文件发生变化,迫使所有远程客户端再次获取它们, 即使这些资产的内容没有改变。
指纹识别通过避免查询字符串来解决这些问题 确保文件名根据其内容保持一致。
答案 1 :(得分:0)
它似乎是浏览器的标记,因此浏览器加载新版本的文件并且不使用缓存版本。我不认为将参数传递给css文件是可能的。
答案 2 :(得分:0)
您无法将参数传递给CSS文件,但如果您可以介入CSS请求并返回它,则可以修改返回的文件。例如:
http://code.tutsplus.com/tutorials/how-to-add-variables-to-your-css-files--net-2663
答案 3 :(得分:0)
就像链接到网页可以使用查询参数(在“?”之后)并且网络服务器可以返回依赖于这些查询参数的网页一样,链接到样式表也可以使用查询参数,并且网络服务器可以返回动态生成的使用这些参数的CSS文件。
对于Javascript,这可以用于JSONP请求,通常使用?callback=
参数。
对于CSS,动态样式表不太常见。通常,它只是一个解决浏览器缓存的技巧。
答案 4 :(得分:0)
是的,这是可能的。但是,可能情况并非如此。
假设您使用Apache + PHP,jJust将其添加到您的httpd.conf
文件中:
<Files "*.css">
SetHandler application/x-httpd-php
</Files>
现在.css
将使用PHP解析器进行解析,因此您可以读取GET参数。
请注意,这可以避免缓存,从而影响性能。如果您允许人们将.css文件上传到您的网站,则可能会很危险。
答案 5 :(得分:0)
您可以将该号码称为版本。每次修改css时,最好对其进行版本设置,以防浏览器在Web上显示最新的修改,版本部分强制它再次重新加载css,并且可以在Web上看到最新的编辑。 / p>
版本css的最佳方法是:
<link rel='stylesheet' type='text/css' href='/css/style.css?v=1' />
<link rel='stylesheet' type='text/css' href='/css/style.css?v=2' />
......
答案 6 :(得分:0)
我猜这是避免在浏览器上缓存css文件的一些方法。这是通过滥用href
字段来完成的,因为您的(或)服务器将忽略?...
,而浏览器仍然会认为它提取的文件与原始.css文件不同。
例如假装我想在页面上刷新css,我可以这样做:
<link rel='stylesheet' type='text/css' href='/style.css?version_0'/>
然后重新加载它:
<link rel='stylesheet' type='text/css' href='/style.css?version_1'/>
依旧......