【问题标题】:Can I force a .css or .js file to be cached for a week or month with Razor/.NET?我可以使用 Razor/.NET 强制将 .css 或 .js 文件缓存一周或一个月吗?
【发布时间】:2013-04-17 13:48:48
【问题描述】:

我猜肯定有一些 HTTP 头代码控制浏览器中的缓存,但是如何使用 Razor 引擎语法从 c# 设置这个“时间”?

OutputCache 持续时间?有什么用吗?

希望最大限度地减少大型网站上的带宽,这些网站不会一直使用某些 javascript 和 css,因此缓存时间为例如。 30 天或更长时间将非常有用 + 我希望能够从服务器端为每个文件指定这个。

【问题讨论】:

    标签: .net c#-4.0 http-headers browser-cache razor-2


    【解决方案1】:

    您可以在 web.config 中将 IIS 配置为 cache static content。以See this question 为例:

    <configuration>
      <system.webServer>
        <staticContent>
          <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
        </staticContent>
      </system.webServer>
    </configuration>
    

    【讨论】:

    • 好链接,web.config 文件对我来说并不是真正的解决方案,我宁愿编写某种处理程序,该处理程序将根据用户返回正确的 .css 和 .js 并且该文件应该如果可能的话被缓存。我相信我可以使用一些“http 响应标头”,并且我希望看到一些用 C# 编写的示例,并且可能使用 Razor 语法实现。希望这是有道理的。
    【解决方案2】:

    一种选择是将文件分解为不同的文件夹(基于缓存需求或仅按类型)。完成后,您可以在目录级别实现缓存。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <staticContent>
          <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
        </staticContent>
      </system.webServer>
    </configuration>
    

    来自 IIS 文档的 cacheControlMaxAge 的默认值(如果未指定):

    The default value is 1.00:00:00 (1 day)

    【讨论】:

    • 是否有一种程序化的方式来处理单个文件的临时性问题?就像我为特殊的 .js 或 .css 文件编写自己的“服务/处理程序”一样?其中一些将包括颜色、大小、某些文本和数字列表的用户特定设置,如果将这些设置放在文件夹中进行缓存,它们将占据相当多的空间。如果可能的话,我想动态生成它。然后让缓存保留它,直到他们再次需要它。其次,如果我必须在物理上生成它们,我需要在文件上设置某种“过期”。
    • @BerggreenDK - 我不相信你可以为单个文件开箱即用(默认情况下它总是在目录级别)。您可以编写一个 HTTP 处理程序,然后设置代码以查找某些文件并在那里调整 HTTP 标头。有很多关于创建这些处理程序的信息。但是,您需要进行测试以确保 IIS 不会在管道中更改您的任何标头。
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2017-06-20
    • 2011-05-17
    • 2011-03-05
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多