解決http轉https在chrome裡blocked的問題
什麼是HTTPS?
HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容 就需要SSL。 它是一個URI scheme(抽象識別符號體系),句法類同http:體系。用於安全的HTTP資料傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同 於HTTP的預設埠及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司進行,提供了身份驗證與加密通訊方法,現在它被廣 泛用於全球資訊網上安全敏感的通訊,例如交易支付方面。
問題描述
瀏覽器預設是不允許在HTTPS裡面引用HTTP資源的,一般都會彈出提示框,使用者確認後才會繼續載入,使用者體驗非常差。而且如果在一個HTTPS 頁面裡動態的引入HTTP資源,比如引入一個js檔案,會被直接block掉的。Chrome 21之後,在SSL加密頁面embed非SSL的Flash會怎樣呢?會被默默的遮蔽掉,只留下一句console報告。
解決方案
可以使用iframe的方式引入HTTP資源,比如在HTTPS裡面播放優酷的視訊,我們可以先在一個HTTP的頁面裡播放優酷視訊,然後將這個頁 面嵌入到HTTPS頁面裡就可以了,另外一個典型的例子是在HTTPS頁面裡通過AJAX的方式請求HTTP資源,Chrome是不允許直接AJAX請求 HTTP的。如果兩個頁面的內容都可以控制的話,當前視窗可以iframe視窗進行通訊的。
如何避免在HTTPS裡面引用HTTP
對於同時支援HTTPS和HTTP的資源,引用的時候要把引用資源的URL裡的協議頭去掉,例如://www.example.com /scirpt.js,這樣相當於相對路徑,即瀏覽器會自動根據當前是HTTPS還是HTTP來給資源URL補上協議頭的,可以達到無縫切換。參考:使用相對Url無縫切換HTTP-HTTPS
總結
如果是站內資源,最好是HTTP和HTTPS各一份,然後再通過相對路徑的方式引用,這樣就可以完美的解決掉這個問題了,比如Google首頁就是2種方式都提供了。對於站外的資源如果不支援HTTPS那就只能用iframe了
原文連結:
http://www.niutifa.com/?p=315