Как я могу использовать HTTPS в AngularJS?
Я использую AngularJS, $resource
& $http
и работать с apis
, однако по соображениям безопасности мне нужно сделать HTTPS-запрос (работа по протоколу HTTPS).
Как использовать https
в AngularJS. Спасибо за вашу помощь.
3 ответа
По какой-то причине 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, но при передаче запросов в Gunicorn на сервер через http, у вас может возникнуть эта проблема. Способ исправить это - передать правильные заголовки в Gunicorn, чтобы ваша инфраструктура находилась под впечатлением обслуживания через https. В NGINX вы можете сделать это с помощью следующей строки:
proxy_set_header X-Forwarded-Proto $ схема;
Использовать $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() также, если используете нестандартный порт.