Я не думаю, что проблема в Chrome (или, может быть, так оно и есть, но для таких ситуаций нужно что-то делать на стороне сервера). Кажется, это связано с конфигурацией вашего сервера. В конце вы открываете форму в HTTPS, отправляете ее, а затем уже на сервере выполняете перенаправление.
Итак, вы должны выяснить, как принудительно использовать HTTPS, но с сервера вы не можете делегировать эту ответственность браузеру (не полностью).
Проверьте этот пост "Как заставить ваш сайт перенаправлять на https"
Я не знаю, может быть, я что-то упускаю здесь. Если вы можете подробнее узнать, что происходит в этом перенаправлении, пожалуйста.
Получается, что если и есть способы заставить браузер использовать HTTPS, то именно с HSTS. Спасибо Михал Хинчица.
Посмотрите этот пост Что такое HSTS и как его реализовать?
Это какой-то хак? Разве эта переменная среды не должна принимать значение автоматически?
В конце концов тут что-то не так, т.к. $_SERVER['HTTPS'] = 'off', или если он вообще не установлен, значит запрос был сделан не по HTTPS, а может быть и так, что сервер отстает обратный прокси или балансировщик нагрузки.
Я думаю, что это похоже на то, чтобы обмануть Yii, особенно следующие функции:
web/Request.php
public function getIsSecureConnection()
{
if (isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'], 'on') === 0 || $_SERVER['HTTPS'] == 1)) {
return true;
}
// Rest of the function
}
ServerRequest.php
public static function getUriFromGlobals()
{
$uri = new Uri('');
$uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http');
// Rest of the function
}
Почему для _SERVER["HTTPS"] не установлено значение 1?
Обнаружение HTTPS и HTTP на сервере, который не отправляет ничего полезного
Вы можете делегировать эту ответственность клиенту, используя HSTS. Но вы все равно должны убедиться, что любой запрос, поступающий через http, перенаправляется на https, как описано в ответе.
Добавьте в начало index.php
:
$_SERVER['HTTPS']='on';
Если трафик перенаправления между вашим балансировщиком нагрузки и сервером является http, убедитесь, что на разгруженных серверах включен ssl.
Я бы посоветовал проверить, нет ли у формы абсолютного URL-адреса с протоколом
http
в атрибуте действия. Вы также можете проверить конфигурацию вашего менеджера URL-адресов, если http не принудительно включен в его свойство$hostInfo
.