Yii2应用中用$this->redirect()时Chrome将HTTPS重定向为HTTP的问题
Chrome端HTTPS跳转HTTP问题的排查解决步骤
- 优先定位触发问题的核心版本逻辑
此前Chrome及其他主流浏览器对无明确协议的相对路径跳转,默认会复用当前页面的HTTPS协议,近期Chrome稳定版推送后,该判断逻辑出现兼容偏差,这也是无代码改动前提下问题突然出现的最常见原因。 - 调整Yii2侧的重定向生成逻辑
不要依赖框架自动生成的相对路径重定向结果,在调用$this->redirect()时显式指定带HTTPS协议的完整跳转地址:
同时核对// 调整前(默认生成相对路径,易触发Chrome协议判断偏差) return $this->redirect('success-page'); // 调整后(强制生成带HTTPS协议的完整地址) return $this->redirect(Url::to(['success-page'], true), 302);config/web.php中urlManager的配置,确保hostInfo字段固定为https://你的域名,避免框架自动识别协议时出现误判。 - 修正Yii2的代理信任配置
如果应用部署在反向代理、负载均衡节点后,Yii2默认无法从原始请求中识别真实的HTTPS协议,会错误生成HTTP协议的重定向地址,需在应用初始化时补充信任代理规则:// 在web/index.php的应用初始化逻辑中添加 $app->request->setTrustedProxies( ['你的代理服务IP段'], [\yii\web\Request::HEADER_X_FORWARDED_PROTO] ); - 排查Chrome端的本地规则干扰
完成后端配置调整后如果问题依然存在,按以下顺序排查本地浏览器问题:- 打开Chrome的安全设置,检查“始终使用安全连接”开关是否被异常关闭,该开关关闭时Chrome会对未显式指定协议的跳转自动回退为HTTP
- 清除对应站点的全部缓存、Cookie与站点权限数据,排除旧的HTTP缓存规则强制覆盖HTTPS跳转的情况
- 临时关闭所有代理、HTTPS优化类浏览器扩展,排除扩展拦截请求并改写协议的问题
- 用开发者工具定位问题根因
打开浏览器开发者工具的网络面板,复现表单提交操作,找到跳转对应的302响应,直接核对响应头的Location值:- 如果
Location本身为http://开头的地址,问题属于后端配置范畴,按前述Yii2的调整步骤修改即可 - 如果
Location为相对路径、或https://开头的地址,问题属于Chrome端的兼容偏差,无需调整后端逻辑,清除站点缓存、更新Chrome到最新正式版即可解决。
- 如果
内容的提问来源于stack exchange,提问作者Petr Kvasnička
相关产品推荐
相关产品推荐

