[英]How to get http request origin in php
我想創建一個 API,為了驗證 API 消費者,我將提供一個 API KEY、App-id 和 App-Secret。 問題是我想知道http請求是從哪里來的,這樣我就可以知道發出que請求的主機是否是注冊的主機。 例如:www.someone.com 有一個 app-id:0001、app-secret:1200 和 api-key:458。 如果這個憑證是用來做A請求的,我想知道這個請求者是不是真的www.someone.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
Laravel 5 :在請求方法控制器中:
$origin = request()->headers->get('origin');
使用$_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"
從技術上講,無論是origin
還是referer
都不需要 HTTP 標頭,所有這些答案都基於發送的特定瀏覽器標頭,並且根據客戶端的不同行為建立系統是一個壞主意。
正確答案是您無法可靠地獲取每個請求的客戶端來源,因為它不是 HTTP 規范的一部分。
使用var_dump
您可以看到request
必須提供的所有內容。
var_dump($_REQUEST);
也在server
全局上做一個var_dump
。 它包含很多有用的信息。
var_dump($_SERVER);
我認為您的意思是您想訪問請求標頭中的“Origin”標頭(而不是在響應標頭中設置它)。
為此,最簡單的方法是訪問內置的getallheaders()函數 - 它是apache_request_headers () 的別名 - 注意,這是假設您使用 php 作為模塊。
這將返回一個數組,因此 Origin 標頭應該像這樣可用:
$request_headers = getallheaders();
$origin = $request_headers['Origin'];
如果您通過諸如 fastcgi 之類的東西使用 php,那么我相信它會在環境中可用 - 通常大寫並以“HTTP_”為前綴,所以它應該是$_SERVER['HTTP_ORIGIN']
。
希望能幫助其他人尋找這個:)
在 laravel 7 這對我有用
request()->headers->get('referer');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.