https是當下的網站的主流趨勢,甚至像蘋果這樣的大公司,則完全要求用戶必須使用https地址。 然而對於以前http鏈接來說,我們往往就存在一個相容性問題,因為你不可能一下就全部切換過去,應該在很長一段時間內,https與http將共存。 https與http共存的場景有如: 1. app已經發佈 ...
https是當下的網站的主流趨勢,甚至像蘋果這樣的大公司,則完全要求用戶必須使用https地址。
然而對於以前http鏈接來說,我們往往就存在一個相容性問題,因為你不可能一下就全部切換過去,應該在很長一段時間內,https與http將共存。
https與http共存的場景有如:
1. app已經發佈出去,其調用介面的地址為http的,那麼這是必須相容的。
2. app中嵌入了h5頁面,而這頁面在以前的設計中是使用http訪問的,如果換成https地址,極有可能將導致h5頁面無法打開。
3. 對於流量推廣一類的業務,可能原有的http推廣地址已經發送給第三方,而且即使你通知到第三方要求改為https,也不排除有http地址的訪問。
針對以上場景,我們肯定是要https與http共存的。
改https初看起來,其實就是一個功能變數名稱指向的問題,也許我們只要將http的請求,直接跳轉到https地址去,那麼也就完成了https的切換。實際並不是這麼簡單的。
因為https地址中,如果載入了http資源,瀏覽器將認為這是不安全的資源,將會預設阻止,這就會給你帶來資源不全的問題了,比如:圖片顯示不了,樣式載入不了,JS載入不了。因為樣式類,基本上都是寫在本地的,所以一般還可以,但是一些公共的js文件,往往就是存在於cdn或者其他伺服器上,這時候,如果訪問不了,可能就導致了業務就完全操作不了。比如:jquery效法載入失敗,可能所有的操作、請求都將無效了。
將http請求直接跳轉至https請求,是一種解決辦法,而且很多公司都是這麼乾的,比如百度什麼的,但是前提是,你所有的服務都已切換https完成。
但是對於,要相容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() 方法中,將資源按照需求載入進來即可。<script>!window.jQuery && document.write(unescape('%3Cscript src="js/libs/jquery-1.4.2.js"%3E%3C/script%3E'))</script>
4. 推薦方法,不指定具體協議,使用資源協議自適配,比如,當前為https頁面,那麼就是https資源,如果是http頁面,那麼就是http資源。具體方法超簡單:<script src='//www.aa.com/jquery.js'></script>
5.含有超鏈接的需要換成<a onclick=window.open('http://jxipt.365960.cn/') style='cursor:pointer'>信息地址</a>
使用 iframe
使用 iframe 的方式引入 http 資源,比如在 https 裡面播放優酷的視頻,我們可以先在一個 http 的頁面里播放優酷視頻,然後將這個頁面嵌入到 https 頁面里就可以了。
另外一個典型的例子是在 https 頁面里通過 Ajax 的方式請求 http 資源,Chrome 是不允許直接 Ajax 請求 http 的。如果兩個頁面的內容都可以控制的話,當前視窗可以 iframe 視窗進行通信。
其他用法
<img src="//domain.com/img/logo.png">
這個小技巧同樣適用於 CSS :
.omg { background: url(//websbestgifs.net/kittyonadolphin.gif); }