Siguiendo lo indicado por @maycoalvarez, hacerlo a traves del servidor, es la forma más indicada.
En el caso de Apache en particular, los módulos Expires y Headers, te van a permitir manejar como, que y durante cuanto tiempo cachear los diferentes componentes de tu web 
Un ejemplo básico 
Para cachear todas mis imágenes, multimedia y archivos de fuentes durante 1 año  
Si lo haces con mod_headers (por extension de archivo)    
Código Apache:
Ver original- <IfModule mod_headers.c> 
- <FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf|woff|eot|svg|ttf|flv|swf)$"> 
-   Header set Cache-Control "public, max-age=29030400" 
- </FilesMatch> 
- </IfModule> 
Si lo haces con mode_expires y para diferentes fechas de expiración ,algo asi (por tipo de contenido)    
Código Apache:
Ver original- <IfModule mod_expires.c> 
- ExpiresActive On 
- ExpiresDefault A86400         
- ExpiresByType image/x-icon A2592000 
- ExpiresByType application/x-javascript A2592000 
- ExpiresByType text/css A2592000 
- ExpiresByType image/gif A604800 
- ExpiresByType image/png A604800 
- ExpiresByType image/jpeg A604800 
- ExpiresByType text/plain A604800 
- ExpiresByType application/x-shockwave-flash A604800 
- ExpiresByType video/x-flv A604800 
- ExpiresByType application/pdf A604800 
- ExpiresByType text/html A900 
- </IfModule> 
Los valores estan expresados en segundos (29030400 = 1 año) 
Estos dos módulos no vienen habilitados por defecto en la instalación de Apache, pero dificilmente los proveedores de hosting actual, no tengan habilitado uno de ellos. 
Una guía definitiva al tema, com ejemplos mucho más complejos en 
http://www.askapache.com/htaccess/sp...s-caching.html 
Saludos