如何在 AngularJS 中使用 HTTPS

How can I use HTTPS in AngularJS?

本文关键字:HTTPS AngularJS      更新时间:2023-09-26

我正在使用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会使用它们。 即,如果你有一个 NGINX 通过 https 提供内容,但通过 http 将请求传递给后端的 Gunicorn,你可能会遇到这个问题。解决这个问题的方法是将正确的标头传递给 Gunicorn,这样您的框架就会给人以通过 https 提供的印象。在NGINX中,您可以使用以下行执行此操作:

proxy_set_header X 转发原型$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()。