ASP.NET MVC - настройки кэша и сжатия в web.config не всегда используются - PullRequest
1 голос
/ 06 сентября 2011

В моем приложении ASP.NET MVC 2 я украсил действие следующими атрибутами.

[ETag]
[OutputCache(Duration = 604800, VaryByParam = "none", Location = OutputCacheLocation.Any)]
public ActionResult Index()

(для атрибута ETag я использовал найденный класс атрибута здесь .)

Я также добавил следующее в свой web.config.

<!-- gzip compression -->
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
  <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />

<!-- ETags -->
<httpProtocol>
  <customHeaders>
    <add name="ETag" value="&quot;&quot;" />
  </customHeaders>
</httpProtocol>

<!-- Expiry -->
<staticContent>
  <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
</staticContent>

Моя проблема в том, что когда я загружаю страницу со своего хост-сервера и просматриваю заголовок в Firebug, я получаю ETag, но срок действия кэша не истекает.

Cache-Control   private
Content-Type    text/html; charset=utf-8
Etag    HKQ9Pp6hFTMRZYZbbIi3HA==,""
Server  Microsoft-IIS/7.0
X-AspNetMvc-Version 2.0
X-AspNet-Version    4.0.30319
X-Powered-By    ASP.NET
Date    Tue, 06 Sep 2011 18:31:05 GMT
Content-Length  4447

Когда я загружаю страницу локально, ответ не не имеет ETag, но имеет с установленными полями "Cache-Control" и "Expires".

Server  ASP.NET Development Server/10.0.0.0
Date    Tue, 06 Sep 2011 18:33:55 GMT
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 2.0
Cache-Control   private, max-age=604800
Expires Tue, 13 Sep 2011 18:33:54 GMT
Last-Modified   Tue, 06 Sep 2011 18:33:54 GMT
Content-Type    text/html; charset=utf-8
Content-Length  4447
Connection  Close

Также обратите внимание, что, хотя я устанавливаю сжатие gzip в web.config, оно не появляется ни в , ни в заголовках ответа.

Так почему настройки в моем файле web.config иногда игнорируются? Возможно ли, что мой хостинг-сервер переопределяет это? Если это так, то для них не имеет большого смысла удалять кеш или настройки сжатия, не так ли?

1 Ответ

1 голос
/ 21 ноября 2012

В конце концов я обнаружил, что эта проблема была вызвана тем, что моя компания хост-сервера настраивала IIS для прохождения Etag, только если запрашивается страница больше , чем дважды в секунду.

Поэтому приведенный выше код обычно работал бы, но некоторая информация удалялась при выходе из сервера, что кажется неправильным, но объясняет, что происходило.

...