为什么sdwebimage可以在启用App Transport Security设置时成功加载图像?

时间:2016-11-28 11:09:02

标签: ios sdwebimage

由于Apple将迫使我们从2017年开始使用ATS,我正在做一些调查工作,但对git blame file课有一些疑问。

如果我使用下面的代码,图像将成功加载

SDWebImage

但如果我在[self.myImageView sd_setImageWithURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/h%3D200/sign=1c3f18c4524e9258b93481eeac83d1d1/b7fd5266d0160924be0452bbd00735fae6cd3468.jpg"]]; 中使用该方法,图片将无法加载。

NSData

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://f.hiphotos.baidu.com/image/h%3D200/sign=1c3f18c4524e9258b93481eeac83d1d1/b7fd5266d0160924be0452bbd00735fae6cd3468.jpg"]]; UIImage *image = [UIImage imageWithData:data]; dispatch_async(dispatch_get_main_queue(), ^{ self.myImageView.image = image; }); }); 如何做到这一点?

3 个答案:

答案 0 :(得分:1)

确保Info.plist文件中未设置“NSAllowsArbitraryLoads”。

据我所知,SDWebImage受到与所有其他应用程序相同的ATS限制。

例如,当我将您的URL插入SDWebImage的演示应用程序(in their MasterViewController.m文件)并关闭ATS异常时,我在Xcode控制台中收到“SDWebImage iOS Demo[6714:130852] App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.”消息。

答案 1 :(得分:0)

不太可能,但也许,如果加载失败,SDWebImage会查看NSURL方案,如果是" http:",则会将其更改为@" https :"

NSString *absoluteString = url.absoluteString;
if ([absoluteString hasPrefix:@"http:"]) {
    url = [NSURL URLWithString:[@"https:" stringByAppendingString:[absoluteString substringFromIndex:5]]];
}

答案 2 :(得分:0)

可能是从缓存中获取图像,因为sdwebimage在将请求发送到URL之前首先检查它。