Para responder à pergunta 2 primeiro, o < IfModule > o wrapper está lá para que sua configuração ainda funcione (embora sem os bits que definem cabeçalhos) em uma instância do Apache que não inclua mod_headers. Sem o wrapper, uma instância do Apache sem mod_headers falharia na inicialização.
Para a pergunta 3, os servidores da Web definem os cabeçalhos Expires e Cache-Control porque o histórico de cabeçalhos de cache é longo e confuso, e cobrir ambos é a melhor opção para conseguir que o máximo de usuários finais respeite sua vida útil de cache . 99% do tempo, qualquer um será suficiente (neste caso você pode usar max-age, e empurrar a carga de trabalho da CPU para determinar o que é de 7200 minutos a partir de agora para o navegador do usuário ao invés de seu servidor). p>
Para a pergunta 1, se as suas páginas .htm e .php são realmente dinâmicas (o conteúdo depende de quem é o usuário ou o que ele está fazendo), então você não deve permitir que ele seja armazenado em cache. Os arquivos .xml geralmente são gerados pelo seu código e, se forem, eles provavelmente devem ser incluídos no conteúdo dinâmico em vez de estático. E não há problema em dar aos seus arquivos "estáticos" uma vida útil tão longa, se você tiver tomado providências para garantir que sejam realmente estáticos e nunca poderá alterar o conteúdo de um arquivo, mantendo o mesmo nome de arquivo. Em particular, se você alterar seus arquivos JavaScript ou CSS, os usuários verão resultados inesperados, dependendo do que eles armazenaram em cache e do que não possuem.