OCSP导致https访问特别容易超时

之前网站接口在“微信iOS里的浏览器中”首次打开特别容易超时,然后是各种优化,把能做的优化做完以后,发现首屏打开速度仍然是时好时坏。百思不得其解。

使用微信的开发者工具,网页开发工具用的是chrome,也发现不了问题。顺便吐槽一下,微信开发者工具居然不支持远程调试。

实在没办法,想起来用Charles抓包看看到底怎么回事。

之后看到很多:ocsp.int-x3.letsencrypt.org/75.126.2.43 请求超时

原来,微信内嵌的safari会在线检查 Let’s Encrypt 的证书状态(OCSP),这也是为什么这个现象只发生在微信内的网页。而这个在线服务并不是特别稳定,之前有些时候优化后发现速度快了一点,可能碰巧那段时间OCSP服务比较稳定,而不是因为优化的原因(捂脸)。

之后参考这三篇文章:

https://blog.csdn.net/CUG_ZG/article/details/105508885

https://www.upyun.com/tech/article/338/%E4%B8%8D%E6%98%AF%20HTTPS%20%E6%8B%96%E6%85%A2%E7%BD%91%E7%AB%99%E9%80%9F%E5%BA%A6%EF%BC%8C%E8%80%8C%E6%98%AF%E4%BC%98%E5%8C%96%E5%81%9A%E7%9A%84%E4%B8%8D%E5%A4%9F%E4%BC%98%E7%A7%80.html

https://www.cackui.com/a/zhishi/jianzhan/5165.html

 

开启OCSP(Online Certificate Status Protocal), 在nginx的server{}配置中增加以下配置

  • ssl_stapling on;
  • ssl_stapling_verify on;
  • ssl_trusted_certificate /etc/letsencrypt/live/xxx.xxx.com/fullchain.pem;
  • resolver 8.8.8.8 8.8.4.4 1.1.1.1 valid=60s;
  • resolver_timeout 2s;
  • 然后重启nginx,在ssllab.com验证,OCSP stapling YES

即可。

 

关于Vue动态更新版本的一些问题记录

最近开始用Vue升级了之前的一些项目(没办法,开始写前端了。相比较后端逻辑那种冥思苦想,前端写起来更加“视觉系”)

很自然地,觉得前端也应该和之前写服务器端页面一样,只要文件更新了,用户端自然就更新了,然后很自然地,踩到了坑里。

一开始也是通过学习别人的代码,在router的beforeEach钩子函数里,通过检查版本文件来决定是否应该重新加载页面。

由于有些js文件在bundle中被按需加载。当更新代码时(我用的方式就是简单粗暴地替换dist中的所有文件到服务器),由于某些之前没有加载到的文件已经不存在了,会报:’Loading chunk ” + xx + ” failed’。

但是之前的疏忽,没有在检查版本文件时增加随机数来避免文件被缓存,结果用户端的缓存中,依然是旧版本的代码、以及旧版本的“版本检查代码”。所以单纯的在新代码中增加随机数,并不能确保用户端能够获取到新的版本文件。

这个时候只能通过在nginx中,增加对版本文件单独的禁用缓存配置:

location ~ /version\.json {
    expires 0;
    add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate';
}

这样可以确保之前的用户浏览器再次获取版本文件时拿到的是最新的,但是还是怀疑某些浏览器不会做这个检查,这种情况只能寄希望于缓存过期了。

同时,给index.html也加上禁用缓存的配置。确保index.html每次都获取最新的。

不过,这种配置貌似对PWA有影响,因为PWA的一个最重要的特性就是缓存所有的逻辑,改天研究一下。