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



作为苹果将迫使我们启用2017年的ATS,我正在做一些调查工作,但对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;
    });
});

SDWebImage如何做?

确保您的info.plist文件中未设置" NSAllowsArbitraryLoads"。

据我所知,sdwebimage受到所有其他应用程序所在的ATS限制的约束。

例如,当我将您的URL插入sdwebimage的演示应用程序(在他们的MasterViewController.m文件中)并关闭ATS例外时,我会在Xcode Console中获取" 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."消息。

不太可能,但是,也许在加载故障的情况下,sdwebimage会查看nsurl方案,如果是 @ @ @" http:",它将其更改为 @ @" https:"?

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

可能会从缓存中获取图像,因为这是第一个位置SDWebimage检查,然后再将请求发送到URL。

相关内容

  • 没有找到相关文章

最新更新