如何指定一个HTTP请求而不是DNS

问题描述:

服务器IP我想什么:如何指定一个HTTP请求而不是DNS

指定服务器IP为NSMutableURLRequest避免localDNS查询。

普通方法

替换主机字段中的URL,并指定该HTTP请求中的主机头字段。

request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://1.1.1.1/path"]]; 
[request setValue:@"www.a.com" forHTTPHeaderField:@"host"]; 

问题

如果我的服务器提供多个域,那么服务器会返回一个默认证书我的要求。 SNI只有在URL中找到主机时才有效。

所以任何建议,如果我想实现我想要什么问题现场。

+0

,如果你想为在HTTPS://12.34.56.78一个页面,那么你需要为12.34.56.78证书主机头只需要匹配的是在证书 –

+0

@ MichaelB-AzureMVP我想担任一个在https://www.a.com/path的页面,但我必须在客户端而不是DNS中为www.a.com指定IP(假设我知道它)。我该如何处理这种情况。 – Ryan

+0

你解决了这个问题吗?我有同样的问题,但我还没有找到解决方案。你能帮我一个忙吗? – zylenv

实际上,主机头用于确定证书。服务器从不会看到完整的URL。 IIRC,如果URL包含IP地址,NSURLSession和朋友通常不会覆盖用户指定的主机头。但是,它应该是“主持人”中的资本“H”。由于标题在你不应该碰触的标题列表中是,因此大小写可能很重要。

如果固定资本不工作,也有一些其他的方法可以考虑:

  • 添加主机名在不同的头字段,然后使用自定义的认证处理的委托方法明确地验证您自己对该证书的域颁发的证书,如果它证实了,那么它是您的证书之一它适用于您的某个域,即使证书的域与请求的域不匹配,也允许请求继续。
  • 在您的应用中包含基本代理,并将该会话配置为在按名称连接到该主机时始终使用它。在代理中,打开正常的TCP/IP NSStream到正确的IP地址并来回传递数据。
  • 编写一个自定义的HTTPS客户端,它只支持足够的功能来处理您正在做的任何事情。