2

我在 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

如何防止将 no-cache 添加到缓存控制标头?

4

1 回答 1

1

试试这些是否有效:

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

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

在此处输入图像描述

或者

3)

在 iisnode 中提供静态内容的最佳方式是配置 URL 重写模块,以便 IIS 静态文件处理程序处理对静态内容的请求,而不是 node.js。与使用任何 node.js 机制为这些文件提供服务相比,让 IIS 服务静态内容具有很大的性能优势,因为围绕缓存进行了内核级优化,并且不必中断 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. 对公共子目录中存在的物理文件的请求(例如,对 /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

于 2014-08-01T20:36:43.840 回答