В вашем случае атрибут [RequireHttp]
может быть в порядке, если вы удалите cookie для входа в систему - или вы будете отправлять его в виде открытого текста по сети.Это может быть больше работы, чем стоит избегать незначительной стоимости дальнейших вызовов HTTPS.SO - это переработка вопросов, и другие пользователи, читающие ваш вопрос, могут подумать, что нормально переходить на HTTP после входа в систему, когда это обычно неправильно.
Атрибут [RequireHttps]
можно использовать на контроллеретип или метод действия, чтобы сказать «это может быть доступно только через SSL».Не-SSL запросы к контроллеру или действию будут перенаправлены на версию SSL (если HTTP GET) или отклонены (если HTTP POST).Вы можете переопределить RequireHttpsAttribute и изменить это поведение, если хотите.Нет встроенного атрибута [RequireHttp]
, который делает обратное, но вы можете легко создать свой собственный, если хотите.
Есть также перегрузки Html.ActionLink()
, которые принимают параметр протокола;вы можете явно указать "http" или "https" в качестве протокола.Вот документация MSDN об одной такой перегрузке.Если вы не указываете протокол или вызываете перегрузку, у которой нет параметра протокола, предполагается, что вы хотите, чтобы ссылка имела тот же протокол, что и текущий запрос.
Причина, по которой мы не делаемВ MVC атрибут [RequireHttp]
состоит в том, что в этом нет особой выгоды.Это не так интересно, как [RequireHttps]
, и побуждает пользователей делать не то, что нужно.Например, многие веб-сайты входят в систему через SSL и перенаправляют обратно на HTTP после входа в систему, , что абсолютно неправильно .Ваш файл cookie для входа в систему так же секретен, как и ваше имя пользователя + пароль, и теперь вы отправляете его открытым текстом по сети.Кроме того, вы уже нашли время, чтобы выполнить квитирование и защитить канал (что является основной причиной того, что HTTPS медленнее, чем HTTP) перед запуском конвейера MVC, поэтому [RequireHttp]
не будет выполнять текущий запрос или будущеезапросы намного быстрее.