开发者社区> 问答> 正文

iOS SDK手册应该如何使用?(3)



4. 注意事项



4.1 HTTP请求头HOST字段设置


标准的HTTP协议中服务端会将HTTP请求头HOST字段的值作为请求的域名信息进行解析。使用HTTPDNS后,您可能需要将HTTP请求URL中的HOST字段替换为HTTPDNS解析获得的IP,这时标准的网络库会将您的IP赋值给HTTP请求头的HOST字段,进而导致服务端的解析异常(服务端认可的是您的域名信息,而非IP信息)。为了解决这个问题,您可以主动设置HTTP请求HOST字段的值,如:

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


4.2 COOKIE字段


部分网络库支持COOKIE的自动存储管理,当您使用HTTPDNS进行IP URL请求时,部分网络库会将您URL中的IP信息作为COOKIE对应的域名信息进行存储管理(而非HTTP请求头HOST字段信息),进而造成COOKIE管理与使用上的困扰,因此您需要关闭COOKIE的自动管理功能(默认关闭)。

4.3 HTTPS/WebView/SNI场景



4.4 代理情况下的使用


当存在中间HTTP代理时,客户端发起的请求中请求行会使用绝对路径的URL,在您开启HTTPDNS并采用IP URL进行访问时,中间代理将识别您的IP信息并将其作为真实访问的HOST信息传递给目标服务器,这时目标服务器将无法处理这类无真实HOST信息的HTTP请求。移动网关提供了 X-Online-Host的私有协议字段来解决这个问题,比如:
  1. 目标URL:http://www.aliyun.com/product/oss/
  2. 通过HTTPDNS解析出来的www.aliyun.com的IP:1.1.1.1
  3. 代理:10.0.0.172:80
  4. 您的HTTP请求头:
  5. GET http://1.1.1.1/product/oss/ HTTP/1.1     # 通过代理发起的HTTP请求头,请求行是一个绝对路径
  6. Host: www.aliyun.com                         # 这个Header会被代理网关忽略,代理网关会使用请求行绝对路径中的host字段作为源站的host,即1.1.1.1
  7. X-Online-Host: www.aliyun.com                # 这个Header就是移动网关为了传递真实Host添加的私有头部,源站需要配置识别该私有头部以获取真实的Host信息

同样您可以通过下述方法进行 X-Online-Host请求头域的设置,并在服务端设置对该私有头域的解析。
  1. [request setValue:url.host forHTTPHeaderField:@"X-Online-Host"];

在绝大多数场景下,我们建议您在代理模式下关闭HTTPDNS功能。

展开
收起
猫饭先生 2017-10-20 14:42:45 1517 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载