相変わらずタイトルが長いですが。
実際は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として処理される模様。
ただ、PHPのドキュメントを漁りましたが、そのような記載は見当たらず・・・。
StackOverflowでは似たような質問があったので載せておきます。
※ベストアンサーは見当違いの答えなので注意。
PHPの仕様ではなく、HTTPの仕様なのかなという気もします。
ここは調査不足で申し訳ありません・・・。