Php Laravel-CORS变量
我想建立一个动态CORS中间件,它可以动态检查我使用的子域是否是服务器的有效子域。我已经测试了它背后的逻辑,它是有效的,但是当为标题提供一个变量时,似乎有什么不对劲 代码如下:Php Laravel-CORS变量,php,laravel,cors,Php,Laravel,Cors,我想建立一个动态CORS中间件,它可以动态检查我使用的子域是否是服务器的有效子域。我已经测试了它背后的逻辑,它是有效的,但是当为标题提供一个变量时,似乎有什么不对劲 代码如下: public function handle($request, Closure $next) { $originalDomain = config('session.domain'); $parsedUrl = parse_url(request()->url()); $splitDom
public function handle($request, Closure $next)
{
$originalDomain = config('session.domain');
$parsedUrl = parse_url(request()->url());
$splitDomain = explode('.', $parsedUrl['host'], 2);
$subdomain = $splitDomain[0];
$domain = $splitDomain[1];
$subdomainValid = $parsedUrl['host'] != $originalDomain && $originalDomain == $domain;
if(!$subdomainValid)
return $next($request);
$allowedUrl = $parsedUrl['scheme'] . '://' . $subdomain . '.' . config('session.domain_without_dot');
return $next($request)
->header('Access-Control-Allow-Origin', $allowedUrl)
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
}
我得到一个错误,请求的资源上没有“Access Control Allow Origin”头,但是如果我转储得到的变量并粘贴进去,它就可以正常工作。我通过更改
$parsedUrl = parse_url(request()->url());
到
解释
由于此中间件放在服务器上,当请求通过中间件时,
request()->url()
实际上是服务器url的值,而不是请求它的子域的值。通过此更改,我将获取请求服务器资源的子域的URL。对不起,我以为已将其删除。我是这个网站的新手,没有正确的格式,而且我意识到我的解决方案并不能解决你的问题。PS这不是一个ajax请求,而是调用.ajaxSetup来发送头中的CSRF令牌。您考虑过吗?它允许通配符的起源。是的,不适合我的情况,因为我必须用DBYeah中的白名单交叉检查子域,但我正在解析它,并与配置文件中的原始值冲突。你认为它会被滥用吗?不,没关系。我没想清楚。CORS是为了保护用户而不是您的服务器,所以这很好
$parsedUrl = parse_url($_SERVER['HTTP_ORIGIN']);