Mombu 2011-05-12 06:14:12
Updated by: firstname.lastname@example.org
Reported By: seairth at c** dot net
Bug Type: HTTP related
-Operating System: N/A
+Operating System: *
-PHP Version: Irrelevant
+PHP Version: 4.3.3-RC3
Assigned To: helly
This bug has been fixed in CVS.
In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at http://snaps.php.net/.
In case this was a documentation problem, the fix will show up soon at
In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites in short time.
Thank you for the report, and for helping us make PHP better.
When setting the “Location” HTTP header using the header() function,
PHP automatically changes the HTTP response status to “302 Found”.
However, there are several other legitimate status codes that use the
Location header. These codes include 201, 301, 303, 305, and 307
(according to the HTTP 1.1 spec). When one of these status codes is
already set, setting the Location header should not change it.
Note: there is a workaround. (re)Set the status after setting the
Location header. However, this is not a reasonable solution. For
those codes listed above, it should not matter whether the status is
set before or after the Location header.
It may even be appropriate to not change the status for any value other
than 200 (the default). As a result, if a user explicitly sets the
status to something other than 200, then setting the Location header
should not change that value again (even if the combination of the
status and header do not make sense). The reasoning here is that HTTP
status codes are extensible, meaning that new specifications can add
new status codes that may use the Location header. If only testing for
the above list, new codes would be overlooked and therefore
header(‘HTTP/1.1 201 Created’);
HTTP/1.1 201 Created
HTTP/1.0 302 Found
Edit this bug report at http://bugs.php.net/?id=25044&edit=1