如何从laravel HTTP请求类中获取传入请求的协议(http/https)?

3b6akqbq  于 2023-02-05  发布在  其他
关注(0)|答案(3)|浏览(182)

在我的新应用程序API中,我必须检查来自第三方URL的请求是否应该使用https。如果不是https,我必须返回消息“连接不安全”。有人能帮助我吗?

w8f9ii69

w8f9ii691#

给你:

Determining If The Request Is Over HTTPS
Using Request::secure()

if (request()->secure())
{
  //
}

如果您的主机位于负载平衡器之后,请改用RequestgetScheme

xienkqul

xienkqul2#

丹尼尔Tran的答案是正确的,仅供参考HTTPS类型的请求在请求上有一个额外的字段HTTPS。有时这个字段也可以等于 off,但没有别的。
所以你可以写一段代码

if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') { 
  doSomething();
}

Laravel请求类也从symphony继承了一些完全类似的东西。
vendor/symfony/http-foundatiton/Request.php

public function isSecure()
    {
        if ($this->isFromTrustedProxy() && self::$trustedHeaders[self::HEADER_CLIENT_PROTO] && $proto = $this->headers->get(self::$trustedHeaders[self::HEADER_CLIENT_PROTO])) {
            return in_array(strtolower(current(explode(',', $proto))), array('https', 'on', 'ssl', '1'));
        }

        $https = $this->server->get('HTTPS');

        return !empty($https) && 'off' !== strtolower($https);
    }
piok6c0g

piok6c0g3#

从Laravel请求类使用getSchemeAndHttpHost()方法

{{ Request::getSchemeAndHttpHost() }}

返回例如:

  • http://example.com
  • http://192.0.0.1
  • https://example.com

返回protocol/domain名称

相关问题