Как я могу использовать 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() также, если используете нестандартный порт.

Другие вопросы по тегам