qiniu / happy-dns-objc

dns library for objective c
MIT License
501 stars 83 forks source link

NSURLErrorDomain Code=-999,如何集成http请求? #77

Closed seaguest closed 2 years ago

seaguest commented 2 years ago

Hi,

network failure: Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://54.255.32.12/v1.0/report, NSErrorFailingURLKey=https://54.255.32.12/v1.0/report, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <6B1DA05D-25CB-4DA8-9368-A7CF0FC40CCD>.<7>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <6B1DA05D-25CB-4DA8-9368-A7CF0FC40CCD>.<7>, NSLocalizedDescription=cancelled}

我就是简单的替换了NSUurl,需要该如何才能在接下来的https请求生效呢,有没有集成http请求的demo呢?

我看网上说需要将http请求中的header中的字段host改成原始的域名,但是尝试后也没有效果。

YangSen-qn commented 2 years ago

@seaguest 在 iOS 中使用 IP 直连相对来说复杂些,中间涉及与 SNI 相关的问题;在 iOS 中,针对服务端是 单 IP 单 Host单 IP 多 Host 的处理方案也不同,网上也有一些博客文档介绍相关问题的解决方案,你可以对此再研究下。

seaguest commented 2 years ago

@YangSen-qn 所以httpdns其实只是通过第三方的dns服务(8.8.8.8)来解析host对应的ip么?不包含http请求这一套么?如果是这样的话,没太理解HappyDns到底解决了那个核心问题呢?

我记得Android里okhttp能够配合httpdns,如果happyDns也能做到这样最好了。

我参考的是这个文章 http://iosfly.com/2016/07/14/HTTPDNS/

sni应该是针对一个机器多个域名的情况吧,我们是负载均衡对应一个域名,会部署多个节点。 看起来主要是要解决tls证书认证的问题,网上也没找到很好的第三方sdk。

可能我的理解不太对,请批评指正~

YangSen-qn commented 2 years ago

@seaguest HttpDns 只是通 Http 的方式来解析 Host ,相对于传统基于发 UDP 包的方式有一定的优势,它只是完成网络请求中解析 Host 的功能;

HappyDns 仅仅是一个综合了多种 Dns 解析方案的库,目前有基于 UDP 的 Dns 解析和基于 HTTP 协议的 Dns 解析(Doh)。

针对 单个 IP 多个 Host 的情况使用 HappyDns 的代价还是比较大的,解决证书问题目前看只能用 CFNetwork 或者其他三方网络库(比如 libcurl)