【问题标题】:"Expires" in http header for static content? how-to静态内容的http标头中的“过期”?如何
【发布时间】:2008-09-19 14:22:16
【问题描述】:

在静态内容的 http 标头中添加“过期”的最佳方法是什么?例如。图片、css、js

Web 服务器是 IIS 6.0;语言是经典的 ASP

【问题讨论】:

    标签: http iis asp-classic


    【解决方案1】:

    你可以试试这样的:

    @ECHO OFF 
    REM ---------------------------------------------------------------------------
    REM Caching - sets the caching on static files in a web site
    REM syntax 
    REM     Caching.CMD 1 d:\sites\MySite\WWWRoot\*.CSS
    REM 
    REM   %1 is the WebSite ID
    REM   %2 is the path & Wildcard - for example, d:\sites\MySite\WWWRoot\*.CSS
    REM   _adsutil is the path to ADSUtil.VBS
    REM ---------------------------------------------------------------------------
    
    SETLOCAL
    
    SET _adsutil=D:\Apps\Scripts\adsutil.vbs
    
    FOR %%i IN (%2) DO (
      ECHO Setting Caching on %%~ni%%~xi
      CSCRIPT %_adsutil% CREATE W3SVC/%1/root/%%~ni%%~xi "IIsWebFile"
      CSCRIPT %_adsutil% SET    W3SVC/%1/root/%%~ni%%~xi/HttpExpires "D, 0x69780"
      ECHO.
    )
    

    这会将 Web 根目录中每个 CSS 文件的缓存值设置为 5 天,然后像这样运行它:

    Caching.CMD 1 \site\wwwroot\*.css
    Caching.CMD 1 \site\wwwroot\*.js
    Caching.CMD 1 \site\wwwroot\*.html
    Caching.CMD 1 \site\wwwroot\*.htm
    Caching.CMD 1 \site\wwwroot\*.gif
    Caching.CMD 1 \site\wwwroot\*.jpg
    

    有点痛苦,但可行。

    顺便说一句 - 要获取 HttpExpires 的值,请在 GUI 中设置值,然后运行 ​​

    AdsUtil.vbs ENUM W3SVC/1/root/File.txt
    

    得到你需要的实际值

    【讨论】:

    • 我假设每次将新的 css 或 js 文件放入网站文件夹时都必须运行脚本。对吗?
    • 因为缓存设置在文件而不是文件夹上,这是正确的。不确定对 IIS 7/7.5/8 的影响
    【解决方案2】:

    我认为这就是您所追求的,它是 IIS 管理器中 HTTP 标头下的内容过期。我使用将静态内容粘贴在 ~/Resources 之类的文件夹下的模式,并在该特定文件夹上设置过期时间,以使其具有比应用程序的其余部分更长的寿命。

    这里是完整文章的链接:IIS 6.0 F1: Web Site Properties - HTTP Headers Tab

    【讨论】:

      【解决方案3】:

      对于来自 google 的其他人:这将不适用于 iis6,但适用于 7 及更高版本。

      在您的 web.config 中:

      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
      </staticContent>
      

      【讨论】:

        【解决方案4】:

        在 IIS 管理员中,您可以为每种文件类型设置它,或者您可以(对于像 aspx 这样的动态文件)在代码中进行设置。设置完成后,您需要使用 Mozilla firefox + live headers plugin 之类的工具检查输出的标头 - 或者您可以使用基于 Web 的工具,例如 http://www.httpviewer.net/

        【讨论】:

          【解决方案5】:

          我不知道这是否是您要查找的内容,但它确实可以防止我的页面被缓存。

          <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
          <META HTTP-EQUIV="Cache-Control" CONTENT="no-store">
          <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
          <META HTTP-EQUIV="Expires" CONTENT="0">
          <META HTTP-EQUIV="Cache-Control" CONTENT="max-age=0">
          

          我从网上的一篇文章中得到这些,我不再有参考。

          【讨论】:

          • 这可能会阻止浏览器缓存内容,但大多数(全部?)中间缓存将依赖 HTTP 标头,根本不会读取 HTML。
          【解决方案6】:

          糟糕的解决方案,使用 adsutil 创建的第一个命令将失败并出现错误 -2147024713 (0x800700B7),因为您尝试创建的文件已经存在。

          谢谢。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-10-26
            • 1970-01-01
            • 2012-06-05
            • 2016-04-17
            • 1970-01-01
            • 1970-01-01
            • 2013-02-28
            相关资源
            最近更新 更多