#27345 [Opn]: Status header with PHP CGI
| From: | php_bugs at ecora dot de | Date: | Sun, 22 Feb 2004 14:32:53 +0000 |
| Subject: | #27345 [Opn]: Status header with PHP CGI | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-55316@lists.php.net to get a copy of this message | ||
ID: 27345
User updated by: php_bugs at ecora dot de
Reported By: php_bugs at ecora dot de
Status: Open
Bug Type: CGI related
PHP Version: Irrelevant
New Comment:
I don't know. Maybe there is also a PHP Bug, but IMHO there is at least
a documentation bug. When you send a HTTP-Status-Header via the common
gateway interface to the http-server, then you have to write:
Status: ddd string
instead of
HTTP/1.1 ddd string
Please take a look at the CGI-Specification :
http://hoohoo.ncsa.uiuc.edu/cgi/out.html
PARSED HEADERS
The output of scripts begins with a small header. This header consists
of text lines, in the same format as an HTTP header, terminated by a
blank line (a line with only a linefeed or CR/LF).
[..]
Status
This is used to give the server an HTTP/1.0 status line to send to the
client. The format is nnn xxxxx, where nnn is the 3-digit status code,
and xxxxx is the reason string, such as "Forbidden".
Previous Comments:
------------------------------------------------------------------------
[2004-02-22 06:11:02] et@php.net
Well, to be correct, PHP just sends "Status: 404\r\n".
------------------------------------------------------------------------
[2004-02-22 06:09:08] et@php.net
This is a bug, but not a documentation one.
Both PHP4 and PHP5 just send
"HTTP/1.1 404\r\n"...
when doing header('HTTP/1.0 404 Not found');
which isn't conforming to RFC 2616 (There has to be at least one space
after 404). That may cause Webservers to error out. This is
definitively a bug.
I don't think the "reason-phrase" should be discarded at all.
------------------------------------------------------------------------
[2004-02-22 05:49:49] nlopess@php.net
I couldn't reproduce this in PHP 5.
header("HTTP/1.0 404 Not Found"); print "Status: 404"
and
header("Status: 404 Not Found"); prints "Status: 404 Not Found"
Can anybody check this in PHP 4?
------------------------------------------------------------------------
[2004-02-22 05:10:36] php_bugs at ecora dot de
Description:
------------
Hi,
<Documentation>
header("HTTP/1.0 404 Not Found");
[...]
Note: In PHP 3, this only works when PHP is compiled as an Apache
module. You can achieve the same effect using the Status header.
header("Status: 404 Not Found");
</Documentation>
IMHO this is not correct. Because the HTTP-status-header (also
Content-Type- and Location-Header) is always a server parsed header,
when PHP (PHP3, PHP4, PHP5 or also Perl or Python, ...) runs via CGI.
The official CGI Specification (see http://www.w3.org/CGI/):
http://hoohoo.ncsa.uiuc.edu/cgi/out.html
That means not only in PHP3 also in PHP4 or PHP5: When PHP runs via
CGI, then you have to write:
header("Status: 404 Not Found"); instead of header("HTTP/1.0 404 Not
Found");
Reproduce code:
---------------
When i try to send a header("HTTP/1.0 404 Not Found"); on my
installation (Apache 1.3.29 + PHP 4.2.3 CGI on Linux) then i receive a
500 internal server error
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=27345&edit=1