Назад | Перейти на главную страницу

Используя IIS7, почему мои файлы PNG кэшируются браузером, а файлы JS и CSS - нет?

Я пытаюсь разобраться с кешированием в IIS для своего сайта.

В принципе, я не хочу ничего кэшировать, кроме файлов .png, .js и .css.

На уровне своего сайта я открыл заголовки ответа HTTP и использовал «Установить общие хедеры ...», чтобы установить срок действия содержимого немедленно.

У меня нет профилей кэширования вывода, установленных на каком-либо уровне в IIS.

Я очищаю кеш браузера и пытаюсь зайти на свой сайт. Когда мой сайт запрашивает файл PNG, я получаю такие ответы, как:

Accept-Ranges   bytes
Age 0
Connection  Keep-Alive
Content-Type    image/png
Date    Thu, 12 Apr 2012 21:55:15 GMT
Etag    "83b7322de318cd1:0"
Last-Modified   Thu, 12 Apr 2012 19:33:45 GMT
Server  Microsoft-IIS/7.5
X-Powered-By    ASP.NET

Для файлов JS и CSS я вижу такие ответы:

Accept-Ranges   bytes
Cache-Control   no-cache
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  597
Content-Type    text/css
Date    Thu, 12 Apr 2012 21:55:15 GMT
Etag    "06e45ede15bca1:0"
Last-Modified   Mon, 02 Nov 2009 17:28:44 GMT
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-Powered-By    ASP.NET

Accept-Ranges   bytes
Cache-Control   no-cache
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  42060
Content-Type    application/x-javascript
Date    Thu, 12 Apr 2012 21:55:14 GMT
Etag    "2356302de318cd1:0"
Last-Modified   Thu, 12 Apr 2012 19:33:45 GMT
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-Powered-By    ASP.NET

Итак, почему мои PNG можно кэшировать, а файлы JS и CSS - нет?

Затем я перехожу к функции кэширования вывода в IIS и настраиваю профили для файлов .png, .css и .js. Это обновит файл web.config следующим образом:

<caching>
     <profiles>
           <add extension=".png" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
           <add extension=".css" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
           <add extension=".js" policy="CacheUntilChange" kernelCachePolicy="DontCache" />
     </profiles>
</caching>

Я выполняю «предупредительный» IISReset и снова пытаюсь зайти на свой сайт.

Для файлов PNG я вижу следующий ответ:

Accept-Ranges   bytes
Age 0
Connection  Keep-Alive
Content-Length  3833
Content-Type    image/png
Date    Thu, 12 Apr 2012 22:02:30 GMT
Etag    "0548c9e2c5dc81:0"
Last-Modified   Tue, 22 Jan 2008 19:26:00 GMT
Server  Microsoft-IIS/7.5
X-Powered-By    ASP.NET

Для файлов CSS и JS я вижу следующие ответы:

Accept-Ranges   bytes
Cache-Control   no-cache,no-cache
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  2680
Content-Type    application/x-javascript
Date    Thu, 12 Apr 2012 22:02:29 GMT
Etag    "0f743af9015c81:0"
Last-Modified   Tue, 23 Oct 2007 16:20:54 GMT
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-Powered-By    ASP.NET



Accept-Ranges   bytes
Cache-Control   no-cache,no-cache
Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  3831
Content-Type    text/css
Date    Thu, 12 Apr 2012 22:02:29 GMT
Etag    "c3f42d2de318cd1:0"
Last-Modified   Thu, 12 Apr 2012 19:33:45 GMT
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-Powered-By    ASP.NET

Что я делаю не так? Полностью ли я понял особенности IIS или есть ошибка?

Самое главное, как мне достичь того, чего я хочу, - заставить браузер кэшировать только файлы PNG, JS и CSS?