Date: 2018-06-27
Proposed
- 客户网络环境不佳,存在流量劫持;使用的第三方服务要求 https;
- 10+ 主域名,50+ 二级域名;
- 190+ 项目;
- 10+ 数据库表;
- 大量自行托管及第三方资源文件。
- 防止流量劫持,插入广告;
- 防止账号密码等隐私数据被盗取;
- 支持 HTML5 API,如用户地理位置,音视频等隐私数据获取;
- 支持 HTTP/2;
- Apple,微信等有要求。
- 了解整个系统,统计使用到的域名及购买什么类型的域名证书;
- 相关资源支持 https,解决 Mixed Content 问题
- 针对此问题,浏览器会提示警告,Android 的 webview 直接无法打开;
- 前端页面的外链资源(CSS、JS、图片、音频、字体文件、异步接口、表单 action 地址等等)固定了协议引用(http://, https://),需更新为(//);
- 后端代码中协议是否为动态的;
- 返回接口协议应和请求协议保持一致;
- 数据库;
- 针对自有资源,应只保存路径信息,协议和域名建议动态补充;
- 针对第三方资源,默认保留原地址,跟进需要再做转换,实在不行需要做代理。
- 资源文件:确保支持 https。
- 支持 https;
- 移动端适配 https
- 针对运营商 DNS 劫持(降低 https 请求成功率),需支持两种协议,并有动态降级方案;
- nginx proxy + backend server
- 需关注 scheme 获取是否正确,注意 log 记录。
- 跳转
- 先 302 测试 https 全站正常,再 301 跳转;
- POST 请求会丢失 body 信息。
- 测试
- 移动端适配 https
- 强制 https;
- 所有环境均要升级 https;
- 除生产外,需要将开发、测试、预发布均进行升级,保持环境的一致性,减少不可预估的问题发生
- 优化。
- 性能(访问速度)有降低;
- 增加系统复杂性;
- 证书及资源(CDN 等)成本;
Refs: