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

如何在PHP中获取发起跨域请求的来源域名?

跨域请求中获取来源域名的可行性及实现方法

当然可行!这是CORS(跨源资源共享)机制下完全支持的需求——当example.com向test.com发起跨域请求,且test.com已经允许该跨域请求时,test.com的服务端代码可以轻松获取到发起请求的来源域名example.com。

核心原理:Origin请求头

浏览器在发起跨域请求时,会自动在请求头中添加Origin字段,这个字段的值就是发起请求的页面所在的完整域名(比如https://example.com)。而且这个字段是由浏览器管控的,前端代码无法手动篡改,安全性有保障。

代码示例(以Node.js Express为例)

下面是test.com服务端的代码示例,展示如何获取并使用请求来源:

const express = require('express');
const app = express();

// 全局处理CORS逻辑
app.use((req, res, next) => {
  // 先获取请求来源
  const requestOrigin = req.headers.origin;
  console.log('当前跨域请求的来源:', requestOrigin); // 输出:https://example.com

  // 验证来源是否在允许列表内(可选,用于更严格的权限控制)
  const allowedOrigins = ['https://example.com'];
  if (allowedOrigins.includes(requestOrigin)) {
    res.setHeader('Access-Control-Allow-Origin', requestOrigin);
  }

  next();
});

// 处理具体的跨域请求接口
app.get('/api/get-data', (req, res) => {
  // 再次获取来源并返回给客户端,或者在服务端直接使用
  const origin = req.headers.origin;
  res.json({
    status: 'success',
    message: '跨域请求已处理',
    request_from: origin
  });
});

app.listen(3000, () => {
  console.log('test.com服务运行在http://localhost:3000');
});

注意事项

  • 只有跨域请求会自动携带Origin头,同域请求时部分浏览器可能不会携带该字段,或者字段值为空。
  • 不要依赖前端传递的自定义字段来判断来源,因为自定义字段可以被篡改,Origin头是浏览器保证真实性的可靠来源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:11:38