[英]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.