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

如何让Heroku上的Express网站外部请求由用户IP发起而非服务器IP?

让外部请求以用户IP发起的解决方案

服务器端(你的Heroku节点)发起的HTTP请求,源IP必然是服务器本身的。要实现请求来自用户的真实IP,核心是把请求逻辑从后端Express转移到前端浏览器执行,具体操作如下:

具体步骤

  • 前端直接调用外部API:把原本写在Express里的请求代码,搬到前端JS(原生JS、React、Vue等框架代码都可以)中。这样请求会从用户的浏览器直接发送到目标API,源IP就是用户的真实IP。
  • 解决跨域问题:如果外部API没配置CORS允许你的Heroku域名访问,会触发跨域错误。两种处理方式:
    • 联系外部API的维护者,把你的Heroku域名加入CORS白名单。
    • 要是没法修改外部API配置,只能在Express后端做代理转发,但这种方式请求还是从Heroku节点发出,只是前端先把请求打给你的后端,再由后端转发——这种方式不能实现用户IP发起请求,仅解决跨域问题。所以必须用用户IP的话,只能选前端直接请求的方案。
  • 前端请求示例(原生JS):
// 前端代码示例
fetch('https://目标外部API地址', {
  method: 'GET', // 换成API要求的请求方法,比如POST
  headers: {
    // 根据API要求设置请求头,比如Authorization、Content-Type等
  }
})
.then(response => response.json())
.then(data => {
  // 处理API返回的数据
})
.catch(error => {
  // 处理请求错误
});

关键注意点

  • 如果外部API需要敏感凭证(比如API密钥),绝对不能直接在前端请求——密钥会被用户轻易获取。这种情况下你只能继续用后端发起请求,没办法让用户IP作为请求源IP,除非该API支持通过请求头(比如X-Forwarded-For)传递用户IP,但这只是告知API用户的IP,请求的源IP还是服务器的,API是否认可这个头部要看它的逻辑设计。
  • Heroku的节点IP是动态变化的,如果你之前有依赖服务器IP的逻辑,迁移到前端后要相应调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:53:18