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

Laravel中Inertia.get()触发409错误,router.get()可正常运行

Laravel + Vue + Inertia 中 Inertia.get() 触发409错误(缺少x-inertia-version请求头)的解决方法

问题场景

调用Inertia.get()接口时,服务器先返回409 Conflict错误,之后才重定向到目标页面。抓包发现请求带了x-inertia:true头,但未携带x-inertia-version头;改用router.get()则完全正常,能自动带上版本头。

原因

Inertia内置版本校验机制,服务器会校验请求的x-inertia-version是否与当前应用版本一致,不一致则返回409触发客户端刷新。正常情况下Inertia.get()应该自动注入版本头,出现这个问题大概率是版本同步异常或调用配置缺失。

解决方法

1. 手动在请求中添加版本头

通过usePage()获取当前页面的版本,手动加到请求头里:

<script setup>
import { Inertia, usePage } from '@inertiajs/vue3';
// ...其他导入

const page = usePage();
const props = defineProps({
    title: String,
    data: Object,
})

const getData = (country)=> {
    Inertia.get(`/country/${country.name}/${country.code}`, {}, {
        preserveState: true,
        headers: {
            'X-Inertia-Version': page.version,
        },
    });
}
</script>

2. 改用Inertia Router的router.get()

既然router.get()能自动处理版本头,直接替换调用方式即可:

<script setup>
import { router } from '@inertiajs/vue3';
// ...其他导入

const getData = (country)=> {
    router.get(`/country/${country.name}/${country.code}`, {}, {
        preserveState: true,
    });
}
</script>

3. 校验前后端Inertia版本兼容性

检查前端@inertiajs/inertia、@inertiajs/vue3和后端laravel/inertia的版本是否匹配,版本差异可能导致自动注入头的逻辑失效。可以执行以下命令更新到兼容版本:

# 前端更新
npm update @inertiajs/inertia @inertiajs/vue3

# 后端更新
composer update laravel/inertia

4. 检查Inertia初始化配置

确保前端初始化时正确设置版本逻辑,比如在main.js中:

import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/vue3'

createInertiaApp({
  resolve: name => import(`./Pages/${name}.vue`),
  setup({ el, App, props, plugin }) {
    return createApp({ render: () => h(App, props) })
      .use(plugin)
      .mount(el)
  },
  // 确保版本自动生成(默认用Vite/mix的构建哈希)
  version: () => import.meta.env.VITE_APP_VERSION || window.inertiaVersion,
})

后端HandleInertiaRequests中间件保持默认版本逻辑即可:

// app/Http/Middleware/HandleInertiaRequests.php
public function version(Request $request)
{
    return parent::version($request);
}

验证

修改后重新编译前端,发起请求时查看请求头是否包含x-inertia-version,确认409错误是否消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:43:19