Decathlon總結-HTTPS與UIWebView

1.HTTPS

  • UIWebView與HTTPS(一些圖片和參考來自于董鉑然)

    在IOS9之后,在不設置info.plist的情況下,UIWebView直接請求http或者是https證書的加密算法比較低級別的時候(例如百度的首頁),會中斷鏈接并報錯

解決方案:
1. 網(wǎng)頁鏈接升級成符合加密算法的https
2. 在info.plist中進行設置

  • 如何查看訪問的地址加密算法的級別

    1.
    717809-20150919110056351-13129476.png

    2.
    717809-20150919110524039-1719781251.png
  • info.plist如何設置

    1. 在不要求https的情況下可以讓所有請求都退回到http


      屏幕快照 2015-12-25 下午5.14.38.png
    2. 針對與特定的地址進行設置

    * 在需要訪問http的地址時候(例如[簡書網(wǎng)http://jianshu.com/](http://jianshu.com)),如果直接請求的話會出現(xiàn)如下的錯誤:
    
      ![屏幕快照 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中針對簡書網(wǎng)進行設置:
      ![屏幕快照 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 協(xié)議的密碼
        NSExceptionMinimumTLSVersion:在這里聲明所支持的 TLS 最低版本
    
          在功能上,這些關鍵字與不含有"ThirdParty"的關鍵字有同樣的效果。而且實際運行中所調用的代碼將會完全忽略是否使用"ThirdParty"關鍵字。你應該使用適用于你的場景的關鍵字而不必過多考慮這些。
        NSThirdPartyExceptionAllowsInsecureHTTPLoads
        NSThirdPartyExceptionMinimumTLSVersion
        NSThirdPartyExceptionRequiresForwardSecrecy
    
        需要注意的是,經嘗試info.plist里面設置的域名和在請求中使用的域名要考慮子域名的情況以免出錯。
    
        在實際測試的發(fā)現(xiàn)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/ 測試的時候發(fā)現(xiàn)控制臺還是打印了很多-9802的錯誤。后來嘗試用webView來請求https://www.taobao.com/ 發(fā)現(xiàn)也是請求失敗,將webView請求的地址打印出來發(fā)現(xiàn),除了請求了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網(wǎng)站,可能也是因為內部的一些請求不符合IOS9的要求,如果不配置就會導致了webView請求失敗的原因。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容