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

Laravel+Inertia项目生产环境火狐浏览器Inertia渲染失效如何解决?

问题报错信息

All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.

问题报错截图

适配Firefox的解决方案

1. 校验后端响应逻辑

  • 确认所有对应inertia-link跳转的路由,没有强制返回普通JSON的代码,必须使用inertia()助手或Inertia::render()返回响应。
  • 确认HandleInertiaRequests中间件已全局注册,没有被其他中间件拦截篡改响应。
  • 新增判断逻辑:只要请求携带X-Inertia头,就必须返回Inertia格式响应,不可直接返回JSON。

2. 修正缓存适配逻辑

Firefox的缓存策略与Chromium内核浏览器不同,会缓存XHR请求导致返回非预期的旧JSON响应,可通过添加响应头禁用Inertia请求的缓存:
在HandleInertiaRequests中间件中添加如下代码:

public function handle(Request $request, Closure $next)
{
    $response = parent::handle($request, $next);
    if ($request->header('X-Inertia')) {
        $response->headers->set('Cache-Control', 'no-cache, no-store, must-revalidate');
        $response->headers->set('Pragma', 'no-cache');
        $response->headers->set('Expires', '0');
    }
    return $response;
}

也可以在前端给所有Inertia请求加时间戳参数禁用缓存:

import { Inertia } from '@inertiajs/inertia'

Inertia.on('start', (event) => {
  event.detail.visit.url.searchParams.append('_t', Date.now())
})

3. 修复重定向与异常处理逻辑

  • 涉及权限校验、登录跳转等重定向场景时,直接使用Laravel自带的redirect()方法返回即可,不要自定义302响应后接JSON内容。
  • 调整全局异常处理器,针对携带X-Inertia头的请求,走默认的Laravel异常响应逻辑,不要强制返回JSON格式的错误信息:
public function render($request, Throwable $exception)
{
    if ($request->header('X-Inertia')) {
        return parent::render($request, $exception);
    }
    // 普通请求的自定义异常处理逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:54:01