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

node-fetch发送POST请求结果与Firefox请求不一致问题排查

问题修复方案

1. 补全缺失的Content-Type请求头

你参考的是multipart/form-data类型的提交方案,和当前场景不匹配:Firefox正常请求的提交格式是application/x-www-form-urlencoded,必须在请求头中明确添加该字段,否则服务端无法正确解析表单内容。

2. 移除手动设置的Content-Length

你固定写死了Content-Length为46,如果你的邮箱、密码实际拼接后的urlencoded字符串长度和46不一致,会导致服务端接收的请求体不完整,直接判定参数错误。node-fetch会自动根据传入的body计算正确的Content-Length,无需手动指定。

3. 关闭自动重定向配置

node-fetch默认会自动跟随302重定向响应,直接返回重定向后的目标页面的200响应,你看到的200状态码大概率是这个原因导致的。只需要在请求配置中添加redirect: 'manual',即可拿到原始的302响应头,同时获取到auth_token和更新后的sessionToken。

4. 校验sessionToken的正确性

检查第一步获取到的sessionToken是否完整、大小写是否和服务端要求一致,注意cookie字段名_sessiontoken是全小写,避免拼写错误导致服务端无法识别会话。

额外说明

  • X-Firefox-Spdy是Firefox浏览器自带的响应头标记,和服务端逻辑无关,缺失不影响请求结果
  • HTTP/2协议不是问题原因,node环境下的HTTP/1.1请求服务端会正常兼容

修正后的请求配置参考:

const params = new URLSearchParams();
params.append('email', '你的邮箱');
params.append('password', '你的密码');

const response = await fetch('https://www.website.com/login/action', {
  method: 'POST',
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Origin': 'https://www.website.com',
    'Referer': 'https://www.website.com/login',
    'Cookie': '_sessiontoken=你第一步获取的sessionToken',
    'Upgrade-Insecure-Requests': '1',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-User': '?1'
  },
  body: params,
  redirect: 'manual'
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:01