2012-05-30 12 views
5

In IIS 7.5, quando non ho Output Caching attivato, il mio script PHP imposta con successo il caching del browser nella intestazione Cache-Control:Perché? Output Caching disabilita automaticamente la cache del browser in IIS 7.5

Cache-Control: max-age = 43200, pubblica
Content-Type: text/html
Scadenza: mer, 30 maggio 2012 22:15:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
Data: Wed, 30 maggio 2012 10:15:18 GMT
Connessione: chiudi
Content-Length: 5105

Tuttavia, se abilito cache di output per i file .php, ottengo la seguente intestazione:

Cache-Control: no-cache, max-age = 43200, pubblica
Content tipo: text/html
Scadenza: mer, 30 mag 2012 22:25:34 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
Data: Wed, 30 Maggio 2012 10:25:34 GMT
Connessione: chiudi

(si noti che "no-cache" viene aggiunto a Cache-Control prima che il mio script php funzioni)

Non c'è modo, ho trovato, di impedire che "no-cache" venga aggiunta alla cache- Chiave di controllo, se la cache di output è abilitata per un tipo di file. Ho cercato di farlo nel file web.config:

 <customHeaders> 
      <remove name="X-Powered-By" /> 
    <remove name="Cache-Control" /> 
      <add name="Cache-Control" value="public" /> 
     </customHeaders> 

che non funziona. Perché questo deve essere così reciprocamente esclusivo? Mi piacerebbe avere sia Output Caching che Browser Caching abilitati.

risposta

8

Sfortunatamente l'interfaccia di Gestione IIS non consente di utilizzare tutte le funzionalità supportate dal modulo di caching dell'output. Una di queste funzionalità consiste nell'impostare la posizione della cache che controlla indirettamente l'intestazione del controllo della cache. Devi modificare manualmente il tuo web.config per cambiarlo. La sintassi è simile:

<caching> 
    <profiles> 
     <add extension=".php" ..... location="Any" /> 
    </profiles> 
</caching> 

Il <add /> tag avrà più possibilità a seconda di come si desidera che il caching di lavorare. La parte importante è aggiungere l'attributo location="...". I seguenti valori sono supportati e controllano l'intestazione cache-control come segue:

Any o Downstream = public

ServerAndClient o Client = private

None o Server o vuoto = no-cache

Come l'attributo location è assente per impostazione predefinita, IIS per impostazione predefinita invierà un'intestazione Cache-Control: no-cache quando l'output nella cache è ena Bled. Ulteriori informazioni sulla cache di output e le funzionalità supportate sono disponibili anche su: Response caching in IIS7

+1

Sei fantastico. L'aggiunta dell'attributo location ha risolto il mio problema. Non posso ringraziarti abbastanza. Grazie molto! –

+0

Avete suggerimenti per aggiungere un'intestazione http Expires dinamica? Vedi qui: http://stackoverflow.com/questions/10825497/iis-7-5-how-do-you-add-a-dynamic-http-expires-header –

+0

Ha risposto a questa domanda individualmente. –

Problemi correlati