Почему Request.IsSecureConnection возвращает false, когда true
У меня есть страница aspx, которая проверяет Request.IsSecureConnection, чтобы убедиться, что это правда, если не перенаправляет на защищенную страницу https://www.domain.com/page.aspx.
Сервер имеет сертификат SSL, установленный для домена, и браузер показывает значок замка.
Тот же код работал нормально на другом сервере, но теперь Request.IsSecureConnection всегда возвращает false.
Я создал полностью пустой файл aspx, который просто печатает возвращаемое значение Request.IsSecureConnection, и он по-прежнему является ложным, поэтому нет другого контента, исходящего из стандартного HTTP-запроса.
Может ли кто-нибудь предположить, что может быть причиной этого, или дать какие-либо намеки на то, как я могу узнать, что заставляет это всегда возвращать false?
Ответы
Ответ 1
Если есть маршрутизатор балансировки нагрузки или аналогичный перед вашим веб-сервером с завершением ssl, то соединение оттуда на ваш веб-сервер не будет превышать SSL. В этом случае вам обычно необходимо проверить подключение к определенному порту или настроить заголовки с помощью балансировки нагрузки.
Ответ 2
Некоторые балансировки нагрузки добавляют новый заголовок к запросу, который вы можете использовать, чтобы определить, пришел ли исходный запрос от клиента через SSL. На сайтах Azure работает следующий код:
if (string.IsNullOrEmpty(Request.Headers["x-arr-ssl"]))
{
// No SSL
}
else
{
// Secure connection
}
Некоторые другие балансировки нагрузки могут использовать другой заголовок, например X-Forwarded-Proto.