根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?
传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。
假设我的域名是example.com。
根据以下错误消息,我需要在info.plist中设置什么来启用HTTP模式?
传输安全性已阻止明文HTTP(HTTP://)资源因为它是不安全的。可以通过以下方式配置临时异常应用程序的Info.plist文件。
假设我的域名是example.com。
当前回答
根据苹果的说法,通常禁用ATS会导致应用程序被拒绝,除非你有充分的理由这样做。即使如此,你也应该为可以安全访问的域添加例外。
苹果有一个很好的工具,它可以准确地告诉你要使用什么设置:在终端中,输入
/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever
和nscurl将检查此请求是否失败,然后尝试各种设置,并告诉您通过的是哪一个,以及要做什么。例如,对于我访问的某个第三方URL,此命令告诉我此字典通过了:
{
NSExceptionDomains = {
"www.example.com" = {
NSExceptionRequiresForwardSecrecy = false;
};
};
}
要区分您自己的站点和您无法控制的第三方站点,请使用例如键NSThirdPartyExceptionRequiresForwardSecrecy。
其他回答
有两种解决方案:
解决方案1:
在Info.plist文件中添加密钥为“NSAppTransportSecurity”的字典在字典中添加另一个关键字为“允许任意加载”的元素
Plist结构应如下图所示。
解决方案2:
在Info.plist文件中添加密钥为“NSAppTransportSecurity”的字典在字典中添加另一个键为“NSExceptionDomains”的元素添加具有NSDictionary类型的键“MyDomainName.com”的元素添加具有布尔类型的键“NSIncludesSubdomains”且值设置为YES的元素添加具有Boolean类型的键“NSTemporaryExceptionAllowsInsecureHTTPLoads”且值设置为YES的元素
Plist结构应如下图所示。
首选解决方案2,因为它只允许选定的域,而解决方案1允许所有不安全的HTTP连接。
如本技术说明所述,确定可以自动执行哪些设置:
/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com
⛔️ 不要使用不良做法!
许多答案(包括公认的答案)都告诉你要让你的应用程序的网络通信完全不安全!通过将“允许任意加载”设置为“是”(或true)。这是网络请求最危险的设置!它仅用于测试和临时用途。
你可以看到这位苹果工程师在WWDC18中清楚地说了这句话,即使是针对Web内容,你也在努力让他们都这样做!
✅ 将“允许任意加载”设置为NO!!!
您必须始终使用HTTPS进行网络连接。但如果真的不能,只需在info.plist中添加一个例外
例如,如果您正在使用http://google.com如果出现错误,您必须将其更改为https://google.com(带s),因为它支持得很好。
但是,如果你不知怎么做不到,(而且你无法说服后端开发人员支持SSL),就把这个不安全的域添加到info.plist中(而不是让它适用于所有不安全的网络!)
根据苹果的说法,通常禁用ATS会导致应用程序被拒绝,除非你有充分的理由这样做。即使如此,你也应该为可以安全访问的域添加例外。
苹果有一个很好的工具,它可以准确地告诉你要使用什么设置:在终端中,输入
/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever
和nscurl将检查此请求是否失败,然后尝试各种设置,并告诉您通过的是哪一个,以及要做什么。例如,对于我访问的某个第三方URL,此命令告诉我此字典通过了:
{
NSExceptionDomains = {
"www.example.com" = {
NSExceptionRequiresForwardSecrecy = false;
};
};
}
要区分您自己的站点和您无法控制的第三方站点,请使用例如键NSThirdPartyExceptionRequiresForwardSecrecy。