为什么在切换到HTTPS时会使用NSURLRequest获得身份验证挑战?

时间:2016-11-22 11:00:31

标签: ios objective-c https nsurlconnection

我已经使用NSMutableURLRequest很长时间来连接我的服务器了。

为了避免双重旅行,我在标题中立即设置usr / pwd,如下所示:

A

这个工作正常,除非有一些错误,否则永远不会调用“willSendRequestForAuthenticationChallenge”,因此该方法总是如下:

NSMutableURLRequest *request = [NSMutableURLRequest
            requestWithURL:[NSURL URLWithString:url]
               cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:HTTP_REQUEST_TIMEOUT];
NSString *authStr = [NSString stringWithFormat:@"%@:%@", inUsr, inPwd];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [[authStr dataUsingEncoding:NSISOLatin1StringEncoding] base64EncodedStringWithOptions:0]];

[request setValue:authValue forHTTPHeaderField:@"Authorization"];

然而,现在,我一直使用相同的URL,只使用“https”而不是“http”,并且每次都会调用此方法。

我希望我的请求按照正常工作,即填充基本标头,只有一个请求到服务器。

我不确定我错过了什么,所以我们非常感谢指针!

1 个答案:

答案 0 :(得分:0)

使用https作为您的方案(或协议)请求安全连接,既可以加密传输的数据,也可以向您提供有关您要连接的服务器的真实性的一些信息。

此处调用的委托方法(connection:willSendRequestForAuthenticationChallenge:)与您使用服务器进行身份验证无关,但服务器会与您进行身份验证。如果您深入了解挑战对象(NSURLAuthenticationChallenge),您可以找到服务器提供的凭据,以告知您它是您实际尝试连接的服务器,而不是冒名顶替者。

通常您不需要使用此方法,除非您想要以超出操作系统已经执行的方式验证服务器。