There are a number of options that users may be able to set for their browser that change its default caching behavior.By sending the headers above, you should override any settings that may otherwise cause the output of your script to be cached.
I strongly recommend, that you use header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); instead of header("HTTP/1.1 404 Not Found"); I had big troubles with an Apache/2.0.59 (Unix) answering in HTTP/1.0 while I (accidentially) added a "HTTP/1.1 200 Ok" - Header.
The following example disables compression in all versions of IE: Browser Match ".*MSIE.*" gzip-only-text/html It is important to note that headers are actually sent when the first byte is output to the browser.
If you are replacing headers in your scripts, this means that the placement of echo/print statements and output buffers may actually impact which headers are sent.
Most of the pages were displayed correct, but on some of them apache added weird content to it: A 4-digits Hex Code on top of the page (before any output of my php script), seems to be some kind of checksum, because it changes from page to page and browser to browser.
(same code for same page and browser) "0" at the bottom of the page (after the complete output of my php script) It took me quite a while to find out about the wrong protocol in the HTTP-header.
See the page called "Filenames_with_spaces_are_truncated_upon_download" at for more information.