如何在PHP中获取http请求源

我想创build一个API,并且要validationAPI消费者,我将提供一个API KEY,App-id和App-Secret。 问题是我想知道http请求来自哪里,这样我就可以知道正在发出请求的主机是否是已注册的主机。 例如:www.someone.com有一个应用程序ID:0001,应用程序秘密:1200和API键:458。 如果这个证书是用来做A请求的,我想知道请求者是否真的是www.someone.com

使用$_SERVER['HTTP_REFERER'] 。 这是将用户代理引用到当前页面的页面地址(如果有的话)。 这由用户代理设置。 并不是所有的用户代理都会设置这个功能,有些提供了修改HTTP_REFERER功能的功能。

有关进一步限制,您可以执行以下操作。 example.com应该更改为您的域名。

IIS配置下面的web设置

 add name="Access-Control-Allow-Origin" value="http://www.example.com" 

Apache在httpd.conf / apache.conf中设置如下

 Header add Access-Control-Allow-Origin "http://www.example.com" 

一般来说,这个头文件应该可以胜任。 在这个头里有域名

 header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN'] . ""); // use domain name instead of $_SERVER['HTTP_ORIGIN'] above 

但如果你想检查更多的信息,请使用类似下面的代码片段

 $allowed = array('domain1', 'domain2', 'domain3'); if(isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $allowed)){ // SELECT credentials for this user account from database if(isset($_GET['api_key'], $_GET['app_secret']) && $_GET['api_key'] == 'api_key_from_db' && $_GET['app_secret'] == 'app_secret_from_db' ){ // all fine }else{ // not allowed } }else{ // not allowed } 

如果用户必须将更多数据传递给您的服务,请使用POST而不是GET

我想你的意思是你想访问请求头中的“Origin”头(而不是在响应头中设置它)。

为此,最简单的方法是访问内置的getallheaders()函数 – 这是apache_request_headers ()的别名 – NB假设您使用php作为模块。

这会返回一个数组,所以Origin头文件应该可以像这样使用:

 $request_headers = getallheaders(); $origin = $request_headers['Origin']; 

如果你通过类似fastcgi的方式使用php,那么我相信它会在环境中使用 – 通常是大写,前缀为“HTTP_”,所以它应该是$_SERVER['HTTP_ORIGIN']

希望能帮助其他人寻找这个:)

使用var_dump可以看到request所提供的全部内容。

 var_dump($_REQUEST); 

在全局server上也做一个var_dump 。 它包含了很多有用的信息。

 var_dump($_SERVER);