Laravel8でCORSが失敗するくだらない理由

ドメインをまたぐAPIをajaxで使おうとしたとき、
CORS Errorが起こる場合がよくあるようです。
たいがいはサーバー側のレスポンスヘッダーにAccess-Control-Allow-Origin を追記すればいいわけですが、
Laravel8からは
fruitcake/laravel-cors
というパッケージが最初から同梱されているのでこれを使います。
設定自体はとても簡単。ひとまずconfig/cors.phpを以下のように変えれば全てのリクエストで
Access-Control-Allow-Origin
が設定される。
'paths' => ['*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => true,
/
/app/Http/Kernel.phpを見ると
protected $middleware = [
\Fruitcake\Cors\HandleCors::class,
ここでこんな感じでHandleCorsを使うよう書いてあります。
で、普通はこれだけで万事解決なのですが、
なぜかレスポンスヘッダーにAccess-Control-Allow-Originが入ってこないケース
1.ミドルウェアの順番的におかしなことになってるケース
さきほどのkernel.phpの$middlewareはどうやら記載されたclassの順番が
実行される順番のようで、HandleCorsの処理が行われる前になにか問題があった時
Access-Control-Allow-Originが追記されない場合があるようです。
\Fruitcake\Cors\HandleCors::class,
この記述を一番上に移動してみましょう。
2.ControllerでResponseをreturnしてないケース
普通はありえないんだけど、こんなケース
class Foo extends Controller{
public function hoge(Request $request){
echo "Hello world";
return;
}
}
もしくは、dd()、ddd()していると、Responseがreturnされないので、CORSエラーになります。
意外とこういうちょっとドジな問題ってハマりますよね。