如何在AngularJS中使用HTTPS

我使用的是Angularjs $ resource&$ http和apis,但是由于安全原因我需要调用HTTPS请求(在HTTPS协议下工作)。

什么是在angularjs中使用https的方式。 感谢你的答案。

像通常一样使用$http api:

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

如果您的应用程序通过HTTPS提供服务,那么您所做的任何调用都是通过HTTPS连接到相同的主机/端口等。

如果您使用完整的URI进行请求,例如$http.get('http://foobar.com/somePath')那么您将不得不更改您的URI以使用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看从服务器的实际标题。 如果你有一个不正确的HTTP数据通过HTTPS的内部传递仍然会有HTTP头,Angular会使用它们,如果你不加/在最后。 即如果你有一个NGINX通过https提供内容,但通过http传递请求到后端的Gunicorn,你可能会遇到这个问题。 解决这个问题的方法是将正确的头文件传递给Gunicorn,这样你的框架就可以通过https服务了。 在NGINX中,您可以使用以下行来完成此操作:

proxy_set_header X-Forwarded-Proto $ scheme;

我最近遇到类似的问题,使用Angular 1.2.26,但只有当通过负载平衡器进行交互 – 这可能是剥离https相关的头…不知道原因呢。 我已经诉诸于此:

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

如果使用非标准端口,也可能需要添加$ location.port()。