Как подавить заголовок Vary: * при использовании OutputCacheProfiles - PullRequest
3 голосов
/ 06 марта 2012

Использование любого из OutputCacheProfiles, указанных ниже

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <clear/>

      <add
        name="CachingProfileParamEmpty"
        duration="87"
        varyByParam=""
        location="Any"
      />

      <add
        name="CachingProfileParamNone"
        duration="87"
        varyByParam="None"
        location="Any"
      />

      <add
        name="CachingProfileParamStar"
        duration="87"
        varyByParam="*"
        location="Any"
      />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

Заголовок Vary: * всегда отправляется

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 05 Mar 2012 20:11:52 GMT
X-AspNetMvc-Version: 3.0
Cache-Control: public, max-age=87
Expires: Mon, 05 Mar 2012 20:13:13 GMT
Last-Modified: Mon, 05 Mar 2012 20:11:46 GMT
Vary: *
Content-Type: text/html; charset=utf-8
Content-Length: 5368
Connection: Close

, что в свою очередь заставляет браузер отправлять запрос на сервер, а не локально кэшировать. Даже используя

this.Response.Cache.SetOmitVaryStar(false);

не помогает. Единственный способ заставить заголовок не отправляться, это использовать прямой атрибут

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

Что я делаю не так? Я бы предпочел использовать CacheProfiles, так как они могут быть изменены в web.config.

Заголовки, размещенные здесь, взяты из Cassini (Сервер: ASP.NET Development Server / 10.0.0.0), но я также видел идентичные результаты в IIS 7 для Windows 2008.

Ответы [ 2 ]

9 голосов
/ 22 ноября 2012

Это может быть немного поздно для amit_g, но для любого другого, ищущего ответ, вы можете указать настройку выходного кэша всего приложения в конфигурации, чтобы удалить заголовок ответа Vary. *.

<caching>
  <outputCache omitVaryStar="true" />
  <outputCacheSettings>
    <outputCacheProfiles>
       ...
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>
3 голосов
/ 03 февраля 2015

Обратите внимание, что использование "true" для SetOmitVaryStar является правильным значением для пропуск заголовка Vary: * (не ложь, которая не будет его пропускать).

Использование следующего кода сработало для меня:

this.Response.Cache.SetOmitVaryStar (истина);

...