我正在使用AngularJS,$resource
& $http
并与apis
合作,但由于安全原因,我需要发出HTTPS请求(在HTTPS协议下工作)。
在AngularJS中使用https
的方法是什么?谢谢你的帮助。
答案 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()。