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

Node.js中转API:首次调用成功,二次调用遇证书域名不匹配问题

问题分析与解决方案

核心原因

你的Node.js服务器在第二个接口/scheduleJobs中,直接将前端请求的req.headers原封不动转发给了Filemaker的HTTPS接口,其中包含了**Host: localhost**这个请求头。而Filemaker服务器的SSL证书绑定的域名是xxx,当它收到Host: localhost的请求时,会触发证书域名不匹配的校验错误,这就是你看到Hostname/IP does not match certificate's altnames报错的原因。

第一个接口/login能成功,是因为你转发的是前端传来的req.body(仅包含自定义的几个请求头),没有携带Host: localhost这类本地请求头,所以证书校验能正常通过。

Python脚本无问题,是因为Python请求库默认不会将本地请求的Host头直接转发到目标HTTPS服务器,自然不会触发证书域名冲突。

修复步骤

修改Node.js服务器中/scheduleJobs的代码,不要直接传递完整的req.headers,只提取业务所需的请求头(比如认证头、内容类型头):

app.post("/scheduleJobs", async (req, res) => {
    const body = req.body;
    // 仅提取需要转发的请求头,排除Host、Origin等本地相关头
    const forwardHeaders = {
        'Content-Type': req.headers['content-type'],
        'Authorization': req.headers['authorization']
    };
    await axios.post("https://xxx/fmi/data/vLatest/databases/xxxx/layouts/xxx/_find", 
        body,
        { headers: forwardHeaders }
    )
    .then(function(response) {
        res.send(response.data);
    })
    .catch(e => {
        console.log(e);
        res.status(500).send(e.message); // 新增错误处理,避免请求挂起
    });
});

补充说明

  • 你之前设置rejectUnauthorized = false没生效,是因为该配置需要加在Node.js向Filemaker发起的HTTPS请求中,而非前端axios请求(前端请求的是本地HTTP服务器,不存在证书校验)。如果需临时跳过校验(不推荐生产环境使用),可修改Node端axios配置:
    const https = require('https');
    // ...
    await axios.post(url, body, {
        headers: forwardHeaders,
        httpsAgent: new https.Agent({ rejectUnauthorized: false })
    })
    
  • 生产环境建议确保Filemaker服务器的SSL证书包含正确的访问域名,或通过证书绑定的域名访问服务,从根源避免证书校验问题。

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

相关产品推荐
方舟 Agent Plan

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

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