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

  • 不能直接访问,需要设置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"];
          }
      }