У меня есть приложение angular 5, которое размещено на heroku. В настоящее время пользователи могут получить доступ к HTTP-версии приложения.
Как я могу заставить пользователей перенаправляться на версию HTTPS, даже если они обращаются к HTTP?
Что я пробовал:
app.use(function (req, res, next) {
let sslUrl;
if (process.env.NODE_ENV === 'production' &&
req.headers['x-forwarded-proto'] !== 'https') {
sslUrl = ['https://myapp.herokuapp.com', req.url].join('');
return res.redirect(sslUrl);
}
return next();
});
Я поместил приведенный выше код на свой сервер node.js, но он не сработал.
Пользователи не могут использовать приложение через HTTP, поскольку получают ОШИБКУ 403
@trichetriche Я пробовал то, что они предложили в этом ответе, и это не сработало.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я использовал пакет "force-ssl-heroku" в https://github.com/rangle/force-ssl-heroku, работает как по волшебству и очень легко интегрируется.
Просто потребуйте внутри вашего сценария начальной точки входа:
var forceSsl = require('force-ssl-heroku');
и используйте это так:
app.use(forceSsl);
Разверните и наслаждайтесь.
И убедитесь, что ваш NODE_ENV настроен на «производство» в Heruko.
Это также перенаправляет, если пользователь специально вводит http://myapp.herokuapp.com в браузере?
Конечно. когда вы нажимаете myapp.herokuapp.com в своем браузере, он переводится в myapp.herokuapp.com (с http), а затем пакет «force ssl» определяет, что заголовок «x-forwarded-proto» не является «https», а затем перенаправляет запрос к myapp.herokuapp.com (с https). Вы можете проверить свой ответ с кодами состояния на httpstatus.io, просто введите свой http-адрес, и вы увидите коды состояния.
Быстрый поиск в Google дал бы этот ответ