2011-09-06 10 views
17

Tengo imágenes (PNG) que se generan dinámicamente y se insertarán en sitios web y foros. Cuando una imagen se publica en una página muy ocupada, hay muchas conexiones al servicio para algo que no cambia a menudo. Quiero decirle al navegador por cuánto tiempo guardarlo en caché.Encabezados para la salida de imagen PNG para asegurarse de que se almacena en caché en el navegador?

Entonces, ¿qué encabezados necesito? Actualmente, tengo:

Cache-Control: max-age=86400 
Content-Type: image/png 

Parece que el navegador no está almacenando en caché la imagen (es aproximadamente 20-30kb). ¿Qué más sería necesario?

Editar: Esta es una imagen de ejemplo, ya tengo una dirección URL con .png extensión: https://images.carspending.com/sigimg/5734/user/honda-accord-2-4i-executive-tourer_medium.png

+1

Sin duda haría que sea más fácil para el navegador si tuviera una URL que realmente se parece a una imagen (por ejemplo: 'http: // www.example.com/images/myimage.png' en lugar de' http: // www.example.com/my_script.php? image = 93895') – NullUserException

+0

Ya lo hago, publicación editada. – ddinchev

Respuesta

28

La última cosa que funcionaba era:

header('Pragma: public'); 
header('Cache-Control: max-age=86400'); 
header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400)); 
header('Content-Type: image/png'); 

Ahora el navegador no realizar solicitudes para la imagen cuando se carga una página con una Embebido.

+0

¿Puedes explicar por qué esto responde la pregunta? – Todd

+0

En el momento en que fue respondida (hace 6 años) resolvió el problema. Si se cargara un recurso png con todos estos encabezados en una página externa, se almacenaría correctamente en caché. ¿No está funcionando para ti? – ddinchev

7

asegúrese de que también agrega pública como tal:

header('Cache-Control: max-age=86400, public'); 

Read this also, es muy útil.

+2

El correcto es: header ('Pragma: public'); encabezado ('Cache-Control: max-age = 86400'); Compre me dio la idea – ddinchev

+0

@Veseliq: me alegro. No soy un desarrollador de PHP, por lo que decidí WILD;) Y es bueno que configure la fecha de caducidad en formato GMT; de lo contrario, tampoco habría funcionado. – Icarus

2

Un encabezado Expires debería ayudar.

header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400)); 
+0

Esto junto con Pragma y Cache-Control lo resolvió. – ddinchev

Cuestiones relacionadas