使用IISNode进行客户端缓存

时间:2014-07-16 17:53:31

标签: caching iis client-side iisnode iis-8.5

我在IIS 8.5上运行IISNode,但无法启用静态文件的客户端缓存。 使用IISNode在不触及节点的情况下提供文件。当文件与IISNode一起提供时,它们包含Cache-Control: no-cache标题。

如果我只是托管节点并绕过IIS和IISNode,我会得到Cache-Control:public, max-age=604800标题。

某处IIS或IISNode正在设置缓存控制值。我似乎无法在IIS中更改它,因为当我这样做时,我得到Cache-Control:no-cache,public,max-age=604800

如何防止将无缓存添加到缓存控制头?

1 个答案:

答案 0 :(得分:1)

尝试以下任何一种方法:

1)在IISNode中设置缓存:app.use(express.static(path.join(__dirname, 'public'), {maxAge: 86400000}));

2)添加新的IIS规则以缓存来自youriisnode.js的所有目标

enter image description here

3)

在iisnode中提供静态内容的最佳方法是配置URL重写模块,以便IIS静态文件处理程序处理静态内容而不是node.js的请求。让IIS提供静态内容比使用任何node.js机制提供这些文件具有很大的性能优势,因为内核级别优化了缓存,而且不必破解JavaScript代码。

创建web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>         
      <handlers>
           <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
     </handlers>
      <rewrite>
           <rules>

                <rule name="LogFile" patternSyntax="ECMAScript" stopProcessing="true">
                     <match url="^[a-zA-Z0-9_\-]+\.js\.logs\/\d+\.txt$"/>
                </rule>

                <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">                    
                    <match url="^server.js\/debug[\/]?" />
                </rule>

                <rule name="StaticContent">
                     <action type="Rewrite" url="public{REQUEST_URI}"/>
                </rule>

                <rule name="DynamicContent">
                     <conditions>
                          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True"/>
                     </conditions>
                     <action type="Rewrite" url="server.js"/>
                </rule>

           </rules>
      </rewrite>
   </system.webServer>
 </configuration>

这是做什么的:

  • 假设server.js是node.js应用程序的入口点,该应用程序将接收所有URL路径的HTTP请求除外:

    1. 请求日志(/server.js.logs/0.txt,/server.js.logs/1.txt等),

    2. 调试请求(/server.js/debug),

    3. 对public子目录中存在的物理文件的请求(例如,对/styles.css的请求将由IIS中的静态文件处理程序处理而不是您的node.js应用程序IFF该文件存在于\ public \ styles.css位置)。

现在将对所有其他URL(例如/ a / b / c?foo = 12)的请求发送到server.js应用程序,并将根据其中实现的逻辑进行处理。如果是Express应用程序,将适用快递路线。

原始来源:https://github.com/tjanczuk/iisnode/issues/160#issuecomment-5606547