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

React中Axios发送POST请求遇419 Unknown Status错误求助

解决React中Axios POST请求419未知状态错误

错误核心原因

419状态码大多出现在Laravel这类后端框架的场景中,本质是CSRF令牌验证失败——这类框架默认会对POST请求做CSRF校验,缺少有效令牌就会返回该错误。

可行解决方案

1. 在请求中携带CSRF令牌

如果后端是Laravel,可按以下步骤修改代码:

  • 从页面meta标签获取后端输出的CSRF令牌(Laravel默认会生成<meta name="csrf-token" content="令牌内容">)
  • 在Axios请求的headers中添加X-CSRF-TOKEN字段

修改后的完整代码:

import React, { useState, useEffect } from 'react';
import Chart from 'react-apexcharts';
import axios from 'axios';

const CalculateChart = ({ selectedYear, selectedDistrict }) => {
    const [chartData, setChartData] = useState(null);

    useEffect(() => {
        const fetchData = async () => {
            try {
                // 获取CSRF令牌
                const csrfToken = document.querySelector('meta[name="csrf-token"]')?.content;
                if (!csrfToken) {
                    throw new Error('CSRF令牌未找到');
                }
                const response = await axios.post(
                    'http://80.72.180.130:8581/api/calculate/horizontal/buffer/zone',
                    {
                        "cost": 18448000,
                        "district": selectedDistrict,
                        "year": selectedYear.toString()
                    },
                    {
                        headers: {
                            'X-CSRF-TOKEN': csrfToken,
                            'Accept': 'application/json'
                        }
                    }
                );
                setChartData(response.data.data);
            } catch (error) {
                console.error('Error fetching data:', error);
            }
        };

        fetchData();
    }, [selectedYear, selectedDistrict]);

    if (!chartData) {
        return <p>Loading...</p>;
    }

    const { distances, items } = chartData;
    const formattedItems = items.map(item => parseFloat(item));
    const chartSeries = [{ name: 'Items', data: formattedItems }];
    const chartOptions = {
        chart: { id: 'line-chart', toolbar: { show: false } },
        xaxis: {
            categories: distances,
            title: {
                text: 'Distance (m)',
                style: { fontSize: '14px', fontWeight: 'bold', fontFamily: 'Arial, sans-serif' }
            }
        },
        yaxis: {
            title: {
                text: 'Item',
                style: { fontSize: '14px', fontWeight: 'bold', fontFamily: 'Arial, sans-serif' }
            }
        }
    };

    return (
        <Chart type='line' width={1200} height={550} series={chartSeries} options={chartOptions} />
    );
};

export default CalculateChart;

2. 后端临时豁免CSRF校验(仅测试环境)

开发测试阶段,可让后端在对应接口关闭CSRF验证,比如Laravel中修改app/Http/Middleware/VerifyCsrfToken.php:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    protected $except = [
        '/api/calculate/horizontal/buffer/zone', // 添加该接口路径
    ];
}

⚠️ 注意:生产环境绝对不能使用此方式,会引发安全风险。

3. 全局配置Axios令牌

在项目入口文件(如index.js)中全局设置Axios的请求头,避免每个请求重复编写:

import axios from 'axios';

// 全局配置CSRF令牌和接受类型
axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]')?.content;
axios.defaults.headers.common['Accept'] = 'application/json';

额外排查项

  • 确认后端跨域配置允许当前前端域名/端口访问
  • 检查CSRF令牌是否过期,部分框架会定期刷新令牌
  • 确认请求体格式符合后端要求,Axios默认会以JSON格式发送,若后端要求表单格式需修改Content-Type为application/x-www-form-urlencoded

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:59:53