En las FAQ's de este foro tienes un excelente ejemplo ... que hasta te permite opción "resume" por si la conexión se corta al bajar tu archivo ...
En su base .. el tema de que un navegador interpreta los datos que se le envian como "para descargar" o como para "intentar visualizarlo/interpretarlo" depende de las cabeceras HTTP que uses .. ejemplos tienes en el foro y en la FAQ mencionada:
Ejemplo usando el buscador:
http://www.forosdelweb.com/search.ph...der=descending
Un saludo,