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

Axios调用Epic Games API返回403错误,okhttp3调用正常

解决Node.js Axios调用Epic API返回403的问题

问题分析

你遇到的403错误并非CORS问题(CORS是浏览器端的跨域限制,Node服务端发起请求不受此约束),核心原因是Axios请求中添加了浏览器专属的请求头,被Epic的请求验证机制拦截。

对比可成功的请求(Postman、Java OkHttp):

  • Java OkHttp使用默认请求头即可成功,未额外添加浏览器特有的头字段
  • 你在Axios中额外添加了sec-fetch-site,这个字段是浏览器发起跨域请求时自动生成的标识,服务端发起请求时不需要携带,会被识别为异常请求

解决方案

去掉不必要的请求头,仅保留必要的User-Agent即可(模拟浏览器请求),甚至可以直接使用Axios默认请求头。

修改后的Axios代码

const express = require('express');
const axios = require('axios');
const cors = require('cors');
const app = express();

app.use(cors());

app.get('/fetch-epic-api', async (req, res) => {
    try {
        const response = await axios.get('https://dev.epicgames.com/community/api/documentation/table_of_content.json?path=en-us/unreal-engine', {
            headers: {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'
            },
        });

        res.json(response.data);
    } catch (error) {
        console.error('API请求错误:', error);
        res.status(500).json({ error: '请求过程中发生错误。' });
    }
});

const PORT = 3000;
app.listen(PORT, () => {
    console.log(`服务器运行在 http://localhost:${PORT}`);
});

额外排查方向

如果上述修改后仍有问题,可以尝试:

  • 完全移除自定义请求头,使用Axios默认请求发起请求
  • 检查Axios在Node环境下默认携带的Accept-Encoding,若包含br(Brotli压缩),可尝试指定为gzip, deflate,部分服务端对Brotli的支持可能存在验证逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:01:12