反代升级引起的 204 No Content 问题

🐛记录一些奇奇怪怪的 bug 以及 debug 过程。

本文记录了一次因为反代升级,导致 TLS 版本不兼容的 break change(生产环境下)。 实数“这也能错”系列了。

这个问题对于我来说,难度在于问题的定位,因为问题本身很好解决。

背景情况是这样的,我们一个服务的生产环境上,使用一个 Groovy (Grails 2.3.11) 脚本作为反代。前一天晚上进行更新以后,第二天起床发现微信端发送给这个脚本的请求都会返回 204 No Content

很奇怪吧。

然而更奇怪的是,昨晚在上线以后,测试了一下是没问题的。(因为这次更新没有 break changes,只是给微信端的 Vue-router 的导航守卫优化了一下用户体验)

然后这时候我的主要怀疑对象变成了学校的服务器。不过经过沟通以后,发现这种可能性并不大。

不过另一条线索是,再跟网协的学长汇报过以后,发现有学长昨晚也进行了操作(后来发现是进行了反代的升级)。然后网页调试过后,发现是脚本那边的 JSON Parser 报错。然而后端接口完全没有异常,非常奇怪。

就这样进行了很多次调试,中间的尝试过程就省略了。主要是因为搞不清楚是不是代码出了问题,或者是哪里出了问题。

后来发现,在 JSON parser 背后最直接的报错是

URI
    /script_playground/api/
Class
    javax.net.ssl.SSLException
Message
    Received fatal alert: protocal_version

然后结合之前的信息,才发现原来是反代升级之后,TLSv1.x 无法相互匹配了(Java 版本太老)。经过降级之后解决问题。