开发者社区> 问答> 正文

HTTPDNS : 可以使用 IP 代替域名直接访问吗 ?

HTTPDNS : 可以使用 IP 代替域名直接访问吗 ?

展开
收起
保持可爱mmm 2020-03-27 21:09:29 1148 0
1 条回答
写回答
取消 提交回答
  • 能直接访问,需要设置 HTTP 请求头 HOST 字段 。 标准的 HTTP 协议中服务端会将 HTTP请求头 HOST 字段 的值作为请求的域名信息进行解析。 使用 HTTPDNS 后,您可能需要将 HTTP 请求 URL 中的 HOST字段 替换为 HTTPDNS 解析获得的 IP,这时标准的网络库会将您的 IP 赋值给 HTTP请求头 的 HOST 字段,进而导致服务端的解析异常(服务端认可的是您的域名信息,而非IP信息)。 为了解决这个问题,您可以主动设置 HTTP 请求 HOST 字段 的值,如下:

    NSString originalUrl = @"http://www.aliyun.com/"; NSURL url = [NSURL URLWithString:originalUrl]; NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url]; // 同步接口获取 IP NSString* ip = [httpdns getIpByHostAsync:url.host]; if (ip) { // 通过 HTTPDNS 获取 IP 成功,进行 URL 替换和 HOST 头设置 NSRange hostFirstRange = [originalUrl rangeOfString: url.host]; if (NSNotFound != hostFirstRange.location) { NSString* newUrl = [originalUrl stringByReplacingCharactersInRange:hostFirstRange withString:ip]; request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:newUrl]]; // 设置请求 HOST 字段 [request setValue:url.host forHTTPHeaderField:@"host"]; } }

    2020-03-27 21:11:32
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
域名大数据的应用 立即下载
“域”见更美好的未来——域名筑梦互联网+ 立即下载
“域”感——《域名投资从入门到精通》 立即下载