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

Chrome网络面板不显示PHP错误,但Firefox可正常显示的解决求助

Chrome网络面板无法显示PHP错误响应的解决思路

问题描述

Chrome网络面板提示:Failed to load response data: No data found for resource with given identifier,但Firefox、Insomnia能正常显示PHP错误响应。测试触发代码为:

dd('Test'); // 依赖symfony/var-dumper包
// 或
throw new \Exception('Test');

自定义错误处理器已设置Content-Type: application/json并返回500状态码,仅在纯PHP环境下出现此问题,Laravel/Symfony框架中无异常。

解决思路

  • 强制设置响应内容长度
    Chrome对Content-Length响应头的校验更严格,纯PHP环境中手动写入响应体后,需明确设置内容长度,避免Chrome无法识别响应数据:

    $payload = [
        'error' => [
            'message' => $exception->getMessage(),
            'code' => $exception->getCode()
        ]
    ];
    $json = json_encode($payload);
    $response->getBody()->write($json);
    
    return $response->withHeader('Content-Type', 'application/json')
                    ->withHeader('Content-Length', strlen($json))
                    ->withStatus(500);
    
  • 清空输出缓冲
    纯PHP环境可能存在未关闭的输出缓冲,导致响应内容被截断。在错误处理器开头添加缓冲清空操作,确保只有自定义JSON响应被发送:

    ob_clean(); // 清空之前的所有输出内容
    // 后续错误响应生成代码
    
  • 处理symfony/var-dumper的终止干扰
    dd()会直接调用exit()终止程序,导致自定义错误处理器代码无法执行。可以替换dd()为手动抛出异常,或注册全局终止回调捕获这类输出:

    register_shutdown_function(function () {
        $lastError = error_get_last();
        if ($lastError && in_array($lastError['type'], [E_ERROR, E_PARSE, E_CORE_ERROR])) {
            ob_clean();
            http_response_code(500);
            header('Content-Type: application/json');
            echo json_encode([
                'error' => [
                    'message' => $lastError['message'],
                    'code' => $lastError['type']
                ]
            ]);
        }
    });
    
  • 排查Chrome本地干扰
    在Chrome网络面板勾选「禁用缓存」,或使用无痕模式测试,避免旧缓存影响。同时关闭可能拦截响应的浏览器扩展(如广告拦截、代理工具)。

内容的提问来源于stack exchange,提问作者beeftony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:22:37