从iframe访问AWS ELB时遭遇混合内容错误的排查求助
R Shiny应用iframe嵌入混合内容问题排查方案
核心现象
- 直接访问
https://example.com/shiny/rstudio(含参数)时,HTTP/HTTPS均正常加载 - 从HTTPS域名
https://website.com/的iframe嵌入该应用时,控制台触发混合内容错误:Mixed Content: The page at 'https://website.com/' was loaded over HTTPS, but requested an insecure frame 'http://example.com/shiny/rstudio/?key=7178946820872'. This request has been blocked; the content must be served over HTTPS.
- 但iframe的src明确设置为HTTPS,错误却显示请求转向了HTTP
排查步骤
1. 检查Shiny应用内部的URL生成与重定向逻辑
- 排查Shiny代码中是否存在硬编码的HTTP地址,比如跳转链接、静态资源引用、API请求等
- 确认Shiny服务器配置(如
shiny-server.conf)中是否启用forceSSL,确保应用强制使用HTTPS协议 - 检查应用是否依赖
X-Forwarded-Proto头判断请求协议,若负载均衡未传递该头,应用会误认为请求是HTTP
2. 负载均衡器的协议转发配置
- 验证HTTPS监听器是否配置了X-Forwarded-Proto请求头,值设为
https,确保后端EC2实例能识别原始请求协议 - 检查目标组的转发规则,确认是否保留了客户端请求的所有协议相关头信息
- 排查负载均衡器的HTTP→HTTPS重定向规则,确认带参数的请求不会被错误重定向到HTTP
3. 浏览器请求流程验证
- 清除浏览器缓存(含Cookie、静态资源缓存)后重新测试,避免旧缓存导致的异常跳转
- 打开浏览器开发者工具「网络」面板,跟踪iframe请求的完整流程:
- 确认初始请求为HTTPS,查看是否存在3xx重定向到HTTP的情况
- 检查响应头中的
Location字段,若为HTTP地址,定位重定向的发起源
4. 域名解析与缓存验证
- 检查Route 53的域名记录,确认
example.com仅指向HTTPS负载均衡器,无冲突的HTTP类型记录(如A/CNAME) - 使用终端命令测试请求流程,查看是否存在隐性重定向:
若输出中出现curl -L -v "https://example.com/shiny/rstudio?key=7178946820872"Location: http://example.com/...,说明重定向是问题根源
5. 安全头部验证
- 检查
https://example.com/shiny/rstudio的响应头,确认X-Frame-Options未设置为DENY或SAMEORIGIN(虽不直接导致混合内容,但可能叠加影响加载) - 验证嵌入页面
https://website.com/的内容安全策略(CSP),确认允许加载example.com的HTTPS资源
内容的提问来源于stack exchange,提问作者RobbieC
相关产品推荐
相关产品推荐

