> because PHP, classic ASP, ColdFusion, etc. didn’t buffer.
ASP (and I assume the others, my memory of them is more hazy) could buffer but it wasn't the default. You could control when the buffer was flushed if needed, to push initial content while something larger was being produced, heading towards the same compromise documented here (selective buffering) but from the other direction.
PHP could, too, but it required an extension which wasn’t enabled by default and had some caveats about memory use and performance way back then. I know this because I used it to implement gzip compression in PHP 3 (or maybe really early 4?) with a hook to compress each chunk before sending it, which really helped our customer’s product pages & reports with tons of repetitive HTML.
ASP (and I assume the others, my memory of them is more hazy) could buffer but it wasn't the default. You could control when the buffer was flushed if needed, to push initial content while something larger was being produced, heading towards the same compromise documented here (selective buffering) but from the other direction.