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. LQB20180航班时间(sscanf)

    首先找找规律,两者相加除以二. 按格式读入sscanf 按格式输出printf("02d%",m);前导0 #include <iostream> #include & ...

  2. ASP.NET Core中的响应压缩

    介绍     响应压缩技术是目前Web开发领域中比较常用的技术,在带宽资源受限的情况下,使用压缩技术是提升带宽负载的首选方案.我们熟悉的Web服务器,比如IIS.Tomcat.Nginx.Apache ...

  3. 21天速成python电子书pdf|超级厉害的书内附百度云链接可直接下载|

    python的学习书籍小编看过很多,但是这本<21天学通python>真的是堪称极品!本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版过 ...

  4. Python os.tcgetpgrp() 方法

    概述 os.tcgetpgrp() 方法用于回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组.高佣联盟 www.cgewang.com 语法 tcgetpgrp()方法语法格 ...

  5. PHP unset() 函数

    unset() 函数用于销毁给定的变量.高佣联盟 www.cgewang.com PHP 版本要求: PHP 4, PHP 5, PHP 7 语法 void unset ( mixed $var [, ...

  6. PHP sqrt() 函数

    实例 返回不同数的平方根: <?phpecho(sqrt(0) . "<br>");echo(sqrt(1) . "<br>"); ...

  7. P4383 [八省联考2018]林克卡特树 树形dp Wqs二分

    LINK:林克卡特树 作为树形dp 这道题已经属于不容易的级别了. 套上了Wqs二分 (反而更简单了 大雾 容易想到还是对树进行联通情况的dp 然后最后结果总和为各个联通块内的直径. \(f_{i,j ...

  8. 【新生学习】第二周:卷积神经网络_part_1

    DEADLINE: 2020-08-01 22:00 写在最前面: 本周学习的是卷积神经网络,是本课程重点中的重点,大家务必要熟练掌握. 本周的学习任务包括 视频学习 . 代码练习 .论文讲解 三部分 ...

  9. 【HEOI2015】公约数数列 题解(分块)

    前言:毒瘤数据结构题,半个下午都在搞它了…… --------------------------- 题目链接 题目大意:给定一个长度为$n$的序列,有两种操作:1.把$a_x$的值改成$y$.2.求 ...

  10. 【洛谷P3802】小魔女帕琪 题解(概率期望)

    前言:蒟蒻太弱了,不会推式子QAQ -------------------- 题目链接 题目大意:给定$7$种能量晶体各$a_i$个,每次随机摸到一个晶体,如果连续摸到$7$个不同的晶体就会触发一次伤 ...