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
相关产品推荐
相关产品推荐

