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

Curl HEAD请求返回last-modified头,Node.js https.request无此返回

为什么curl和Node.js的HEAD请求返回的响应头差异这么大?

这个问题的核心在于curl和Node.js的https模块发送的HEAD请求携带的默认请求头不一样,导致服务器对这两个请求做出了完全不同的处理:

1. 请求头差异触发了服务器的不同响应逻辑

curl发送HEAD请求时,会默认带上一些符合常规标准的请求头(比如User-Agent: curl/[对应版本号]),服务器识别到这是常见的命令行工具请求,直接返回了目标PGN文件的元数据响应头,自然包含last-modified这类文件相关字段。

而Node.js的https.request默认的请求头非常精简,尤其是User-Agent字段默认是Node.js/[你的Node版本号],服务器可能将其识别为非浏览器/非标准工具的请求,触发了特殊处理逻辑:

  • 返回了text/html类型的内容(大概率是验证页面或跳转页面)
  • 附带set-cookie字段要求设置Cookie
  • 目标PGN文件的last-modified字段自然不会出现在这类响应里

2. 验证猜测的解决方法

你可以在Node.js的请求里手动添加curl风格的请求头,模拟标准请求:

const https = require('https');

const options = {
  method: 'HEAD',
  headers: {
    'User-Agent': 'curl/7.81.0', // 替换成你本地curl的版本号,或者任意常见浏览器UA也可以
    'Accept': '*/*'
  }
};

https.request('https://theweekinchess.com/assets/files/pgn/eurbli22.pgn', options, res => {
  console.log([res.url, res.headers]);
}).end();

运行这段代码后,你应该就能拿到和curl一致的响应头,包括last-modified字段。

3. 本质原因

不少网站会通过User-Agent、Accept等请求头字段区分请求来源,对于识别为爬虫或非标准工具的请求,会返回验证页面、重定向结果而非目标资源;curl作为广泛使用的命令行工具,被服务器判定为“友好请求”,直接返回了文件的元数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:10:31