如何在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
相关产品推荐
相关产品推荐

