2017-03-23 67 views
1

在我的新應用程序API中,我必須檢查來自第三方URL的請求應該在https中。如果沒有使用https,我不得不返回消息爲「沒有加密」誰能幫我如何獲取來自laravel HTTP請求類的傳入請求的協議(http/https)?

+1

一個簡單的谷歌搜索可以幫助你 – JRR

+0

@SathishkumarR我thint倒不如重定向到automaticaly安全網址,沒有顯示消息,你不覺得? –

+1

@Autista_z它只是一個API。它將驗證請求並在我的應用程序中註冊用戶。然後它將返回帶有訪問令牌的URL訪問,訪問令牌將在5分鐘後過期。 –

回答

3

給你:?

Determining If The Request Is Over HTTPS 

if (Request::secure()) 
{ 
    // 
} 
+0

感謝您的回答。 –

+1

getScheme()方法返回請求的協議。 –

+0

這使用端口檢測方法。在一些負載平衡器(heroku,aws)上,即使https,因爲負載平衡器後面的一些請求位於端口80而不是443,這也會失敗。我最終不得不使用https字符串檢查。 – dster77

1

丹尼爾Tran的答案是正確的只是信息的HTTPS類型要求有一個額外的領域HTTPS上的請求。有時,本場可等於關閉太多,但僅此而已。

,所以你可以只寫一個類似的代碼

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

Laravel請求類還繼承了一些與交響樂完全相似的東西。你可以在下面找到;

供應商/ 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); 
    }