是否可以将参数传递给css文件?

时间:2014-05-22 20:01:36

标签: javascript html css

我在HTML源代码中看到如下语句

<link rel='stylesheet' type='text/css' href='/css/jquery-ui.css?700241AD2550.node' />

这是什么意思?是将param或后缀传递给文件名吗?

7 个答案:

答案 0 :(得分:2)

至少在这种情况下,它不是将细节传递给CSS。通常,当资产被连接或缩小时,这是确保浏览器缓存可以被CSS提供者破坏的一种方法。使用my.css?somestringofnumber通常也被认为不如使用唯一文件名,例如my-12312341234.css,但这两种方法都被广泛使用。

请注意fingerprinting for Rails上的资产管道指南:

  

1.2什么是指纹识别,我为什么要关心?

     

指纹识别是一种使文件名依赖于内容的技术   文件。文件内容更改时,文件名也会更改。   对于静态或不经常更改的内容,这提供了一个   简单的方法来判断文件的两个版本是否相同,甚至   跨越不同的服务器或部署日期。

     

当文件名是唯一的并且基于其内容时,HTTP标头可以   设置鼓励各地的缓存(无论是在CDN,ISP,在   网络设备,或在网络浏览器中)保留自己的副本   内容。更新内容后,指纹将发生变化。   这将导致远程客户端请求新的副本   内容。这通常称为缓存清除。

在查询字符串方法上:

  

查询字符串策略有几个缺点:

     
      
  1. 并非所有缓存都能可靠地缓存仅限文件名的内容   不同的查询参数:史蒂夫索德斯建议,“...避免   可缓存资源的查询字符串。“他发现在这种情况下5-20%   请求不会被缓存。查询字符串尤其没有   使用一些CDN来缓存失效。

  2.   
  3. 文件名可以在多服务器环境中的节点之间更改:   [...]当资产部署到集群时,没有   保证时间戳是相同的,导致不同   根据哪个服务器处理请求而使用的值。

  4.   
  5. 缓存失效过多:每次部署静态资产时   新版本的代码,mtime(最后一次修改的时间)的全部   这些文件发生变化,迫使所有远程客户端再次获取它们,   即使这些资产的内容没有改变。

  6.         

    指纹识别通过避免查询字符串来解决这些问题   确保文件名根据其内容保持一致。

答案 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'/>

依旧......