Laravel(Docker+WSL)开发:响应始终返回200与text/html问题求助
Laravel开发响应异常问题
我使用Docker和WSL进行Laravel开发时遇到一个问题:无论在路由中设置何种响应参数,返回的响应始终是状态码200且Content-Type为text/html。
路由代码
Route::get('/test', function () { $response = response() ->json(['123' => 'tests'], 422); $response->header('Content-Type', 'application/json'); return $response; });
响应头信息
当返回return $response->headers->all()时,得到的响应头如下:

Nginx配置

排查与解决方法
修正Nginx重写规则
检查Nginx配置中的try_files指令,必须确保请求能正确转发到Laravel的入口文件:try_files $uri $uri/ /index.php?$query_string;错误的规则会导致请求被Nginx直接返回静态响应,覆盖你设置的响应状态码和头信息。修改后重启Nginx容器生效。
验证请求是否到达Laravel
在路由中添加日志输出,确认请求被Laravel处理:Route::get('/test', function () { \Log::info('Test route accessed'); $response = response()->json(['123' => 'tests'], 422); return $response; });查看
storage/logs/laravel.log,如果没有日志记录,说明请求没到达应用,需要检查Docker端口映射、Nginx反向代理配置。清除Laravel缓存
执行以下命令清除路由和配置缓存,避免旧缓存导致设置不生效:php artisan route:clear php artisan config:clear排查中间件干扰
检查全局中间件列表(app/Http/Kernel.php),看是否有中间件会修改响应头或状态码。可以临时注释部分中间件,测试响应是否恢复正常。确认代码同步
由于使用WSL+Docker,确保本地修改的代码已同步到容器内。进入容器查看路由文件是否为最新版本:docker exec -it [你的容器名称] bash cat routes/web.php
内容的提问来源于stack exchange,提问作者Sergei Semenets
相关产品推荐
相关产品推荐

