Saturday, February 19, 2011

How do I set the cachability of static files in IIS?

I have some static images in a folder on my IIS 6-based website that I want to be downloaded as little as possible (to preserve bandwidth). I've set the Content Expiration to expire after 30 days. Is there anything else I can do in IIS to try to maximize the caching by browsers, proxy, and gateway caches?

Such as adding a Cache-Control header? Anything else?

From stackoverflow
  • http://www.galcho.com/Blog/PermaLink.aspx?guid=490f3c31-1815-40fc-a871-5d6899fa35e0 This is a blog post covering the following:

    1. Allow overriding static content setting
    2. set cache settings using following commands
    3. Cache it on client
    TAG : Good answer, but I guess I should have specified IIS6
  • Here's my answer from this question: http://stackoverflow.com/questions/102215/expires-in-http-header-for-static-content-how-to

    @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
    REM *******
    REM SET THIS TO POINT TO adsutil.vbs - TYPICALLY c:\inetpub\adminscripts\adsutil.vbs
    REM *******
    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.
    )
    

    Which sets the caching value for each CSS file in a web root to 5 days, then run it like this:

    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
    

    Kind of painful, but workable.

    BTW - to get the value for HttpExpires, set the value in the GUI, then run

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

    to get the actual value you need

0 comments:

Post a Comment