PHP header()で設定されるステータスコード
このページは、PHPの header() で設定される、レスポンスのステータスコードについて調査した内容を記載するページです。
注意
- このページに記載してある内容はPHP 8.1.6時点の内容です。将来のバージョンでは仕様が変更されているかもしれません。
設定されるステータスコード
おおまかな条件 | 設定されるステータスコード |
---|---|
header('Location: ...'); かつ、該当のheader() を呼び出す以前に指定したステータスコードが201, 3XX以外 (未指定含む) |
302 |
header('WWW-Authenticate: ...'); |
401 |
header('...', trueまたはfalse, ステータスコード); |
指定したステータスコード |
上記以外 | 設定されない (更新されない) |
該当ソース
※ SG(request_info).proto_num
が1000を超え (≒リクエストされたHTTPのバージョンが1.1 (1001) 以上) 、リクエストメソッドがHEADかGET以外(POSTやPUTなど)だと303になる条件がありますが、apache2handlerだとここではリクエストされたHTTPのバージョンがいくつでも1000で処理されているようなのでステータスコードが自動的に303になることは無いようです。1
(header()
の第3引数などで303を指定していれば303になります。また、他のSAPIだとこの時点でproto_numが1000を超える場合があるかもしれません(未調査))
-
https://github.com/php/php-src/blob/PHP-8.1.6/main/SAPI.c#L448 の
sapi_activate()
からこの処理まででproto_numを変更している箇所がおそらくありません。https://github.com/php/php-src/blob/PHP-8.1.6/sapi/apache2handler/sapi_apache2.c#L160 は最終的なレスポンス出力時に処理されるようです。該当のSG(request_info).proto_num > 1000 &&
を削除して自力でビルドした場合は、リクエストメソッドがPOSTのときにheader('Location: ...');
を使うと303になります。 ↩︎