2

IIS 8.5 で IISNode を実行していますが、静的ファイルのクライアント側キャッシュを有効にできません。ファイルは、IISNode を使用してノードに触れることなく提供されます。ファイルが IISNode で提供される場合、ファイルにはCache-Control: no-cacheヘッダーが含まれます。

ノードだけをホストし、IIS と IISNode をバイパスするCache-Control:public, max-age=604800場合、ヘッダーを取得します。

どこかで IIS または IISNode が cache-control 値を設定しています。IIS で変更できないようです。Cache-Control:no-cache,public,max-age=604800

no-cache が cache-control ヘッダーに追加されないようにするにはどうすればよいですか?

4

1 に答える 1

1

これらのいずれかが機能するかどうか試してください:

1) IISNode でキャッシュを設定します。app.use(express.static(path.join(__dirname, 'public'), {maxAge: 86400000}));

2) youriisnode.js からのすべてのレスポーズをキャッシュする新しい IIS ルールを追加します。

ここに画像の説明を入力

また

3)

iisnode で静的コンテンツを提供する最善の方法は、IIS 静的ファイル ハンドラーが node.js ではなく静的コンテンツの要求を処理するように URL 書き換えモジュールを構成することです。IIS で静的コンテンツを提供すると、キャッシングに関するカーネル レベルの最適化が行われ、JavaScript コードに侵入する必要がないため、node.js メカニズムを使用してこれらのファイルを提供するよりもパフォーマンスが大幅に向上します。

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 が、以下を除くすべての URL パスの HTTP リクエストを受け取る node.js アプリケーションへのエントリ ポイントであると想定しています。

    1. ログのリクエスト (/server.js.logs/0.txt、/server.js.logs/1.txt など)、

    2. デバッグ リクエスト (/server.js/debug)、

    3. パブリック サブディレクトリに存在する物理ファイルの要求 (たとえば、/styles.css の要求は、ファイルが \public\styles.css の場所に存在する node.js アプリケーション IFF ではなく、IIS の静的ファイル ハンドラーによって処理されます)。

他のすべての URL (例: /a/b/c?foo=12) のリクエストは server.js アプリケーションに送信され、そこに実装されたロジックに従って処理されます。Express アプリの場合、Express ルートが適用されます。

元のソース: https://github.com/tjanczuk/iisnode/issues/160#issuecomment-5606547

于 2014-08-01T20:36:43.840 に答える