From: seairth at cox dot net
Operating system: N/A
PHP version: Irrelevant
PHP Bug Type: HTTP related
Bug description: header("Location:") changing HTTP status

Description:
------------
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 automatically changed.

Reproduce code:
---------------
header('HTTP/1.1 201 Created');
header("Location: http://www.php.net/");



Expected result:
----------------
HTTP Response:

HTTP/1.1 201 Created
Location: [url]http://www.php.net/[/url]

Actual result:
--------------
HTTP Response:

HTTP/1.0 302 Found
Location: [url]http://www.php.net/[/url]

--
Edit bug report at [url]http://bugs.php.net/?id=25044&edit=1[/url]
--
Try a CVS snapshot (php4): [url]http://bugs.php.net/fix.php?id=25044&r=trysnapshot4[/url]
Try a CVS snapshot (php5): [url]http://bugs.php.net/fix.php?id=25044&r=trysnapshot5[/url]
Fixed in CVS: [url]http://bugs.php.net/fix.php?id=25044&r=fixedcvs[/url]
Fixed in release: [url]http://bugs.php.net/fix.php?id=25044&r=alreadyfixed[/url]
Need backtrace: [url]http://bugs.php.net/fix.php?id=25044&r=needtrace[/url]
Try newer version: [url]http://bugs.php.net/fix.php?id=25044&r=oldversion[/url]
Not developer issue: [url]http://bugs.php.net/fix.php?id=25044&r=support[/url]
Expected behavior: [url]http://bugs.php.net/fix.php?id=25044&r=notwrong[/url]
Not enough info: [url]http://bugs.php.net/fix.php?id=25044&r=notenoughinfo[/url]
Submitted twice: [url]http://bugs.php.net/fix.php?id=25044&r=submittedtwice[/url]
register_globals: [url]http://bugs.php.net/fix.php?id=25044&r=globals[/url]
PHP 3 support discontinued: [url]http://bugs.php.net/fix.php?id=25044&r=php3[/url]
Daylight Savings: [url]http://bugs.php.net/fix.php?id=25044&r=dst[/url]
IIS Stability: [url]http://bugs.php.net/fix.php?id=25044&r=isapi[/url]
Install GNU Sed: [url]http://bugs.php.net/fix.php?id=25044&r=gnused[/url]