Decathlon总结-HTTPS与UIWebView

1.HTTPS

  • UIWebView与HTTPS(一些图片和参考来自于董铂然)

    在IOS9之后,在不设置info.plist的情况下,UIWebView直接请求http或者是https证书的加密算法比较低级别的时候(例如百度的首页),会中断链接并报错

解决方案:
1. 网页链接升级成符合加密算法的https
2. 在info.plist中进行设置

  • 如何查看访问的地址加密算法的级别

    1.
    Decathlon总结-HTTPS与UIWebView_第1张图片
    717809-20150919110056351-13129476.png

    2.
    Decathlon总结-HTTPS与UIWebView_第2张图片
    717809-20150919110524039-1719781251.png
  • info.plist如何设置

    1. 在不要求https的情况下可以让所有请求都退回到http


      屏幕快照 2015-12-25 下午5.14.38.png
    2. 针对与特定的地址进行设置

    * 在需要访问http的地址时候(例如[网http://jianshu.com/](http://jianshu.com)),如果直接请求的话会出现如下的错误:
    
      ![屏幕快照 2015-12-25 下午8.40.18.png](http://upload-images.jianshu.io/upload_images/905600-1b98c004a3a55d1b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        需要早info.plist中针对网进行设置:
      ![屏幕快照 2015-12-25 下午8.42.19.png](http://upload-images.jianshu.io/upload_images/905600-c88d9dd7bea855f1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        NSExceptionAllowsInsecureHTTPLoads:对上面的域名采用http进行访问。
         其他设置的意思:[参考地址](https://github.com/ChenYilong/iOS9AdaptationTips)
        NSIncludesSubdomains:适用于这个特定域名下的所有子域([子域名解释](http://www.dns0755.net/news/25.html))
        NSExceptionRequiresForwardSecrecy:扩展可接受的密码列表:这个域名可以使用不支持 forward secrecy 协议的密码
        NSExceptionMinimumTLSVersion:在这里声明所支持的 TLS 最低版本
    
          在功能上,这些关键字与不含有"ThirdParty"的关键字有同样的效果。而且实际运行中所调用的代码将会完全忽略是否使用"ThirdParty"关键字。你应该使用适用于你的场景的关键字而不必过多考虑这些。
        NSThirdPartyExceptionAllowsInsecureHTTPLoads
        NSThirdPartyExceptionMinimumTLSVersion
        NSThirdPartyExceptionRequiresForwardSecrecy
    
        需要注意的是,经尝试info.plist里面设置的域名和在请求中使用的域名要考虑子域名的情况以免出错。
    
        在实际测试的发现info.plist设置的没有问题,但是还是无法加载出来,多试了几次就可以了,不知道是不是使用的是模拟器的原因。
    
        还有一个需要注意的就是及时能成功的访问到这个http的地址了,上面的错误信息还是会在控制台输入,可能相当于起到一个警告的作用吧。
    * 访问的地址已经是https但是签名算法达不到IOS9的要求
          在这种情况下会报这种错误:
          ![屏幕快照 2015-12-25 下午8.59.46.png](http://upload-images.jianshu.io/upload_images/905600-f8271c01dc9c2c52.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
          本来[百度https://www.baidu.com/](https://www.baidu.com/)正好是这个情况,不过最近百度的签名算法升级了....,虽然百度的签名算法看上去已经符合IOS9的要求了,但是webView请求还是失败,还是报-9802的错误,具体的原因就不知道了....(知道的朋友可以分享一下),想要成功的加载出百度的话,就需要如下的设置:
        ![屏幕快照 2015-12-25 下午9.25.05.png](http://upload-images.jianshu.io/upload_images/905600-336c684a57b2dc12.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        如果遇到签名算法不符合的https地址需要针对这个地址把NSExceptionRequiresForwardSecrecy设置为NO,相当于忽略签名算法。
    
    * 所有的要求看上去都符合IOS9的要求就不会出问题了吗?
      实际上应该不是的,webView除了加载https://github.com 控制台没有打印错误,使用https://developer.apple.com/ 测试的时候发现控制台还是打印了很多-9802的错误。后来尝试用webView来请求https://www.taobao.com/ 发现也是请求失败,将webView请求的地址打印出来发现,除了请求了https://www.taobao.com/ 这个地址外还有一个地址http://m.taobao.com/?sprefer=sypc00 :
      ![屏幕快照 2015-12-25 下午9.46.48.png](http://upload-images.jianshu.io/upload_images/905600-6738e34f8ca78631.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      由此就猜想,百度和苹果的developer网站,可能也是因为内部的一些请求不符合IOS9的要求,如果不配置就会导致了webView请求失败的原因。

你可能感兴趣的:(Decathlon总结-HTTPS与UIWebView)