ltra-Fast ASP.NET:Chapter 3-Caching :によると
ブラウザがサーバーから取得するファイルは、サーバーの往復を最小限に抑えるために、できる限りブラウザのキャッシュに保存する必要があります。
しかし、IIS= 静的コンテンツが実際にそうであるかどうかをどのようにして知るのでしょうか?
それは単なる画像、CSS、JS ではない ASPX、ashx ...?
Whereで見ることができますIIS既に考えられているものstaticおよびwhat is not?
<%@ OutputCache
ヘッダー(location
なし)でページが宣言されているシナリオはどうですか? images
、CSS
、およびJS
ソースファイルはその中にありますalso同じプロパティで出力キャッシュされていますか?
ベストプラクティスとして、最大有効期限として1年先を設定する必要があります。これをサイト上のすべての静的コンテンツのデフォルトとして使用する必要があります
だから私はこれをやった:
しかし後で、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>
あなたの状況を理解しています。時々、混乱するIIS=ファイルを処理します。IIS 6 vs IIS 7とClassic Appでは異なります。プールと統合モードのアプリプール:私の経験は、主にIIS 7.5の統合アプリプールを使用しているため、最も正確にコメントできる環境です。
しかし、どのようにIISが実際に静的コンテンツであり、何がそうでないかを知っていますか?
ASPX、ashxではなく、単なるimages、css、js ...?
IISですでに静的であると考えられているものとそうでないものはどこにありますか?
Webサイトに移動して、IISでファイルハンドラーのリストを調べることができます。次に、[ハンドラーマッピング]をクリックします。デフォルトでは、これらは別の.Netベースweb.configから継承されます.Netフレームワークのバージョンに応じた場所。
要求されているファイルが別のハンドラーにまだ明示的にマップされていない場合、静的ファイルかディレクトリかを決定する最後のオプション(*
)としてキャッチオールハンドラー(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で開発しています。この場所が正しいことを確認できる場合は、コメントを投稿してください。
Cache-Control Header
クライアントブラウザコンピューターにキャッシュします。web.config
あなたが言うように。 web.configに追加し、IISに関係するコマンドは、asp.netとは関係ありませんが、IISとIISは別のファイルに構成を保存します。キャッシュコントロールヘッダーをIISで直接変更すると、web.configには表示されません。<%@ OutputCache
コントロール上のものは、クライアントではなくサーバーキャッシュを参照します。実際に行われるのは、サーバー上でコントロールのレンダリングをキャッシュし、次回レンダリングするために時間を無駄にしないでくださいキャッシュから-ブラウザに送信します。また、この回答をさらに読むこともできます。 IIS(動的および静的)キャッシュ、OutPutCacheおよびブラウザーキャッシュの違い