2011-09-01 31 views
5

此問題與混合內容錯誤無關。即將推出一個網站。當我從http://example.com導航到https://example.com時,我注意到css/js/etc被redownloaded,因爲我使用了根相對路徑:。重新加載HTTP到HTTPS(樣式表,js,css-sprites等)

使用http嗅探器,我發現瀏覽器認爲https://www.example.com/_css/main.csshttp://www.example.com/_css/main.css(不是)不同。因此,相同的確切內容會下載兩次,導致網站看起來從http到https導航緩慢(如果用戶沒有同時緩存兩個版本)。

反正有阻止嗎?用戶幾乎總是會首先點擊該站點的非SSL版本,因此是否有腳本會等到http內容被加載,而不是強制https版本進入用戶緩存?或者,我應該永遠使用絕對路徑(https://www.example.com/_css/main.css)和每個CSS背景圖像(只有2我使用精靈)。或者我們只是住在一起嗎?謝謝。

+0

請使用[example.com](http://www.iana.org/domains/example/)和朋友舉例。 mysite.com是一家真正的託管公司,不需要假鏈接指向他們給他們404錯誤。 – Quentin

+0

固定...對不起 – Steve

回答

4

使用HTTP嗅探器我看到瀏覽器認爲https://www.mysite.com/_css/main.css是不同於http://www.mysite.com/_css/main.css(其不)。

它是具有相同內容的不同資源。瀏覽器無法知道他們將擁有相同的內容。

您可以重定向(使用301)從一個到另一個,因此您沒有非SSL版本。

反正有阻止嗎?

不是。

用戶將幾乎總是撞了上去網站的非SSL版本,第一等是有一個腳本,將等到HTTP內容加載比可能迫使HTTPS版本到用戶緩存?

不會。如果一個URL可以預緩存任意其他URL的內容,那將是一個可怕的安全問題。

或者我應該使用絕對路徑(https://www.mysite.com/_css/main.css)永遠頁和每個CSS背景圖像(只有2我使用精靈)。

這將工作,但會導致混合內容問題。

或者我們只是住在一起嗎?

是的。

+0

關於安全問題的好處,沒有想到這一點。那麼我想我會與它一起生活,直到互聯網神靈提出一個替代方案。和平。 – Steve

+0

至於JavaScript的解決方案,我認爲沿線:http://headjs.com/。 JavaScript在重載默認功能的地方,在加載樣式之前...沿着這些線條。像加載http main.css和頁面的其餘部分一樣,然後觸發加載https版本的js代碼。 – Steve

-1

您可以參考文件,而不協議說明,如:

<link rel="stylesheet" type="text/css" href="//mysite.com/_css/main.css" /> 

看到這個職位的詳細信息:

Can I change all my http:// links to just //?

+0

這些將解析爲已被使用的相同的URI,所以這不會改變任何東西。 – Quentin

+0

基本上這已經發生。瀏覽器只是認爲https main.css與http main.css不同,所以它在技術上是一個不同的資源,但內容相同...有點sux。 – Steve

0

您可以使用一個。htaccess RewriteRule每次加載https內容;或者在http版本的html中指定的重定向頭部會更慢(額外的往返),但其他情況也是如此,我相信。

1

有幾種方法可以解決這個問題。

  1. 使用base tag。然後爲您的資源使用相對路徑,緩存將被認爲適用於http和https,但實際上它只是在https上加載。 Demonstration

    <base href="https://example.com/" />

  2. 當用戶點擊該網站的Apache的方式(Redirect SSL

    Redirect permanent/https://example.com/login

+0

強制ssl沒有解決這個問題,它仍然從非ssl版本重定向到ssl版本,給用戶一個警告! – BigSack

+0

實際上,強制SSL確實解決了這個問題,http://wiki.apache.org/httpd/RewriteHTTPToHTTPS。但真正的標籤是他們正在尋找的。這會導致頁面每次加載從https://版本加載的內容,無論其他所有內容是否安全。不知道你使用的瀏覽器是什麼,但你的警告是一個孤立的事件。 – Jeff

0

使用協議相對路徑重定向一切SSL。

取而代之的是

<link rel="stylesheet" href="http://domain.com/style.css"> 
<link rel="stylesheet" href="https://domain.com/style.css"> 

使用本

<link rel="stylesheet" href="//domain.com/style.css"> 

那麼它將使用父頁面協議。