概述

Tomcat 支持 HTTPS

Nginx 支持 HTTPS

浏览器 Https 拦截证书风险

问题:https 系统访问时验证码加载不出来,但拷贝地址新开窗口可以加载到,后面系统就可以加载验证码了

原因:使用了自签名证书,不是合法证书,默认浏览器会拦截非法证书,由用户确认后才能执行后面的操作

解决:打开浏览器设置-高级设置-Https/SSL-拦截证书风险,不要勾选

HTTPS 页面引用外部资源

问题

  1. 浏览器默认是不允许在 HTTPS 页面中引用 HTTP 资源「外部资源」,一般都会弹出提示框,用户确认后才会继续加载
  2. 在 HTTPS 页面里动态的引入 HTTP 资源,比如引入一个 js 文件,会被直接 block「阻塞」
  3. 在 HTTPS 页面中通过 ajax 加载 HTTP 数据,也会被浏览器拦截

解决

相对协议

如果你的网站同时支持 HTTP 和 HTTPS 访问,那么可以使用相对协议引入外部资源,达到 HTTP 和 HTTPS 的无缝切换

  • 将URL的协议(HTTP、HTTPS)去掉,只保留//及后面的内容。这样,在 HTTPS 的网站中,浏览器会通过 HTTPS 请求URL,否则就通过 HTTP 发送请求
  • 前提是外部资源也必须同时支持 HTTP 和 HTTPS
1
2
<img src="//xxx.com/img/logo.png">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
1
.div { background: url(//xxx.net/ggg.gif); }

iframe

HTTPS 页面里通过 iframe 内嵌 HTTP 页面,HTTP 页面中完成资源调度,例如视频播放