2009-12-22 19 views
6

Domanda in due parti (le parti sono strettamente correlate): con il criterio ETag OOTB predefinito utilizzato da IIS7, perché non vediamo l'interazione If-None-Match/304 come navighiamo tra le pagine?ETags, IIS7, Kernel Cache Policy (enableKernelCache)

Le intestazioni restituiti per una richiesta di vuoto-cache, per esempio, sono:

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 

... eppure successivi accessi alla pagina di non generare un andata e ritorno 304 per l'immagine?

Inoltre, il default applicationHost lima per IIS7 ha la seguente (1):

<caching enabled="true" enableKernelCache="true"> 
    </caching> 

Fa enableKernelCache = 'true' estendere a tutti i file statici, liberandovi della necessità di registrare le estensioni esplicitamente di concedere CacheUntilChange come la politica del kernel (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 \ inet SRV \ config \ applicationHost.config

(2) http://labs.episerver.com/en/Blogs/Per/Archive/2009/3/Configuring-cache-expiration-on-IIS-7/

risposta

4

Il trattamento dei ETags e il relativo If-None-Match/If-Modified-Since è in qualche modo il browser dipendente. Potresti provare alcuni browser diversi e vedere cosa succede - in generale, se non imposti una scadenza esplicita, mi aspetto di vedere gli 304, come hai detto tu.

Per la memorizzazione nella cache del kernel, per impostazione predefinita è abilitato per i file statici. Per aiutare a vedere cosa succede, ho trovato utile per eseguire il seguente comando:

netsh http show cachestate 

che mostrerà informazioni sui file che sono attualmente nella cache.

Ricordare che normalmente i file devono essere referenziati un paio di volte entro una certa finestra temporale prima che il kernel li memorizzi nella cache.

+0

Grazie, Rick; Ho provato sia IE8 che FF 3.5 e ho trovato questo comportamento un po 'strano - è documentato ovunque? IIS7 (OOTB) non emette intestazioni di scadenza, solo l'ETag; e tuttavia le richieste successive alla pagina non generano 304 per questi oggetti? – Nariman

+0

L'unica documentazione di cui sono a conoscenza è la specifica HTTP. Mi chiedo se stai vedendo un'ottimizzazione per sessione. Hai provato a uscire dal browser (tutte le finestre), a riavviarlo e a vedere se il risultato è 304s? C'è una pagina pubblica che posso vedere che mostra il comportamento che stai descrivendo? – RickNZ

+0

Poiché le risposte originali non hanno un'intestazione Cache-Control, il browser è (in qualche modo) libero di implementare la propria politica in merito alla memorizzazione nella cache. In questo caso, sceglie di memorizzare le immagini nella cache per la durata della sessione. Se chiudi la scheda in IE8 con il tuo sito al suo interno, quindi apri una nuova scheda e torni alla stessa pagina, vedrai un mucchio di richieste IMS/INM e 304 risposte per tutte le immagini. – RickNZ