HTTPS站点配置AJAX请求HTTPS接口仍报Mixed Content错误如何解决
混合内容报错排查解决步骤
核心原因是页面实际发起了HTTP协议的AJAX请求,可按以下步骤逐一排查解决:
- 第一步:排查接口跳转问题
打开浏览器控制台「网络」面板,勾选「保留日志(Preserve log)」选项后重新触发请求,查看你写的HTTPS接口是否存在301/302跳转,跳转后的目标地址是否为HTTP开头。如果存在该情况,修改后端服务(Nginx/Apache/应用代码)的跳转规则,强制跳转至HTTPS协议地址即可。
常见跳转触发场景包括:接口地址末尾补斜杠规则、域名去/加www规则、HTTP强制跳转配置缺失。 - 第二步:添加HTTPS请求强制升级配置
在页面的<head>标签内加入以下元标签,可将页面内所有发起的HTTP请求自动升级为HTTPS协议,避免混合内容报错:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
- 第三步:排查反向代理协议传递问题
如果你的服务配置了Nginx/Apache反向代理,后端应用实际运行在HTTP端口,需要在反向代理配置中添加X-Forwarded-Proto头传递原始请求协议,否则后端生成的跳转、回调地址都会默认使用HTTP,示例Nginx配置如下:
proxy_set_header X-Forwarded-Proto $scheme;
- 第四步:排查全量代码的HTTP硬编码
- 检查你给出的
getRegistrationNumber方法中,$.getJSON的请求地址是否为占位符,实际部署时是否写错为HTTP开头的地址 - 排查所有JS代码是否有动态拼接URL时遗漏协议、硬编码
http://前缀的逻辑 - 排查引入的第三方JS脚本是否存在发起HTTP请求的逻辑
- 第五步:校验CORS配置
你使用的框架cors.php配置中,allowed_origins参数需要填写你站点的HTTPS域名,不要填写HTTP开头的地址,避免跨域配置异常引发的协议跳转问题。
内容的提问来源于stack exchange,提问作者azim
相关产品推荐
相关产品推荐

