微信小程序首次请求慢 Safari浏览器访问慢 pending 10秒 可能是HTTPS证书的锅 home 编辑时间 2020/06/11 ![](/api/file/getImage?fileId=5ee1f92316199b501c00cc0f) <br><br> ## 问题 服务端证书使用的是 `Let's Encrypt` 问题的起因是IOS系统中使用微信小程序,请求服务器接口,首次请求需要等待3 ~ 10秒。导致小程序初次打开白屏。 在反复验证后,排除了Nginx、Tomcat、Java等问题。最终锁定了问题出在HTTPS证书上。 最终参考了V站大佬的帖子才恍然大悟。 [https://v2ex.com/t/665734](https://v2ex.com/t/665734) 在某些系统以及某些特定的浏览器下,会要求在线校验证书的有效性,称为 `在线证书状态协议 (Online Certificate Status Protocol)` 简称 `OCSP` ,测试后发现比较新的`Chrome内核`和`Firefox内核` **不会** 进行校验,而苹果系统下的Safari **会** 校验,IE **未知** ,在IOS系统的微信小程序 **会** 校验,Android系统的微信小程序则 **不会** 进行校验 补充一下:校验地址如果访问不通,会一直等到访问超时,所以会peding 3 ~ 10秒,超时以后会默认为安全,所以不会出现证书不安全的提示。本次访问的后续请求依然可以正常执行,只会表现为首次请求慢。 <br><br> ## 测试 经测试,`Let's Encrypt` 的证书的OCSP地址是 [ocsp.int-x3.letsencrypt.org ](ocsp.int-x3.letsencrypt.org ) 这个地址在国内大部分地区都无法请求成功,俗称被墙 **测试地址** [https://ping.chinaz.com/ocsp.int-x3.letsencrypt.org](https://ping.chinaz.com/ocsp.int-x3.letsencrypt.org) **测试结果** ![](/api/file/getImage?fileId=5ee1f57a16199b501c00cc0b) 上述结果中的绿色部分也只是极个别情况,该地区的99%的运营商其实也是红色超时状态,白色是仍然在 `pending ` 中,我懒得继续等了 <br><br> ## 解决 **方案1 换证书 (推荐)** 目前除了 `Let's Encrypt` 以外,就只剩下 `亚洲诚信` 可以申请到免费的HTTPS SSL证书了,不过 `Let's Encrypt` 是支持多域名、泛域名的。而 `亚洲诚信` 免费证书只能申请单域名。 到例如腾讯云、阿里云、又拍云的管理后台,搜索SSL证书,申请即可,一般当天可以获得一张一年有效期的单域名证书,支持下载证书文件。其中主域名 `abc.com` 和 `www.abc.com` 是可以共用一张证书的,按 `abc.com` 申请即可。其他二级域名例如 `music.abc.com` 需要多次申请 <br> **方案2 OCSP Stapling** 这是一个曲线救国的方案,也就是在Nginx配置OCSP的校验地址,到你自己的服务器或CDN,来避免访问不通原地址。 这个方案我没有具体实施,所以建议参考这几篇文章,说的比较详细了 **CDN方案** [https://www.alibabacloud.com/help/zh/doc-detail/160607.htm](https://www.alibabacloud.com/help/zh/doc-detail/160607.htm) **Nginx方案** [https://www.jianshu.com/p/540124f370e0](https://www.jianshu.com/p/540124f370e0) <br><br> ## END 送人玫瑰,手留余香 赞赏 Wechat Pay Alipay Windows 安装 Emscripten 准备入门 WebAssembly SpringBoot 项目使用 Jackson 实现解析和序列化 JSON 彻底抛弃FastJson