ios uiwebview支持ipv6吗

 我来答
P民不好管了m0
2016-07-18 · TA获得超过585个赞
知道小有建树答主
回答量:369
采纳率:100%
帮助的人:296万
展开全部
一、是否需要修改代码
1、如果线上环境的APP 只使用域名访问,没有使用IP地址,并且没有使用底层socket API ,就不用修改代码。
直接访问IP地址 主要是用在测试环境中。
大多数app使用的:NSURLSession、NSURLConnection、UIWebView、WKWebView、CFNetwork。所以可以不用修改网络代码,AFNetworking2.x、reachability 这些 都 不用做任何的改变。
不过还是 推荐 大家升级AFNetworking到最新版本,毕竟NSURLConnection迟早要被淘汰。
用Swift写的 就直接用 Alamofire吧。

2、Reachability不用IP地址,可以固定写死为 线上域名。也可以用 AFNetworking 的Reachability来判断网络连接状态(是异步的,不用输入域名或IP)。
Reachability 最新版本 官方 声明iOS8以上系统可以使用,经测试,iOS 7.0以上系统都可以使用。

3、iOS 9.0、OS X 10.11 以上的系统 在IPv6的环境下 是支持IP地址访问网络的。所以大家测试机如果是 iOS9.0以上的系统,可以直接通过IP访问。这是因为iOS 9.0之后 NSURLSession和CFNetwork能把IPv4的地址 合成IPv6的地址(在DNS64/NAT64网络环境中)。
iOS 9.0以下的系统 就会报错,这和是否升级 AFNetworking 没有关系。就算升级AFNetworking到3.x,也是一样会报:Error Domain=NSURLErrorDomain Code=-1001 等错误。

官方图片:

4、分享SDK
微信SDK、新浪微博SDK 都更新了版本,并声明支持IPv6。
但是因为微信本身不支持IPv6,所以即使更新SDK到最新版本,分享到微信时,在微信的APP 还是会一直显示网络无法连接。
测试发现,不更新 这些分享的SDK,也能兼容IPv6。(等微信支持IPv6后,是否必须更新SDK 还不清楚)
友盟分享 官网建议升级SDK,个人也是推荐升级,如果实在不想升,应该也没问题。
来个小插曲:
上星期友盟新发的5.2版本 的SDK 有 邮件、短信分享崩溃的bug,给他们提出了。他们昨天下午进行了升级。

二、现有APP支持IPv6的情况:
1、绝大多数 都是支持IPv6的,比如:QQ,淘宝、大众点评。
1.1、因为绝大多数的app 都使用的域名,而不是ip地址。
1.2、并且没有调用底层的socket api。
1.3、不需要进行DNS查找。

2、极少数app不支持IPv6,比如:微信。

三、DNS64/ NAT64
DNS64/ NAT64过渡工作流程:
1、提供独立的IPv4和IPv6连接 的 蜂窝网络,把IPv4的网络升级到IPv6

上图只是理想状态下,升级到IPv6的情况,但是现在绝大多数都是IPv4的服务器,所以一些大的供应商开始实施DNS64/NAT64 的过度 来支持IPv6.

2、部署DNS64/NAT64 IPv6的蜂窝网络

客户端请求 网站域名,首先会通过DNS64服务器 查询该域名是否存在 IPv6的地址,如果存在,就返回IPv6的地址。如果不存在,就去查找该域名对应的IPv4地址,并返回。
下面是详细流程图:

3、DNS64/NAT64 转换 流程:
DNS64/NAT64 可以 将IPv4地址 转换为IPv6,将IPv6地址解析成IPv4。
IPv4地址 转换为IPv6:
客户端访问网站域名 ,如果网站只有 IPv4 地址:56.111.211.22,转成16进制: 38 6F D3 16,该16进制为IPv6的最后2位: 64:ff9b::386F:D316

四、搭建 IPv6 环境
MAC 的系统为 OS 10.11 及以上系统。
1、进入MAC 电脑的 “系统偏好设置”--》按住option/alt 键--》 点击 “共享”

2、选中“创建NAT64网络”,然后打开热点。

3、手机 连接 热点后,查看网络的 DNS 为:XX:XX:XX:XX:XX:XX ,说明网络为IPv6。

下图为MAC搭建IPv6 的原理图:

目前,一个网卡会同时使用这两张地址;以后 一个网卡仅有IPv6 地址。 两种设备不能直接访问,需要DNS64/NAT64 这种 过渡技术才能 互相访问。

五、升级AFNetworking2.X到最新版本
1、将 AFHTTPRequestOperationManager 替换为: AFHTTPSessionManager
2、将 AFHTTPRequestOperation 替换为:NSURLSessionTask
3、如果通过IP访问,或者允许https证书之外的域名访问,需要设置 validatesDomainName 为false。
这个设置是源于 2.5.3版本 之前的安全漏洞(AFNetworking曝SSL漏洞)。
修改完成后可以使用了,但是很不安全,这样黑客可以获取 你https 通信的数据。无论你是用http还是https,数据一定要加密。。

AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];

manager.securityPolicy = [AFSecurityPolicy defaultPolicy];

manager.securityPolicy.allowInvalidCertificates = YES;  //忽略https证书

manager.securityPolicy.validatesDomainName = NO;   //是否验证域名

六、系统兼容IPv6代码
1、下面的方法 只适用于IPv4,不能兼容IPv6:
inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()

2、如果有以下代码处理IPv4类型,要确保IPv6的形式也被处理过:

IPv4

IPv6

AF_INET

AF_INET6

PF_INET

PF_INET6

struct in_addr

struct in_addr6

struct sockaddr_in

struct sockaddr_in6

kDNSServiceProtocol_IPv4

kDNSServiceProtocol_IPv6
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式