coar 97/06/12 08:24:04
Modified: htdocs/manual/misc FAQ.html Log: Clean up "premature end of headers" FAQ and add additional (and more common) cause description. Revision Changes Path 1.71 +33 -12 apache/htdocs/manual/misc/FAQ.html Index: FAQ.html =================================================================== RCS file: /export/home/cvs/apache/htdocs/manual/misc/FAQ.html,v retrieving revision 1.70 retrieving revision 1.71 diff -C3 -r1.70 -r1.71 *** FAQ.html 1997/06/12 11:29:11 1.70 --- FAQ.html 1997/06/12 15:24:00 1.71 *************** *** 15,21 **** <!--#include virtual="header.html" --> <H1 ALIGN="CENTER">Apache Server Frequently Asked Questions</H1> <P> ! $Revision: 1.70 $ ($Date: 1997/06/12 11:29:11 $) </P> <P> The latest version of this FAQ is always available from the main --- 15,21 ---- <!--#include virtual="header.html" --> <H1 ALIGN="CENTER">Apache Server Frequently Asked Questions</H1> <P> ! $Revision: 1.71 $ ($Date: 1997/06/12 15:24:00 $) </P> <P> The latest version of this FAQ is always available from the main *************** *** 569,595 **** <P> It means just what it says: the server was expecting a complete set of HTTP headers (one or more followed by a blank line), and didn't get ! them. The most common cause of this (aside from people not ! outputting the required headers at all) a result of an interaction ! with perl's output buffering. To make perl flush its buffers ! after each output statement, insert the following statements before your ! first <CODE>print</CODE> or <CODE>write</CODE> statement: </P> <P> <DL> ! <DD><CODE>$cfh = select (STDOUT);<BR> ! $| = 1;<BR> ! select ($cfh);</CODE> </DD> </DL> </P> <P> This is generally only necessary when you are calling external programs from your script that send output to stdout, or if there will ! be along delay between the time the headers are sent and the actual content starts being emitted. To maximise performance, you should ! turn buffering back <EM>on</EM> (with <CODE>$| = 0</CODE> or the ! equivalent) after the statements that send the headers. <P> If your script isn't written in Perl, do the equivalent thing for whatever language you <EM>are</EM> using (<EM>e.g.</EM>, for C, call --- 569,616 ---- <P> It means just what it says: the server was expecting a complete set of HTTP headers (one or more followed by a blank line), and didn't get ! them. ! </P> ! <P> ! The most common cause of this problem is the script dying before ! sending the complete set of headers, or possibly any at all, to the ! server. To see if this is the case, try running the script standalone ! from an interactive session, rather than as a script under the server. ! If you get error messages, this is almost certainly the cause of the ! "premature end of script headers" message. ! </P> ! <P> ! The second most common cause of this (aside from people not ! outputting the required headers at all) is a result of an interaction ! with Perl's output buffering. To make Perl flush its buffers ! after each output statement, insert the following statements around ! the <CODE>print</CODE> or <CODE>write</CODE> statements that send your ! HTTP headers: </P> <P> <DL> ! <DD><CODE>{<BR> ! local ($oldbar) = $|;<BR> ! $cfh = select (STDOUT);<BR> ! $| = 1;<BR> ! #<BR> ! # print your HTTP headers here<BR> ! #<BR> ! $| = $oldbar;<BR> ! select ($cfh);<BR> ! }</CODE> </DD> </DL> </P> <P> This is generally only necessary when you are calling external programs from your script that send output to stdout, or if there will ! be a long delay between the time the headers are sent and the actual content starts being emitted. To maximise performance, you should ! turn buffer-flushing back <EM>off</EM> (with <CODE>$| = 0</CODE> or the ! equivalent) after the statements that send the headers, as displayed ! above. ! </P> <P> If your script isn't written in Perl, do the equivalent thing for whatever language you <EM>are</EM> using (<EM>e.g.</EM>, for C, call