如果有人从some client.com向some rest.com发送XHR请求,我想用PHP获取请求的来源(域名,而不是客户端ip)
可能的解决办法:
- 也许我可以使用
$\u服务器['HTTP\u ORIGIN'],但我不知道它是否是一个标准 - 我看到另一个标题,如
$\u SERVER['HTTP\u HOST']或$\u SERVER['SERVER\u NAME'],但在某些情况下,它返回的是真实的主机名,而不是真实的域 - 而
$\u服务器['REMOTE\u ADDR']提供客户端IP
使用PHP获取请求来源(如域名)的正确方法是什么
谢谢
根据MDN的文章HTTP访问控制(CORS):
必须将所有请求设置为源站标头,才能在CORS(跨源站资源共享)机制下正常工作
“原产地;请求头是RFC 6454的一部分,将其描述为CORS机制的一部分,并根据MDN与所有浏览器兼容
MDN的说明:
Origin请求头指示提取从何处开始。信息技术
不包含任何路径信息,仅包含服务器名称。它是
与CORS请求以及POST请求一起发送。这是相似的
指向Referer头,但是,与此头不同,它不公开
整条路资料来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin
MDN示例:
因此,要使用PHP获取XHR请求的来源,可以使用:
$\u服务器['HTTP\u来源']
并且,在直接请求的情况下,您可以将HTTP\u REFERER和远程地址组合起来,例如:
if(数组\u键\u存在('HTTP\u REFERER',$\u服务器)){
$origin=$\u服务器['HTTP\u REFERER'];
}否则{
$origin=$\u服务器['REMOTE\u ADDR'];
}
因此,可能的最终解决方案是:
if(数组\u键\u存在('HTTP\u原点',$\u服务器)){
$origin=$\u服务器['HTTP\U origin'];
}
else if(数组\键\存在('HTTP \ u REFERER',$\服务器)){
$origin=$\u服务器['HTTP\u REFERER'];
}否则{
$origin=$\u服务器['REMOTE\u ADDR'];
}
MDN是Mozilla开发者网络
非常感谢@trine、@waseem bashir、@p0lt10n和其他人的帮助