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

NodeJS Express获取PHP请求源域名时origin为undefined如何解决

问题根因

Origin 是浏览器在跨域场景下自动注入的请求头,服务端通过cURL发起的请求默认不会自动携带该头,因此Express中读取origin返回undefined属于正常表现,并非Node服务配置错误。
另外你当前代码中打印的req.get('host')返回值是当前Node服务自身的域名,和请求发起方无关,无法用来获取来源地址。

可行解决方法

方案1:PHP端主动添加Origin请求头

在cURL配置中新增请求头配置,手动注入目标Origin值即可,修改后的PHP代码如下:

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://myNodedomain.com/sendAlert',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HEADER => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('token' => '3242342332'),
  // 手动添加Origin头
  CURLOPT_HTTPHEADER => array(
    'Origin: https://domain1.com'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

配置完成后Node端即可通过req.get('origin')正常读取到https://domain1.com。

方案2:自定义请求头传递来源标识

如果不想使用标准Origin头,也可以双方约定自定义请求头传递来源,比如PHP端添加X-Request-Source: domain1头,Node端直接通过req.get('X-Request-Source')读取即可,这种方式不会和浏览器CORS规则产生冲突,灵活性更高。

注意事项

服务端之间的请求头可任意伪造,若你需要做来源合法性校验,不能仅靠请求头判断,建议搭配签名校验机制:双方约定专属密钥,PHP端发起请求时对参数加签,Node端接收请求后验签,通过后才认定来源合法,避免恶意伪造请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:12:34