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

Node.js发起HTTP请求报错:Parse Error: Invalid header token 求助

解决Node.js请求JSONP接口时的"Parse Error: Invalid header token"问题

你用Node.js的https.request请求目标接口时触发了头部解析错误,但浏览器能正常访问。核心原因是Node.js默认请求头与浏览器差异大,要么被服务器返回异常响应头,要么服务器返回的响应头不符合Node.js的解析规范。

修正后的代码示例

const https = require('https');

const options = {
  hostname: 'arfrontend.livemeans.com',
  path: '/contents.jsonp?op=604',
  headers: {
    // 模拟浏览器User-Agent,避免服务器拦截或返回异常内容
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
  }
};

const req = https.request(options, (res) => {
  let rawData = '';

  // 分段接收响应数据
  res.on('data', (chunk) => {
    rawData += chunk;
  });

  // 数据接收完成后处理JSONP格式
  res.on('end', () => {
    // 剥离JSONP外层的回调函数包裹(假设回调是类似`callback(...)`的格式)
    const jsonContent = rawData.replace(/^[a-zA-Z0-9_]+\((.*)\)$/, '$1');
    try {
      const result = JSON.parse(jsonContent);
      console.log('解析后的JSON数据:', result);
    } catch (err) {
      console.error('JSON解析失败:', err);
    }
  });
});

// 捕获请求过程中的错误,方便排查问题
req.on('error', (err) => {
  console.error('请求出错:', err);
});

req.end();

关键修复点

  • 模拟浏览器请求头:服务器常通过User-Agent识别请求来源,Node.js默认的标识会被判定为非浏览器请求,返回异常内容或响应头。添加标准浏览器的User-Agent即可解决大部分这类问题。
  • 处理JSONP格式:接口返回的是JSONP而非纯JSON,必须去掉外层的回调函数包裹,才能用JSON.parse解析成JSON对象。
  • 错误监听:显式监听error事件,能更直观地看到请求过程中出现的问题,避免未捕获错误导致程序崩溃。

极端情况处理(不推荐)

如果添加请求头后仍出现头部解析错误,大概率是服务器返回的响应头存在不符合HTTP规范的字符。可以临时开启insecureHTTPParser选项允许解析不规范的头,但这会带来安全风险,仅作为临时方案:

const options = {
  hostname: 'arfrontend.livemeans.com',
  path: '/contents.jsonp?op=604',
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
  },
  insecureHTTPParser: true // 允许解析非标准HTTP头
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:52:53