web-dev-qa-db-ja.com

IIS and Static content?

ltra-Fast ASP.NET:Chapter 3-Caching :によると

ブラウザがサーバーから取得するファイルは、サーバーの往復を最小限に抑えるために、できる限りブラウザのキャッシュに保存する必要があります。

  • しかし、IIS= 静的コンテンツが実際にそうであるかどうかをどのようにして知るのでしょうか?

    それは単なる画像、CSS、JS ではない ASPX、ashx ...?

    Whereで見ることができますIIS既に考えられているものstaticおよびwhat is not

  • <%@ OutputCacheヘッダー(locationなし)でページが宣言されているシナリオはどうですか? imagesCSS、およびJSソースファイルはその中にありますalso同じプロパティで出力キャッシュされていますか?

  • ベストプラクティスとして、最大有効期限として1年先を設定する必要があります。これをサイト上のすべての静的コンテンツのデフォルトとして使用する必要があります

だから私はこれをやった:

Set Common HTTP Response Headers

しかし後で、OKを押した後、私は見つからない要約メニューを表示します:to whoすでに応答ヘッダーを入れています(この場合:cssフォルダー)。

現在cssフォルダーに応答ヘッダーが適用されていることを確認するには、cssフォルダーに移動する必要があります again--> Http Response Header-->Set Common Headers -->そして、それが表示されます。 web.configには記述されていません。

しかしファイルに対して行う場合(たとえば[Login.aspx):web.configに表示されます:

<configuration>
    <location path="Login.aspx">
        <system.webServer>
            <staticContent>
                <clientCache cacheControlMode="UseExpires" cacheControlMaxAge="1.00:00:00" httpExpires="Fri, 15 Feb 2013 00:00:00 GMT" />
            </staticContent>
        </system.webServer>
    </location>
</configuration>
45
Royi Namir

あなたの状況を理解しています。時々、混乱するIIS=ファイルを処理します。IIS 6 vs IIS 7とClassic Appでは異なります。プールと統合モードのアプリプール:私の経験は、主にIIS 7.5の統合アプリプールを使用しているため、最も正確にコメントできる環境です。

最初の質問

しかし、どのようにIISが実際に静的コンテンツであり、何がそうでないかを知っていますか?

ASPX、ashxではなく、単なるimages、css、js ...?

IISですでに静的であると考えられているものとそうでないものはどこにありますか?

Webサイトに移動して、IISでファイルハンドラーのリストを調べることができます。次に、[ハンドラーマッピング]をクリックします。デフォルトでは、これらは別の.Netベースweb.configから継承されます.Netフレームワークのバージョンに応じた場所。

  • C:\ Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config
  • C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config

要求されているファイルが別のハンドラーにまだ明示的にマップされていない場合、静的ファイルかディレクトリかを決定する最後のオプション(*)としてキャッチオールハンドラー(System.Web.DefaultHttpHandler)に分類されます。閲覧リクエスト。したがって、静的ファイルは、別のハンドラーにまだバインドされていない単なるファイルです。たとえば、*.aspxは、このデフォルトハンドラの前にSystem.Web.UI.PageHandlerFactoryにすでにマップされていることがわかります。そのため、そのハンドラーによって処理され、静的ファイルとは見なされません。そのマッピングを削除した場合、本当に必要な場合は* .aspxを静的ファイルとして技術的に提供することができます(動作の証明のため)。

ただし、web.configのhttpHandlersセクションにファイル拡張子をIISのSystem.Web.StaticFileHandlerにマッピングするエントリを追加することにより、ファイルタイプを静的ファイルとして明示的にリストすることもできます。例えば:

<configuration>
  <system.webServer>
    <handlers>
      <add name="StaticHandler" verb="*" path="*.Zip" type="System.Web.StaticFileHandler" preCondition="integratedMode" />
    </handlers>
  </system.webServer>
</configuration>

この例では<system.webServer> configセクションを使用しているため、Integrated Modeで実行されているアプリケーションプール用です。

二番目の質問

<%@ OutputCache header(locationなし)でページが宣言されたシナリオについてはどうでしょうか。その中の画像、css、js srcファイルも同じプロパティで出力キャッシュされていますか?

いいえ。ページは別個の要求としてサーバーであるため(別個のハンドラーによっても)、まったく異なるキャッシュヘッダー/ヒントを持つことができます。ホストページとそれが使用するリソースは、キャッシュの観点からは関係ありません。

実際、*。htmlのキャッシュ期間を短くし、*。jpgまたは* .pngのキャッシュ期間を長くしたい場合がありますか?考慮すべきこと。

第三の質問

最高の方法として、最大有効期限として1年先を設定する必要があります。サイト上のすべての静的コンテンツのデフォルトとして使用する必要があります

うーん...私は一年まで行かないかもしれません。 1ヶ月はどうですか?次のようなグローバルポリシーを設定します。

<configuration>
  <system.webServer>
    <staticContent>
      <!-- Set expire headers to 30 days for static content-->
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
    </staticContent>
  </system.webServer>
</configuration>

これは上で示したサンプルと同じですが、<location>要素内ではなく、代わりにルート<configuration>要素内にあるため、デフォルトのポリシーです。繰り返しますが、これはIntegrated Modeで実行されているアプリケーションプール用です。時にはあなたもオンにする必要があります:

<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
            <!-- stuff -->
        </modules>
    </system.webServer>
<system.webServer>

これにより、上記の構成要素を尊重するマネージ静的ファイルハンドラーを介して静的ファイルが処理されるようになります。

コメントを修正する

上に投稿した構成ダイアログのドキュメントは次の場所にあります。 HTTP Expires応答ヘッダー(IIS 7)を構成する

明らかにこれらの設定は保存されます C:\ Windows\System32\inetsrv\config\applicationHost.config

私はIIS7を持っていないので、個人的にIIS 7.5で開発しています。この場所が正しいことを確認できる場合は、コメントを投稿してください。

69
BenSwayne
  1. 静的コンテンツは、IISが読み込まれ、処理なしでブラウザに送信されます。そこで、IISを含めてCache-Control Headerクライアントブラウザコンピューターにキャッシュします。
  2. 直接セットアップIISによってそのエーテルを行うことができ、web.config あなたが言うように。 web.configに追加し、IISに関係するコマンドは、asp.netとは関係ありませんが、IISとIISは別のファイルに構成を保存します。キャッシュコントロールヘッダーをIISで直接変更すると、web.configには表示されません。
  3. 画像、CSS、JavaScript、その他の類似ファイルなどの静的コンテンツについては、 10年の有効期限を追加することで、「無期限」ポリシーに従うことができます。
  4. ここでの問題は、静的ファイルの内容を変更できない場合、たとえば10年のjavascriptファイルをキャッシュし、それにわずかな変更を加えた場合、ファイル名を変更するにはetherが必要なことです。最後にパラメータを追加します。
  5. <%@ OutputCacheコントロール上のものは、クライアントではなくサーバーキャッシュを参照します。実際に行われるのは、サーバー上でコントロールのレンダリングをキャッシュし、次回レンダリングするために時間を無駄にしないでくださいキャッシュから-ブラウザに送信します。

また、この回答をさらに読むこともできます。 IIS(動的および静的)キャッシュ、OutPutCacheおよびブラウザーキャッシュの違い

4
Aristos