我正在使用 AngularJS,$resource
并$http
使用apis
,但是由于安全原因,我需要发出 HTTPS 请求(在 HTTPS 协议下工作)。
https
在 AngularJS中使用的方法是什么。
谢谢你的帮助。
我正在使用 AngularJS,$resource
并$http
使用apis
,但是由于安全原因,我需要发出 HTTPS 请求(在 HTTPS 协议下工作)。
https
在 AngularJS中使用的方法是什么。
谢谢你的帮助。
出于某种原因,如果您的请求末尾没有尾部 / ,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()。