WKWebView 是苹果手机上主要的H5加载控件,它相比UIWebView 有诸多优势。在次不做比较,但是它的坑缺比较多。网上也有很多的例子但是做的比较好的真不多,我在这里推荐俩博客供大家参考。https://cloud.tencent.com/developer/article/1005691;https://segmentfault.com/a/1190000016883249 这两篇介绍的我们日常的碰到的坑,网上其他的篇章介绍的坑没有这两篇介绍的透彻,且有些坑还是自己给自己挖的。

本篇介绍就是自己给自己挖坑的场景之一,也是当前网络上没有的坑--网络请求header 丢失。

产生场景:在我们的WKWebView里加载一个具有VOIP功能的页面,当VoIP呼叫结束后,我们会执行一段JS代码,这段代码会执行一个网络请求,根据这个请求的结果进行业务上的处理,不管它的结果是成功还是失败,这个页面上的其他交互都正常(含网络请求)。而问题是:JS执行的这个网络请求在在H5的插件里VCONSOLE 里看,它没有Header,没有Response。在这个JS的请求里,前后所有的网络请求皆正常。怪异的现象。

分析过程:1,此页面在UIWebView上加载正常,在WKWebView上有问题。2,WKWebView 有body 丢失现象,是原生首次LoadRequest时会有的问题,和我们的现象不一样。3,执行的JS的时机是在VoIP挂断后。这些有限的信息里貌似没有可用的的信息供我们去分析和参考,这是我们在脑海中有一个大胆的构想是不是网络阻断了导致的呢?我们分别用我们内部的办公软件和微信进行了测试,当我们在VoIP呼叫的时候,这两款应用都报了对方忙碌这个提示,这个提示是不是暗示我们的VoIP挂断的瞬间是不是网络不通呢?我们进行了断网测试,发现断网后的确实网络请求不带Header ,Response 也没有数据。问题迎刃而解,解决方案:VoIP 修改组件影响范围大,且工期来不及,我们终端先做一个补救措施,在回调这段JS 代码时做一个网络检测,只有网络真正的通了后再调用JS。

经过这段分析后留下两个问题:1 UIWebView为什么就可以正常执行那段JS代码呢?个人猜想,那应该是延时执行JS代码导致的。 本人亲测在VoIP挂断后,延迟执行那段JS也是可以的。这个问题大家感兴趣可以研究一下。2 为什么断网后请求不带Header 这是不是一个系统BUG,请了解的小伙伴告知。

WKWebView 网络请求Header 丢失的更多相关文章

  1. 技术干货 | 关于 WKWebview 网络拦截,你想知道的都在这里

    原生 WKWebView 在独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此在 WKWebView 上直接使用 NSURLProtocol 是无法拦截请求的. 但是由于 mPa ...

  2. 爬虫中网络请求的那些事之urllib库

    目录 爬虫之网络请求中的那些事 urllib库 urlopen函数 urlretrieve函数 urlencode.parse_qs函数 urlparse.urlsplit函数: request.Re ...

  3. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  4. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

  5. ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)

    当你访问一个网站时,NSURLRequest都会帮你主动记录下来你访问的站点设置的Cookie,如果 Cookie 存在的话,会把这些信息放在 NSHTTPCookieStorage 容器中共享,当你 ...

  6. Android okHttp网络请求之缓存控制Cache-Control

    前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...

  7. android 网络请求Ⅰ

    本章讲述在android开发中,常用的网络请求操作.网络请求利用android基本的HttpURLConnection连接URL和开源网络请求包AsyncHttpClient.本次网络请求以调取天气接 ...

  8. 使用Fiddler针对Android手机网络请求抓包

    本文转载自大牛Trinea的博文:Android利用Fiddler进行网络数据抓包 主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信. ...

  9. Android Http请求框架二:xUtils 框架网络请求

    一:对Http不了解的请看 Android Http请求框架一:Get 和 Post 请求 二.正文 1.xUtils 下载地址 github 下载地址  : https://github.com/w ...

随机推荐

  1. 写给程序员的机器学习入门 (八) - 卷积神经网络 (CNN) - 图片分类和验证码识别

    这一篇将会介绍卷积神经网络 (CNN),CNN 模型非常适合用来进行图片相关的学习,例如图片分类和验证码识别,也可以配合其他模型实现 OCR. 使用 Python 处理图片 在具体介绍 CNN 之前, ...

  2. Linux中内存、CPU使用情况查看

    1.背景 在实际生产中我们为了保证系统能稳定运行,我们经常要查看当前的CPU和系统使用情况 建议使用top,简单丰富,快捷 2.使用free查看内存使用情况 3.使用 top查看内存.cpu内存占比 ...

  3. 题解 CF510E 【Fox And Dinner】

    可以用网络流解决这个题. 注意到\(a_i \geqslant 2\),所以当相邻数字要和为质数时,这两个数要一个为奇数,一个为偶数. 所以就先将所有数按奇偶分为两列,其就构成了一个二分图,二分图中和 ...

  4. 给Django Admin添加验证码和多次登录尝试限制

    Django自带的Admin很好用,但是放到生产环境总还差了点什么= = 看看admin的介绍: Django奉行Python的内置电池哲学.它自带了一系列在Web开发中用于解决常见问题或需求的额外的 ...

  5. python迭代器和装饰器

    一.迭代器 1.迭代器协议:对象必须提供一个__next__()方法,执行该方法要么返回迭代中的下一个对象,要么引起一个StopIteration异常以终止迭代,迭代只能向后进行不能往前回退 2.可迭 ...

  6. Nginx与Apache简单对比

    Nginx 1.轻量级,采用C进行编写,同样的 web 服务,会占用更少的内存及资源 2.抗并发,处理请求是异步非阻塞的,负载能力比apache高很多,而 apache 则是阻塞型的.在高并发下 ng ...

  7. Dom运用2

    1.登录系统 <!--输入框创建--> 账号:<input class="ipt" type="text"><br> 密码: ...

  8. 动态规划入门(dp)

    dp的基本思想,是把大问题转化成一个个小问题,然后递归解决. 所以本质思想的话还是递归. dp最重要的是要找到状态转移方程,也就是把大问题化解的过程. 举个例子 一个数字金字塔 在上面的数字三角形中寻 ...

  9. JPA第三天

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springdata"获取视频和教程资料! b站在线视 ...

  10. PHP xpath() 函数

    定义和用法 xpath() 函数运行对 XML 文档的 XPath 查询.高佣联盟 www.cgewang.com 如果成功,该函数返回 SimpleXMLElements 对象的一个数组.如果失败, ...