聊聊iOS下有的网页打开很慢的问题

起因

最初,社区的网页在iPhone的微信里面打开一直比较慢,一开始没在意,以为是服务器在香港的锅。突然有一天我在安卓手机上打开发现比iPhone上快得多,我就对比测试了好几次,都是如此。

初步的原因及解决办法

image-20201210171916715

结合最近群里接连两三个群友说Let's Encrypt被墙导致网页变慢的问题,就以为是Let's Encrypt的锅。管理组就把Let's Encrypt换成别的域名的证书,但是实际上我个人感觉iPhone没有多大变化。

发现了更多

又过了几天,iPhone打开确实让我受不了,我又gg了一下,发现下面文章。

https://my.oschina.net/swingcoder/blog/4277977

文内提到不仅仅是Let's Encrypt被墙的问题,iOS平台还涉及对CA证书的有效性进行验证。一看这个验证就牵扯出了sslocsp stapling

眼尖的同学应该看到了,上图“西瓜头”群友提到了OCSP的问题,惭愧,因为当时不懂这个,以为只是let被墙的问题,所以就忽略了。

文内说:

ocsp stapling是什么,简单的讲,就是将原来由各个用户去发起验证证书有效性的请求,由webserver代劳了,这样就不用每个用户都去连CA的验证服务器了,相对来说访问速度就会加快不了。

好吧,在说得蛮有道理的,咱用在nginx上配置ocsp stapling

ssl_stapling on;
ssl_stapling_verify on;
resolver 233.5.5.5 233.6.6.6 8.8.8.8 4.4.4.4 202.96.134.133 valid=300s;
resolver_timeout 2s;
ssl_trusted_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 180m;

配置好一测试,iPhone上打开社区真明显快了,完美。

完美落幕?

到这里,我也以为问题都解决了,但是仍然有一个疑问一直在我脑海里面挥之不去:

  • 为什么Android没有这个问题?

今天,鬼使神差的,又配置一个网站的ssl,在研究的时候发现了霍炬的一篇博文:

https://jhuo.ca/post/ocsp-stapling-letsencrypt/

Android没有问题的原因是,Google不满意ocsp这个解决方案,所以所有google的产品,无论是android还是chrome都不进行ocsp检查。

另外他还提到了:

一个Flutter写的app在iOS上偶尔会发生了界面卡顿甚至冻结10多秒,但在Android正常。

终于,这个问题到今天才真正完美解决了我的疑惑。

再总结一下:

1、使用国内的ssl证书,换掉Let’s Encrypt 证书,因为他使用akamai cdn分发ocsp状态,akamai.net基本被墙。
2、服务开启OCSP Stapling,因为能减少http请求次数,优化速度。
3、阿里云腾讯云都有国内的一年的免费证书。我使用的https://freessl.cn/,有亚信免费一年,推荐。

记录分享之。

发表评论

邮箱地址不会被公开。 必填项已用*标注