PHPでステータスコードを返却する時、http_response_codeで指定しても200が返却される事象の解説

  • 2020.04.21
  • PHP
PHPでステータスコードを返却する時、http_response_codeで指定しても200が返却される事象の解説
     

相変わらずタイトルが長いですが。

実際はLaravelを使用していましたが、今回の事象はLaravel有り/無しに関係ないかと思います。

ざっくり概要を書くと、フロントエンドからajaxでリクエストし、PHP側で結果をhttp_response_code()で正常、あるいは異常のコードを返しているにも関わらず、再びフロントエンドで受け取ると正常(200)で処理されてしまう、というもの。

詳細

良いサンプルが思い浮かばない。とってもシンプルにPOSTされたら「レスポンスhogehoge」というメッセージと、レスポンスコード 500を返却する、というものを考えます。

post.php

public function post(Request $request){
    echo("レスポンスhogehoge");
    http_response_code(500);
}
この時、「レスポンスhogehoge」というメッセージは返却されますが、レスポンスコード を確認すると、なぜか200が返却される、という形です。

原因

結論としては、レスポンスコード を返す前に、何かしらのデータを返却していることが原因。(この場合は「レスポンスhogehoge」という文字列を返却している)

どうやら上記の場合、暗黙的にレスポンスコード 200として処理される模様。

ただ、PHPのドキュメントを漁りましたが、そのような記載は見当たらず・・・。

StackOverflowでは似たような質問があったので載せておきます。

※ベストアンサーは見当違いの答えなので注意。

PHPの仕様ではなく、HTTPの仕様なのかなという気もします。

ここは調査不足で申し訳ありません・・・。

PHPカテゴリの最新記事