如何在AngularJS中使用HTTPS?

时间:2013-09-17 00:37:22

标签: javascript node.js angularjs angular-ui

我正在使用AngularJS,$resource& $http并与apis合作,但由于安全原因,我需要发出HTTPS请求(在HTTPS协议下工作)。

在AngularJS中使用https的方法是什么?谢谢你的帮助。

3 个答案:

答案 0 :(得分:27)

像往常一样使用$http api:

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

如果您的应用程序是通过HTTPS提供的,那么您正在进行的任何调用都是通过HTTPS进行相同的主机/端口等。

如果您为请求使用完整的URI,例如$http.get('http://foobar.com/somePath')然后您必须更改您的URI才能使用https

答案 1 :(得分:26)

出于某种原因,如果您没有拖尾/请求结束,Angular将通过HTTP发送所有请求。即使页面本身是通过HTTPS提供的。

例如:

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

但是如果你添加一个领先/一切都会按预期工作:

Aeq = ones(1,stocks);
beq = 1;
lb = zeros(1,stocks);
up = ones(1,stocks);

options = gaoptimset;
options = gaoptimset(options,'PopulationSize' ,10);
fitnessFunction = @(x) (x * covariance * x') - (x * returns);

W = ga(fitnessFunction,stocks,[],[],Aeq,beq,lb,up,[],options);

编辑:此问题的根本原因是Angular查看服务器的实际标头。如果http数据通过https的内部传递不正确,仍会有http标头,如果最后没有添加/,Angular会使用它们。  即如果您通过https提供NGINX服务内容,但通过http将请求传递给后端的Gunicorn,则可能存在此问题。解决这个问题的方法是将正确的标题传递给Gunicorn,这样你的框架就会受到通过https服务的印象。在NGINX中,您可以使用以下行执行此操作:

proxy_set_header X-Forwarded-Proto $ scheme;

答案 2 :(得分:9)

我最近使用Angular 1.2.26遇到了类似的问题,但只有在通过负载均衡器进行交互时 - 这可能会剥离与https相关的标头...还不确定原因。我已经采取了这个:

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

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