Javascript 如果ssl(https)证书无效,React本机XMLHttpRequest请求将失败
当我使用无效证书对https服务器执行XMLHttpRequest时,React Native抛出异常“操作无法完成。(NSURlerErrorDomain错误-1202)。”Javascript 如果ssl(https)证书无效,React本机XMLHttpRequest请求将失败,javascript,ios,react-native,Javascript,Ios,React Native,当我使用无效证书对https服务器执行XMLHttpRequest时,React Native抛出异常“操作无法完成。(NSURlerErrorDomain错误-1202)。” 是否可以禁用React Native XMLHttpRequest的ssl警告/检查?据我所知,您也不能在web XHR中执行此操作,因此React Native不会公开它。我已经检查了源代码,似乎证实了这一点。这是因为iOS 9(以及8.4)中的新应用程序传输安全(ATS)功能。ATS已到位,确保您的应用程序符合安全连
是否可以禁用React Native XMLHttpRequest的ssl警告/检查?据我所知,您也不能在web XHR中执行此操作,因此React Native不会公开它。我已经检查了源代码,似乎证实了这一点。这是因为iOS 9(以及8.4)中的新应用程序传输安全(ATS)功能。ATS已到位,确保您的应用程序符合安全连接的最佳实践。如果您遇到此错误,这意味着您没有使用安全连接,您应该对此采取措施 但是,您可以通过编辑应用程序的Info.plist文件来覆盖默认行为 您可以设置许多不同的标志,这些标志都在中介绍 让您同时关闭ATS的最简单修改如下:
openas>sourcecode
标记下<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
免责声明:此解决方案应该是临时的,并有文档记录,这样它就不会停留在软件的生产阶段,这仅用于开发
对于iOS,您所要做的就是打开您的xcodeproject(在RN中的iOS文件夹中),打开后,转到RCTNetwork.xcodeproj,并在该项目中导航到RCTHTTPRequestHandler.m
在该文件中,您将看到如下行:
#pragma mark - NSURLSession delegate
在该行之后添加此函数
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
}
瞧,您现在可以在没有有效证书的情况下对API进行不安全的调用
这应该足够了,但如果您仍然有问题,您可能需要转到项目的info.plist,左键单击它并选择open as。。。源代码
最后再加上
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
NSAppTransportSecurity
NSAllowsArbitraryLoads
所以你的文件看起来像这样
...
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</dict>
</plist>
。。。
UI支持接口方向
该解决方案更好您可以在浏览器中添加异常,但不能在RNSo中添加异常。是否有不忽略错误的解决方案?fetch api是否支持TLS 1.2?您是否考虑过使用fetch
而不是XHR?我正在链接的类似帖子的可能副本已被升级,并且已被收藏,因此我投票支持关闭此帖子。我在那里贴了一个答案,应该会有帮助!对于上述问题,有没有Android的等效解决方案?