No puede haber html antes del header.
La situación real es que no puede enviarse nada al navegador y despues tratar de agregar los headers, ya que en ese primer envio es donde se mandan los encabezados. Por ejemplo, lo siguiente es incorrecto:
Código PHP:
<html>
<head>
<?
if (bla bla) {
header("Location:error.php");
}
?>
Un error comun es dejar alguna linea en blanco antes de comenzar con el script, ya que PHP interpreta ese salto de linea como contenido html que debe enviarse al navegador, y al tratar de agregar headers, sale un error...
Tal vez lo que tu dices es que puede "guardarse" html sin que este sea enviado, como esto:
Código PHP:
<?
$inicio="<html>";
$inicio.="<head>";
if (bla bla) {
header("Location:error.php");
} else {
echo $inicio;
}
Saludos!