Respostas:
O html5boilerplate.com inclui um arquivo .htaccess bem comentado, com muitas configurações padrão que você deve considerar. Entre eles estão configurações razoáveis para expirar o conteúdo (expira, tags eletrônicas, ...).
Aqui está a documentação sobre mod_expires .
Observe que os Last-Modifiedcabeçalhos são fracos no cache. A preferência atual é usar Cache-Controlcabeçalhos.
O Google tem um bom artigo sobre isso.
Expira e Controle de cache: idade máxima. Eles especificam a "vida útil atualizada" de um recurso, ou seja, o período durante o qual o navegador pode usar o recurso em cache sem verificar se uma nova versão está disponível no servidor da web. Eles são "cabeçalhos de cache fortes" que se aplicam incondicionalmente; ou seja, uma vez definidos e baixados o recurso, o navegador não emitirá nenhuma solicitação GET para o recurso até que a data de validade ou a idade máxima seja atingida.
Última modificação e ETag. Eles especificam alguma característica sobre o recurso que o navegador verifica para determinar se os arquivos são os mesmos. No cabeçalho Última modificação, essa é sempre uma data. No cabeçalho ETag, pode ser qualquer valor que identifique exclusivamente um recurso (versões de arquivo ou hashes de conteúdo são típicos). Last-Modified é um cabeçalho de cache "fraco", em que o navegador aplica uma heurística para determinar se deve buscar o item no cache ou não. (As heurísticas são diferentes entre navegadores diferentes.) No entanto, esses cabeçalhos permitem que o navegador atualize eficientemente seus recursos em cache emitindo solicitações GET condicionais quando o usuário recarrega explicitamente a página. Os GETs condicionais não retornam a resposta completa, a menos que o recurso tenha sido alterado no servidor e, portanto, tenham uma latência menor que os GETs completos.
Eu recomendo o uso de um Cache-Controlou de Expirescabeçalhos, conforme necessário, pois são fortes cabeçalhos de cache. Alguns sistemas ignoram as datas da última modificação.
Você pode usar uma ferramenta como curlou http://redbot.org para verificar os cabeçalhos.
Last-Modifiedcabeçalhos na ausência de outras instruções de armazenamento em cache deixa o período de cache para o cliente HTTP. Se um recurso não tiver sido modificado desde a Last-Modifieddata, ele deverá ser considerado novo. Por outro lado, ao usar um cabeçalho Expiresou, Cache-Controla origem pode definir um período de atualização explícito.
Expiresé um cabeçalho totalmente inadequado para recursos que não expiram. Alguns recursos podem ser modificados, mas não em alguma data de validade. O ponto do Google é queLast-Modifiedrequer um GET condicional, enquantoExpirespermite que o cache do navegador ignore o GET por completo.