https網頁加載http資源致使的頁面報錯及解決方案

  https是當下的網站的主流趨勢,甚至像蘋果這樣的大公司,則徹底要求用戶必須使用https地址。html

  然而對於之前http連接來講,咱們每每就存在一個兼容性問題,由於你不可能一下就所有切換過去,應該在很長一段時間內,https與http將共存。jquery

  https與http共存的場景有如:瀏覽器

    1. app已經發布出去,其調用接口的地址爲http的,那麼這是必須兼容的。安全

    2. app中嵌入了h5頁面,而這頁面在之前的設計中是使用http訪問的,若是換成https地址,極有可能將致使h5頁面沒法打開。服務器

    3. 對於流量推廣一類的業務,可能原有的http推廣地址已經發送給第三方,並且即便你通知到第三方要求改成https,也不排除有http地址的訪問。app

  針對以上場景,咱們確定是要https與http共存的。網站

  改https初看起來,其實就是一個域名指向的問題,也許咱們只要將http的請求,直接跳轉到https地址去,那麼也就完成了https的切換。實際並非這麼簡單的。spa

  由於https地址中,若是加載了http資源,瀏覽器將認爲這是不安全的資源,將會默認阻止,這就會給你帶來資源不全的問題了,好比:圖片顯示不了,樣式加載不了,JS加載不了。由於樣式類,基本上都是寫在本地的,因此通常還能夠,可是一些公共的js文件,每每就是存在於cdn或者其餘服務器上,這時候,若是訪問不了,可能就致使了業務就徹底操做不了。好比:jquery效法加載失敗,可能全部的操做、請求都將無效了。設計

  將http請求直接跳轉至https請求,是一種解決辦法,並且不少公司都是這麼幹的,好比百度什麼的,可是前提是,你全部的服務都已切換https完成。cdn

  可是對於,要兼容https、http兩種協議的狀況,怎樣才能作到呢?

1. 最笨的方法,直接複製原有代碼,寫成兩套代碼,一套爲http使用,一套爲https使用,http和https各自指向各自服務。
2. 可用的方法,用同一套代碼,在後臺請求標識好協議,將該變量傳到html頁面中,進行協議替換,如:後臺變量,$protocol = 'https://';  前臺接收變量 src='{$protocol}res.aa.com/jquery.js'。
3. h5方法,使用js本身加載協議狀況,如在body onload='aa()', 在aa() 方法中,將資源按照需求加載進來便可。
4. 推薦方法,不指定具體協議,使用資源協議自適配,好比,當前爲https頁面,那麼就是https資源,若是是http頁面,那麼就是http資源。具體方法超簡單:<script src='//www.aa.com/jquery.js'></script>

  其實就這麼回事,只是在線上遇到這種問題,也很無賴啊。若是在公司管理很嚴的狀況下,因爲該問題致使的事故,這將是會受到記過處分的。

  自適配是個好東西。

相關文章
相關標籤/搜索