ETags、IIS7、カーネル キャッシュ ポリシー (enableKernelCache)
質問
2 つの部分からなる質問 (部分は密接に関連しています):IIS7 が採用するデフォルトの OOTB ETag ポリシーでは、ページ間を移動するときに If-None-Match/304 インタラクションが表示されないのはなぜでしょうか。
たとえば、空のキャッシュ リクエストに対して返されるヘッダーは次のとおりです。
Content-Type image/png
Last-Modified Thu, 03 Dec 2009 15:51:56 GMT
Accept-Ranges bytes
Etag "a8a0628a3074ca1:0"
Server Microsoft-IIS/7.0
X-Powered-By ASP.NET
Date Tue, 22 Dec 2009 19:47:36 GMT
Content-Length 1780
...その後のページへのアクセスでは、画像の 304 ラウンドトリップは生成されませんか?
また、デフォルトでは、 アプリケーションホスト IIS7 のファイルには次の (1) があります。
<caching enabled="true" enableKernelCache="true">
</caching>
する EnableKernelCache='true' すべての静的ファイルに拡張できるため、拡張子を明示的に登録して付与する必要がなくなります。 変更するまでキャッシュ カーネル ポリシーとして (2):
<caching>
<profiles>
<add extension=".gif" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".png" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".js" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".css" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".jpg" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
<add extension=".jpeg" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" />
</profiles>
</caching>
(1) %systemroot%\System32\inetsrv\config\applicationHost.config
(2) http://labs.episerver.com/en/Blogs/Per/Archive/2009/3/Cconfiguring-cache-expiration-on-IIS-7/
解決
ETag および関連する If-None-Match / If-Modified-Since の処理は、ブラウザーに多少依存します。いくつかの異なるブラウザを試して、何が起こるか確認してみてください。一般的に、明示的な有効期限を設定しない場合、あなたが言ったように 304 が表示されると思います。
カーネル キャッシュの場合、静的ファイルに対してデフォルトで有効になっています。何が起こっているかを確認するには、次のコマンドを実行すると便利です。
netsh http show cachestate
現在キャッシュ内にあるファイルに関する情報が表示されます。
通常、カーネルがファイルをキャッシュするには、特定の時間枠内でファイルを数回参照する必要があることに注意してください。