一个奇怪的Bug

神马Bug

最近观察了一下,用户在搜索的时候经常出现500错误,但是自己测试的时候又非常正常,这就相当蛋疼了。看laravel.log上面的错误日志,基本看不出啥玩意,还好还接了第三方的Bug系统sentry,说真的很好用,就是太贵了。

Bug出现的原因

要查Bug,先来看看用户提交上来的搜索词有哪些,下面是几个整理出来的搜索关键词。

搜索关键词 实际传输的urlencode编码 正确的urlencode编码
下一张 %E4%B8%8B%E4%B8%80%E5%BC%3F %e4%b8%8b%e4%b8%80%e5%bc%a0%3f
傻逼? %E5%82%BB%E9%80%3F %e5%82%bb%e9%80%bc%3f

我们知道只有对中文正确的编码,服务端才能正常的解析出真实的关键词,像上面的关键词的urlencode编码均出现了少字符的情况(表格内使用删除线标识缺少的字符)。到了服务器解析出来的时候直接乱码了,继而导致搜索发生500错误。

怎么修Bug

这个问题比较奇怪,以下是我猜测的几个原因

  1. 某些浏览器把urlencode出的字符给吞了
  2. 服务端在生成模板的时候发生了编码错误
  3. CDN网络在对原始网页文件进行压缩的时候,把相关字符给吞了!

第1、2种发生错误的概率比较低,但是我还是做了点修改,把页面编码给改了一下。

<meta http-equiv="content-type" charset="utf-8">
替换为
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

第3种,因为目前服务器使用的是阿里的CDN网络,直接进后台关闭代码压缩即可。