iOS-AFN 301

406 阅读2分钟

「这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

这是昨天发版的时候, 遇到的一个问题, 相信大部分APP中都会有H5的页面存在, 我们项目的首页就是H5来做的, 发版的时候想把原先的http替换成https, 服务端将原先的请求h5链接的接口给重定向一个新的接口, 结果接口直接报错, 错误代码301, 然后无论app如果请求都没有数据返回, 刚开始还以为是服务端没有返回数据, 后来使用抓包工具抓包, 结果请求都没有发出去, 直接在APP内部就给挂掉了.

我们先看看301是什么意思?

网站301重定向是将一个域名永久性的转向另一个域名

例如有两个域名,那么301重定向就是将前者转向到后者,这里面的转向包括域名跳转以及权重转移。

当你选择要去做301的时候,你首先要搞明白被动关系,哪个是定向的目标域名,哪个是被转向的域名,因为这里虽然对你的正常访问不会带来多大的影响,但是对你网站的SEO优化将会导致灭亡。

上面是百科的解释

如果在网络正常的时候, AFN会缓存请求的response方便离线的时候浏览, 而如果服务器宕机或者出错的时候, 大部分情况是无法连接到服务器或者其他错误, 也会将错误的response缓存下来, 就导致了服务器修复好了, 但是由于本地缓存的问题, 读取的response是本地数据, 导致APP还是一直报错.

而301就是个错误的例子, 并且本地缓存了下来.

完犊子, 线上的操作...怎么办呢? 只能想办法解决了😭

如何解决这个问题呢?

其实系统是有清除缓存的API的, 但是由于一般在开发过程中基本不会用到, 导致都快忘了有这么一个API的存在了.

其实解决也很简单, 就是在请求接口前, 清除本地的缓存就可以达到目的了.

[[NSURLCache sharedURLCache] removeAllCachedResponses];

但是这样就会清楚全部的接口缓存, 有点没有必要, 咱们可能需要的是清除某一个接口的缓存.如何操作呢?

[[NSURLCache sharedURLCache] removeCachedResponseForRequest:req];