20

Chcę zmienić nagłówki pamięci podręcznej wysłane z żądania pakietu. Obecnie jest zmienna przez User-Agent, ale nie chcę tego, czy istnieje sposób na zmianę nagłówków wysłanych przez żądanie pakietu?Nagłówki buforowania pamięci podręcznej MVC4

Po szybkim przejrzeniu w zestawie widzę, że nagłówki ustawiono w Bundle.SetHeaders, co jest prywatną funkcją statyczną, więc nie sądzę, że jest to możliwe, chociaż bardzo chciałbym, aby udowodniono, że jest nie tak.

+4

Byłbym też zainteresowany wszelkimi przemyśleniami od kogokolwiek z logiki, aby dodać ten nagłówek w pierwszej kolejności - np. czy sam kod pakietowania zachowuje się inaczej w zależności od agenta użytkownika? A może to tylko środek ostrożności? – Jamie

+0

Jeśli chodzi o to, dlaczego to robimy, jest to potrzebne do funkcji Inspektora stron VS, która wysyła niestandardowego klienta użytkownika przy użyciu przeglądarki IE, aby uniemożliwić buforowi IE przesyłanie żądań do dowolnego inspektora stron lub udostępnianie wiązek inspektorów stron do IE poza VS . –

+0

@HaoKung Mam ten sam problem, chcę móc ustawić wartość nagłówka kontrolki pamięci podręcznej na 'public, max-age = 31536000' zamiast' private', a także dodać nagłówek Etag. Wygląda na to, że oba te sposoby nie są obecnie możliwe? –

Odpowiedz

10

Nie jest to coś, co obecnie ujawniamy. Udostępniamy tylko właściwość Cacheability w pakiecie BundleRepsonse, która może zmienić IBundleTransform. I tak jawnie ustawić następujące rzeczy:

   HttpCachePolicyBase cachePolicy = context.HttpContext.Response.Cache; 
       cachePolicy.SetCacheability(bundleResponse.Cacheability); 
       cachePolicy.SetOmitVaryStar(true); 
       cachePolicy.SetExpires(DateTime.Now.AddYears(1)); 
       cachePolicy.SetValidUntilExpires(true); 
       cachePolicy.SetLastModified(DateTime.Now); 
       cachePolicy.VaryByHeaders["User-Agent"] = true; 

Mamy elementu roboczego nasz portfel, aby otworzyć to i zrobić to bardziej rozciągliwy/konfigurowalny w przyszłości.

+3

Czy istnieje jakakolwiek wskazówka co do osi czasu tej zmiany, wpływ tego nagłówka gra spustoszenie z integracją CDN –

+2

Adres śledzenia trackera: https://aspnetoptimization.codeplex.com/workitem/136. Wspomina także o możliwym obejściu tego problemu. – janv8000

0

Istnieje obejście tego problemu, o którym mowa w janv8000's comment on this response. Trzeba dodać następującą regułę przepisywania URL na serwer WWW:

<system.webServer> 
    <rewrite> 
     <outboundRules> 
      <rule name="Cache Bundles" preCondition="IsBundles" patternSyntax="ExactMatch"> 
       <match serverVariable="RESPONSE_Vary" pattern="User-Agent" /> 
       <action type="Rewrite" value="Accept-Encoding" /> 
      </rule> 
      <preConditions> 
       <preCondition name="IsBundles" patternSyntax="Wildcard"> 
        <add input="{URL}" pattern="*/bundles/*" /> 
       </preCondition> 
      </preConditions> 
     </outboundRules> 
    </rewrite> 
</system.webServer> 

Oczywiście trzeba zwrócić uwagę, aby wszystkie swoje pakiety w folderze wiązki lub zmienić IsBundles warunek odpowiednio.