Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-CORS变量_Php_Laravel_Cors - Fatal编程技术网

Php Laravel-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

我想建立一个动态CORS中间件,它可以动态检查我使用的子域是否是服务器的有效子域。我已经测试了它背后的逻辑,它是有效的,但是当为标题提供一个变量时,似乎有什么不对劲

代码如下:

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']);