神奇"HTTPS重定向網頁"在哪裏?

歡迎Follow我的GitHub, 關注我的CSDN, 精彩不斷!

HTTPS

本文的合集已經編著成書,高級Android開發強化實戰,歡迎各位讀友的建議和指導。在京東即可購買:https://item.jd.com/12385680.html

Book

我還沒有看過J. K. 羅琳的”神奇動物在哪裏”, 但是遇到過”神奇HTTPS重定向網頁在哪裏”, 這是一個關於WebView的故事. 在Android項目中, 爲了更好地顯示HTML網頁, 必然需要重寫WebView, 在其中添加一些默認屬性. 當遇到HTTPS重定向網頁時, 我們需要格外注意, 否則WebView會無法顯示.

CSDN: http://blog.csdn.net/caroline_wendy/article/details/68485089

概念補充

重定向: 分爲兩種: 301, 302.
* 301: 永久性轉移, 網頁永久性地轉移至另一個地址.
* 302: 暫時性轉移, 網頁在24或48小時內轉移至另一個網址, 不推薦, 建議使用301.

網站安全證書: 在客戶端瀏覽器和Web服務器之間建立一條SSL安全通道, 保證雙方傳遞信息的安全性,並且支持用戶通過服務器證書驗證所訪問的網站的真實性.

案例分析

遇到的情況是這樣的. 已被定製的WebView, 加載在線問診頁面的HTTP短鏈

http://url.cn/45R45AW

無法重定向, 顯示空白. 這個鏈接在瀏覽器可正常顯示, HTTP重定向(301)至HTTPS

https://test.chunyu.mobi/cooperation/wap/my_service_list/?partner=chunyu_wap

Test

注意: 網頁顯示HTTPS鏈接是不安全鏈接.

同時, WebView支持正常加載其他HTTP頁面, 如

http://www.chunyuyisheng.com/

WebView也支持正常加載其他HTTP重定向HTTPS頁面, 如Amazon的HTTP鏈接

http://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777

HTTP鏈接重定向至HTTPS鏈接

https://www.amazon.com/gp/aw/ref=is_null

Amazon

注意: 網頁顯示HTTPS鏈接是安全鏈接.

Why! 有的同學已經在我的幫助下發現問題的所在! Chrome瀏覽器給予正確提示. 這兩個重定向的HTTPS鏈接, 一個是安全鏈接, 一個是不安全鏈接.

那什麼是安全鏈接呢? 因爲HTTPS使用SSL進行加密, 與不加密的網絡連接相比, 使用SSL技術可以提高數據的隱私性和安全性, 並降低被第三方攔截或濫用信息的風險. 網站訪問者在得知使用SSL連接時, 更願意提供付款信息以及其他個人信息. 與支付相關的網頁, 多數都會使用SSL.

然而, 不是所有網站HTTPS鏈接都在Google備案, 瀏覽器無法認證未備案的鏈接, 顯示”不安全“標記, 而這些”不安全”的鏈接, 在Android的WebView中, 默認無法訪問, 顯示空白頁面.

解決方案

在Web中添加如下

WebViewClient webClient = new WebViewClient() {
    // ...
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        // 當load通過ssl加密的https頁面,但是如果這個網站的安全證書在Android無法得到認證,WebView就會變成一個空白頁
        handler.proceed();  // 接受信任所有網站的證書
    }
    // ...
};
setWebViewClient(webClient);

結論:
在使用通過SSL加密的HTTPS鏈接時, 如果這個鏈接的安全證書無法得到認證, 則WebView無法顯示網頁, 默認空白. 注意HTTP鏈接會重定向至HTTPS鏈接, 導致相同情況發生. 重寫WebViewClientonReceivedSslError方法, 信任全部證書, WebView纔可正常顯示. Do you get it?

信任全部證書會承擔部分風險, 在使用時需要綜合考慮.

OK, That’s all! Enjoy it!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章