簡體   English   中英

如何在 AngularJS 中使用 HTTPS?

[英]How can I use HTTPS in AngularJS?

我正在使用 AngularJS, $resource & $http並使用apis ,但是由於安全原因,我需要發出 HTTPS 請求(在 HTTPS 協議下工作)。

在 AngularJS 中使用https的方法是什么。

謝謝你的幫助。

出於某種原因,如果您的請求末尾沒有尾隨 /,Angular 會通過 HTTP 發送所有請求。 即使頁面本身是通過 HTTPS 提供的。

例如:

$http.get('/someUrl').success(successCallback);  // Request would go over HTTP even if the page is served via HTTPS

但是,如果您添加前導 / 一切都會按預期工作:

$http.get('/someUrl/').success(successCallback);  // This would be sent over HTTPS if the page is served via HTTPS

編輯:此問題的根本原因是 Angular 查看來自服務器的實際標頭。 如果您通過 https 內部傳遞的 http 數據不正確,那么仍然會有 http 標頭,如果您沒有在末尾添加 /,Angular 會使用它們。 即如果你有一個通過 https 提供內容的 NGINX,但通過 http 將請求傳遞給后端的 Gunicorn,你可能會遇到這個問題。 解決這個問題的方法是將正確的標頭傳遞給 Gunicorn,這樣您的框架就會給人一種通過 https 提供服務的印象。 在 NGINX 中,您可以使用以下行執行此操作:

proxy_set_header X-Forwarded-Proto $scheme;

像往常一樣使用$http api:

$http.get('/someUrl').success(successCallback);

如果您的應用程序通過 HTTPS 提供服務,那么您所做的任何調用都將通過 HTTPS 發送到相同的主機/端口等。

如果您對請求使用完整的 URI,例如$http.get('http://foobar.com/somePath')那么您將不得不更改您的 URI 以使用https

我最近在使用 Angular 1.2.26 時遇到了類似的問題,但只有在通過負載平衡器進行交互時才會出現 - 這可能會剝離與 https 相關的標頭......還不確定原因。 我求助於這個:

uri = $location.protocol() + "://" + $location.host() + "/someUrl"

如果使用非標准端口,您可能還想添加 $location.port() 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM