You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()时,得到的响应头如下:
响应头信息截图1
响应头信息截图2

Nginx配置

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:45:11