美文网首页
请求头中的Cache Control参数引出的一个Bug

请求头中的Cache Control参数引出的一个Bug

作者: seasonZhu | 来源:发表于2019-08-05 16:35 被阅读0次

最近手头上接了一个App,主要是进行维护与修复Bug.说实话,这种活最累的,查找一个他人写的逻辑或者页面,经常半天就过去.
而且上线的时候居然有有个非常严重的Bug没有修复,哎,只好硬着头皮搬砖.

bug是这样的:
手机密码找回,需要调用一个接口,入参是手机号,然后请求后,返回一个验证码.
很简单的需求,一般App的找回密码也基本是这样一个逻辑.
结果,问题来了,同一个手机号码,安卓这边,每次请求后,都会返回验证码.而iOS这边,第一次请求成功后,返回了验证码,之后再怎么请求,都不会返回验证码了,而且跟踪后台的响应,每次都是成功的.

我和安卓的兄弟,对了入参,这是一个get请求,只需要将手机号拼接到api后面即可,入参一致,pass.
而后,我们对了请求头,请求头中的Map的key与value拼写无误,类型无误,但是,不管怎么样,iOS这边就是每次请求都成功,然而没有验证码.

之后,我在对比每次服务器返回的响应体的时候发现了问题:每次返回的响应时间都是一样的,而且都是第一次请求成功返回了验证码的时间,Date每次都是相同的.

{
    "Cache-Control" = "max-age=259200";
    Connection = "keep-alive";
    "Content-Type" = "application/json";
    Date = "Mon, 05 Aug 2019 08:19:53 GMT";
    Expires = "Thu, 08 Aug 2019 08:19:53 GMT";
    Server = "nginx/1.10.3 (Ubuntu)";
    "Transfer-Encoding" = Identity;
    "X-Application-Context" = "??APP:uat-product,swagger:9800";
}

也就是说,一旦我请求成功,获取到了验证码之后,之后每次请求该接口后台都是返回的该接口最近一次的成功缓存.
短信接口本质上是App请求后台,后台去请求专门的短信服务商接口.

本质是我的参数透传到短信服务商的接口上.另外为何同样的请求参数与请求头,安卓这边没有问题,而iOS这边就有问题呢?
为了方便模拟测试接口,我和后台的兄弟通过postman进行该接口的调试,发现每次都能请求成功,而且获取到验证码,而且响应体返回的响应时间也是实时的.
最后我们发现,postman每次请求的时候,都会在请求头中带一个我们两端都没有带的参数{"Cache Control": "no-cache"}.
于是抱着死马当活马医的想法,我在iOS端的请求头中添加了该请求头参数,果然就好了.
但是为何安卓端不用带就是好的呢?后台的兄弟说是安卓这边的安全级别要低一些,我也不知道是什么回事.

总结:
短信平台中对于过于频繁的请求短信接口应该是会有一个判断的,而读取成功的缓存也应该是有一个时限性,不知道为何在iOS这边的请求过去的时候,就变成了长期读取缓存而不进行真正的请求,通过这个请求参数可以忽略掉读取缓存进行请求.

相关链接

相关文章

  • 请求头中的Cache Control参数引出的一个Bug

    最近手头上接了一个App,主要是进行维护与修复Bug.说实话,这种活最累的,查找一个他人写的逻辑或者页面,经常半天...

  • 缓存

    缓存 Cache Control 在响应头中会带有一个Cache-Control字段(有很多属性我只记录max-a...

  • HTTP缓存

      客户端发出HTTP请求之后,客户端返回的响应头中可以用Pragma、Expires和Cache-Control...

  • 常用的meta 标签

    禁止ie 缓存 Cache-Control头域 Cache-Control指定请求和响应遵循的缓存机制。在请求消...

  • 前端性能优化篇之设置缓存Expires、cache-contro

    1. Cache -Control HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。 在请...

  • 缓存头Cache-Control的含义和使用

    Cache-Control的特性 申明:Cache-Control 只支持get请求 可缓存性,包括:public...

  • Cache-Control和ETag

    Cache-Control Cache-Control表示浏览器使用缓存,不向服务器发请求 1. 请求端代码 2....

  • 如何不让浏览器缓存静态资源

    一、请求时想要禁用缓存, 可以设置请求头: Cache-Control: no-cache, no-store, ...

  • HTTP

    #通用首部字段 ##Cache-Control ###缓存请求指令: + no-cache + no-store ...

  • HTTP缓存

    缓存控制Cache-Control Cache-Control是Web性能优化的一种,能加速HTTP请求与响应。 ...

网友评论

      本文标题:请求头中的Cache Control参数引出的一个Bug

      本文链接:https://www.haomeiwen.com/subject/dqmmdctx.html