任何恐惧都来源于不了解。

最近发现了一个问题,有用户反馈,整个APP里面所有的h5页面全部打不开,这个结果无疑是恐怖的,因为我们的APP,从产品详情到收银台,从促销页面到会员服务都是h5,全站打不开的结果当然是恐怖的。通过查看用户日志,发现webview报了一个很固定的错误:

NSCocoaErrorDomain-Error Domain=kCFErrorDomainCFNetwork Code=303 "(null)" UserInfo={_WKRecoveryAttempterErrorKey=, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <8A39DFD8-99CD-4E21-B7CC-E90D9A61471C>.<15>, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2205}

这个错误日志中最有价值的部分是:kCFErrorDomainCFNetwork Code=303。那么这个大名为303的错误究竟为何?你可以很快在Apple的官网(https://developer.apple.com/documentation/cfnetwork/cfnetworkerrors/cferrorhttpparsefailure)上找到结果:

根据Apple的解释,这个错误发生的原因是解析服务端响应错误。将问题反馈给服务端,结果服务端查了一圈,根本没有收到请求,既然没有收到请求,这个响应解析错误的原因从服务端无法查起,只能在客户端去定位,此时第一时间想到了缓存。是不是webview缓存了什么公共的东西出现了错误,导致每次请求直接失败。此时恰好有个内部同事反馈了同样的问题,我们引导该同事重新进行了登录,结果发现问题解决了,这更进一步的印证了我们的猜测,是不是cookie有问题?因为退出登录时会清理cookie。此时虽为明确问题原因,但好在也解决了一个case,后续多少有些解决方法可以提供了。

问题还在延续,通过监控,发现每天几乎有上千名客户被影响,此时又有用户反馈问题,将前述解决方案同步给了客服,结果客服反馈,重新登录并未解决问题,后来是用户卸载重新安装应用才解决了问题。这个事实说明了一个问题,前面的猜测可能有问题,所以,这里也给了客服应对的话术:如果有问题反馈,可以让用户重装APP来解决。虽然这个方式真的很蠢,也对用户不够友好,但是实在没有别的办法可以解决,因为问题的原因并不明朗。

正在一筹莫展之际,安卓端也出现了大量的用户反馈,页面无法打开,我们的安卓端使用了腾讯的X5内核,报错时有明显的信息提示给了用户,通过用户的截图与腾讯X5内核的同事进行了交流,结论是所报错误的原因为:服务端关闭了连接。服务端通过这个信息进一步进行了排查,结果发现出问题时是因为当前的http请求header过大,超过了阈值(我们的服务端默认阈值为4k),所以服务器直接拒绝了该访问。这个原因和X5呈现的原因完全一致。而http header中最大的部分是我们的UA(这里由于历史的原因,我们的UA承担了本不应该由它承担的任务)。

我们迅速的在iOS端进行了复现,将UA扩大到4k以上,结果成功复现问题,此时返回的就是303。至此,这个问题基本明确了,由于请求头过大导致服务端拒绝了请求,这也可以解释为什么出现问题后全站h5均无法加载,也可以解释为什么有些用户清理一下cookie问题可以解决(cookie减小,http header也会减小),当然也可以解释为什么重装设备可以解决问题。后续UA增大原因的排查以及后续的处理这里不再赘述了,完全是体力活儿。

经验:

iOS端排查问题不顺利主要是被错误原因干扰了,导致排查方向出现了偏差。而且我们还发现了一篇Mac的售后服务文档https://www.mactechnicalsupportphonenumber.com/blog/how-to-fix-kcferrordomaincfnetwork-error-code-303-on-safari/,这里提到了303的错误是Safari自身的错误,这就更加坚定了我们在错误的道路上越走越远。

服务端拒绝访问竟然没有日志,这是一个很大的问题,如果服务端可以将拒绝访问或者其他的异常情况进行日志统计并形成告警机制,这个问题也不会蔓延到这个程度而整个公司不知。埋点、数据、监控在互联网的每个环节真的都很重要!!!

最后,作为webview,设计架构webview时一定要考虑清楚数据的通信机制,莫拿UA、cookie等机制去做不该做的事情,最终的结局只能是自食恶果。后续,我们的UA一定要清理掉不必要的东西。

可怕的KCFErrordomainCFNetWork 303相关推荐

  1. 巨石加密_点餐:如何吃一个可怕的巨石

    巨石加密 by Alan Ridlehoover 通过艾伦·里德尔霍弗 点餐:如何吃一个可怕的巨石 (Ordering Take Out: How to Eat a Scary Monolith) M ...

  2. 青岛...沙尘暴!太可怕了~什么事儿都有!

    受蒙古国和我国内蒙古地区出现沙尘暴天气的影响,28日,山东省青岛.烟台等地出现大范围浮尘天气,空气质量明显下降. 28日,一场大范围的浮尘天气影响到烟台,天空一片浑浊,能见度不足5公里,空气质量明显下 ...

  3. Mysql 宕机引发索引丢失很可怕,文件 IO 中如何保证掉电不丢失数据?

    欢迎关注方志朋的博客,回复"666"获面试宝典 众所周知,存储设计离不开文件 IO,将数据存储到文件中进行持久化,是大多数消息队列.数据库系统的常规操作.为了更贴近实际的生产场景, ...

  4. 11岁少女叫板支付宝!会写代码的孩子,到底多可怕?

    前段时间,一则新闻刷爆了朋友圈. 一名15岁的初三学生温铠瑞,被清华大学提前锁定,获得了高考加分60分. 他从小学开始接触编程,初三时参加了清华大学信息体验营活动.因为成绩优异,他被清华大学直接签约, ...

  5. http状态码302,303,307的区别

    2019独角兽企业重金招聘Python工程师标准>>> 他们都是重定向 并且有细微的区别,他们的区别主要来源于HTTP/1.0 和HTTP/1.1 应用程序对这些状态码处理方式不同而 ...

  6. 中国式巨婴,到底有多可怕?

    "巨婴"是什么? 就是人身体长大了,心理年龄还停留在婴儿时期. 现在的中国父母很多都在养"巨婴","巨婴"的危害很大很大,不信来看看吧! 前 ...

  7. 蚊子已经很可怕了,而这些吸血昆虫能让你感受真正的恐惧

    SME科技故事出品 微信ID:SMELab 四个季节中,夏天往往最受喜爱,或许源于许多夏天特有的标志. 比如似火的骄阳,操场上挥洒的汗水,冰凉的西瓜.冷饮-- 还有萦绕四周的蚊子. 它悄悄地降落.轻轻 ...

  8. 水痘痊愈就能终生免疫?其实病毒仍潜伏在神经,随时以更可怕的形式爆发......

    本文转载自公众号SME 想必大家在小时候,都有过类似的记忆: 班里又突然有位小伙伴因为得了水痘休学一两个周了. 当初懵懂的我们一边羡慕着不用上课的福利,一边对水痘充满了好奇和恐惧. 但感染过水痘的人恐 ...

  9. 可怕!公司部署了一个东西,悄悄盯着你

    来源 | 编程世界宇宙 我是一个网络监控软件,我被开发出来的使命就是监控网络中进进出出的所有通信流量.这个网络中所有人的上网内容我都看的清清楚楚,是不是很可怕? 我被一家公司老板买来运行在一个配置极高 ...

最新文章

  1. TensorFlow serving远程访问引擎的容器部署
  2. 制作碳排放强度的空间可视化_【科研成果】吴传清、宋子逸:长江经济带农业碳排放的时空差异特征分析...
  3. tcp有限状态机分析
  4. eclipse maven打包jar 部分jsp无法访问_Maven系列教材 (九)- 在Eclipse中创建maven风格的java web项目...
  5. Tablayout+ViewPager+Fragment 实现页面切换
  6. Nginx源码分析 - Event事件篇 - Event模块的进程初始化(18)
  7. Android与物联网设备通信-网络模型分层
  8. learning scala 变量
  9. FISCO BCOS Solidity 智能合约 返回json对象、字典mapping、结构体
  10. 每日一句20200103
  11. 软件项目管理MOOC(北邮)——第四章测试答案
  12. [python小工具]加减法出题器
  13. git提交代码步骤和idea中不同颜色代表意义
  14. 从行业到技术,一位嵌入式er带你清晰总览嵌入式行业职业规划
  15. Linux安装mysql 开启bingo日志
  16. B2C之新岛咖啡 一堂62元的供应链管理课
  17. LitePal使用踩坑指南
  18. android 北斗测试,安卓手机查看是否支持北斗导航系统的详细检测方法
  19. makefile编译子目录
  20. Ubuntu20.04+GTX1060+显卡驱动+CUDA11.8+cuDNN8.5.0

热门文章

  1. SQL/MYSQL在CMD命令操作符中创建数据库 、表单并插入数据查看
  2. 微信小程序云开发 操作数据库-新增一条数据
  3. mac的计算机名称,mac 如何修改计算机名_mac 修改计算机名称
  4. 三个牛人教你怎么高效阅读论文
  5. 004-2018-09-06 列表
  6. 学计算机学体育生闺女,适合女孩学的体育项目
  7. WPF 按钮动画效果制作
  8. 极米投屏h2服务器响应失败,极米h2升级断电后怎么办?是修还是换一台当贝投影F3?...
  9. 情绪管理 | 压力、愤怒、烦恼,面对不良情绪,你会怎么做?
  10. 概要设计和详细设计模板_超详细的【免试拼】铝模板设计深化配模方案 非筑名铝模板设计...