Можно добиться того что описали в п.1 если в начале скрипта добавить ob_start();
<?php
ob_start();
echo '123';
header('Content-Type: text/html');
echo '345';
в данном случае ob_start() буфферизирует любой вывод и не посылает его (в обработчик на стороне веб-сервера) до окончания работы скрипта, а все header() отправляются сразу же.
p.s.
предупреждаю что приведённый выше пример не рекомендуется к использованию и может привести к появлению трудноуловимых багов. И лучше организовывать свой код так чтобы любой вывод приложения логически шёл в конце, после отправки всех нужных header'ов.