2012-05-30 21 views
5

En IIS 7.5, cuando no tengo salida está activada la caché, mi script php establece con éxito el almacenamiento en caché del navegador en la cabecera Cache-Control:¿Por qué? El almacenamiento en caché de salida desactiva automáticamente la caché del navegador en IIS 7.5

Cache-Control: max-age = 43200, pública
Content-Type: text/html
Expira: Wed, 30 May 2012 22:15:18 GMT
servidor: Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
Fecha: mié, 30 de mayo de 2012 10:15:18 GMT
Conexión: cerrar
Content-Length: 5105

Sin embargo, si se habilita el almacenamiento en caché de salida para los archivos .php, me sale el siguiente encabezado:

Cache-Control: no-cache, max-age = 43200, pública
contenido -Tipo: text/html
Expira: Wed, 30 May 2012 22:25:34 GMT
servidor: Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
Fecha: mié, 30 Mayo de 2012 10:25:34 GMT
Conexión: cerrar

(aviso de "no-cache" se añade a la Cache-Control antes del trabajo de mi php script)

No hay manera, me he encontrado, para evitar el "no-cache" de ser añadido a la Cache Tecla de control, si el almacenamiento en caché de salida está habilitado para un tipo de archivo. Intenté hacerlo en el archivo web.config:

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

Eso no funciona. ¿Por qué debe ser esto tan mutuamente exclusivo? Me gustaría tener el caché de resultados y el caché del navegador habilitados.

Respuesta

8

Desafortunadamente, la interfaz del Administrador de IIS no le permite utilizar todas las funciones admitidas por el módulo de almacenamiento en caché de salida. Una de estas características es establecer la ubicación del caché que controla indirectamente el encabezado de control de caché. Tienes que editar manualmente tu web.config para cambiarlo. La sintaxis es como:

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

La etiqueta <add /> tendrán más opción dependiendo de cómo quiere que su almacenamiento en caché para trabajar. La parte importante es agregar el atributo location="...". Los siguientes valores son compatibles y que controlan la cabecera de control de caché de la siguiente manera:

Any o Downstream = public

ServerAndClient o Client = private

None o Server o vacío = no-cache

Como el atributo location está ausente de forma predeterminada, IIS enviará de manera predeterminada un encabezado Cache-Control: no-cache cuando el almacenamiento en caché de resultados esté habilitado sangrado También se puede encontrar más información sobre el almacenamiento en caché de resultados y las funciones compatibles en: Response caching in IIS7

+1

Eres increíble. Agregar el atributo de ubicación resolvió mi problema. No puedo agradecerte lo suficiente. ¡Muchas gracias! –

+0

¿Tiene alguna sugerencia para agregar un encabezado dinámico de Expires http? Consulte aquí: http://stackoverflow.com/questions/10825497/iis-7-5-how-do-you-add-a-dynamic-http-expires-header –

+0

Respondió esa pregunta individualmente. –

Cuestiones relacionadas