2009-12-24 56 views
7

我的網站運行了一個子域(yyy.example.com),但我需要包含來自主域(example.com)的CSS文件。我們運行的CMS不允許我在預覽階段執行任何服務器端任務,所以我堅持通過https發送包含CSS導入到http的頁面。因此,我的所有IE用戶都會收到混合內容警告。跨域的CSS文件鏈接,在IE中沒有混合內容警告?

有沒有客戶端方式來阻止這種情況,除了在每臺客戶機上維護域的單獨安全設置?

+0

歡迎來到StackOverflow,Dan。 – Sampson 2009-12-24 17:48:08

+0

很好的問題。我希望有人知道如何。 – 2009-12-24 17:48:21

+0

感謝Jonathan的歡迎。 – 2009-12-28 15:50:43

回答

9

在CSS鏈接中使用協議相關的URL。因此的

<link rel="stylesheet" type="text/css" href="http://example.com/style.css"> 

所以

<link rel="stylesheet" type="text/css" href="//example.com/style.css"> 

代替它會自動拾取父請求,這應該正常工作爲HTTPS以及的協議。

+1

哇。我從來沒有聽說過這個! – 2009-12-28 15:50:09

+0

感謝BalusC。我只是在今天下午測試了這個方法,它解決了這個問題!有沒有任何理由不總是這樣做? – 2009-12-28 22:39:30

+0

是的,當你堅持只有一個協議:) – BalusC 2009-12-29 00:16:19

3

據我所知,沒有辦法避免這種警告。特別是爲了這個目的:提醒你即使你認爲你的頁面是SSL加密的,但它的一些內容卻不是。您需要通過HTTP提供原始頁面(不推薦),或通過HTTPS提供CSS文件。

+0

我們這樣做(通過HTTPS提供CSS文件)。只需將您的證書更改爲通配符以允許使用所有子域。 – seanmonstar 2009-12-24 18:00:24

+0

雖然這可以解決問題,但通過HTTPS提供CSS和Javascript會降低下載時間,因爲HTTPS是一個較慢的過程。使用包含許多小文件的框架的頁面尤其困難。 – 2009-12-28 15:52:25

+2

我認爲HTTPS與HTTP相比的緩慢對於samll文件幾乎可以忽略不計。另外,瀏覽器會緩存js和css文件,所以你只能第一次受到懲罰。 – 2009-12-28 18:02:28

1

當你說你不能做「服務器端」的東西,你的意思是你不能接觸你的CMS,或者你沒有root權限訪問你的HTTP服務器?

因爲如果您確實有權訪問您的HTTP服務器,您可以設置一個非常簡單的reverse proxy(如果您使用的是Apache,則爲mod_proxy)。這將允許您在HTML中使用相對路徑,而HTTP服務器將充當任何「遠程」位置的代理。實際上,這種技術也可以用來緩解一些跨站腳本問題。

mod_proxy中設置反向代理的基本配置指令是ProxyPass。如下您通常會使用它:

ProxyPass  /css/  http://example.com/css_dir/ 

在這種情況下,瀏覽器會請求https://yyy.example.com/css/main.css但服務器會通過充當代理http://example.com/css_dir/main.css服務於這個。它不會引發瀏覽器警告,並且可以正常使用SSL。

+0

這是一個好主意,但就我而言,CMS是一個封閉的框,所以我不能做任何重寫。 – 2009-12-28 15:53:22