运营商缓存导致的奇葩问题

很久之前遇到的一个问题, 趁还记得, 记录下来, 避免日后忘记.

在公司上线 2014特别项目 之后, 有用户反馈出现了穿好问题. 这个这问题之前从来没有出现过.

通过检查服务器端未出现 Session 冲突, 用户在主站访问正常, 但是在进入 2014 项目之后, 发现信息出现串号现象.

我们的用户信息的 API 请求地址的格式类似为

1
/user_data.json

所有用户都会请求这个地址, 然后由服务器动态生成 Response 并返回, 通过在线上检查发现返回的数据也没有错误.

后来又发现, 遇到的串号用户基本上集中在相同的几个地区. 通过这个线索, 发现问题是出在 ISP服务商 的环节, 有些小的运营商会对你的静态数据做 cache 来加快用户访问速度, 即使你加了 no-cache 的设置, 但是仍然会有些运营商不按照规范强行缓存.

临时的解决方法就是讲请求地址改为

1
/user_data.json?_=[unix_timestamp]

利用 UNIX时间戳 来避开运营商缓存的问题, 最终问题得以解决.

作为总结, 在以后设计 API 的时候尽量要将每个用户的请求地址设计为独一无二的地址, 避免服务器对同一地址动态生成不同的数据, 最终避开这个问题.

PS:
想对运营商说….Fuck!