2012-04-06 32 views
0

爲什麼有時我會向FTP發送圖像(或CSS,JS等),它們沒有上傳(或緩存)?FTP傳輸後帶有雙「/」的Firebug請求

#container { 
    background: url("../images/bg.jpg") no-repeat scroll 0 0 transparent; 
    height: 895px; 
    overflow: hidden; 
} 

但隨着//../images//bg.jpg),我可以看到新的圖像

#container { 
    background: url("../images//bg.jpg") no-repeat scroll 0 0 transparent; 
    height: 895px; 
    overflow: hidden; 
} 

回答

1

看來,文件上傳,而是由瀏覽器緩存。

嘗試在Firefox/IE中使用CTRL + F5重新加載(其他瀏覽器可能有不同的快捷鍵),您應該始終看到新文件。

資源(JS,CSS和圖像文件)在某種程度上被瀏覽器更積極地緩存。而對於HTML頁面,每次刷新時通常會有一個新的HTTP請求,對於資源,有時候根本不會生成HTTP請求。你可以通過看例如在Firebug的淨面板上。

緩存通常是一個非常棘手的話題,很大程度上取決於服務器和瀏覽器的設置和實現。

瀏覽器緩存通常通過精確的URL匹配來實現。所以,http://someserver/bg.jpghttp://someserver//bg.jpg是兩個完全不同的的網址。但是,許多HTTP服務器會假設您請求了相同的內容,並會發送存儲在服務器根文件夾中的bg.jpg文件的內容(您必須看到URL和與此URL關聯的內容之間的區別)。

如果您訪問了第一個URL,它將被瀏覽器緩存。然後,在您上傳新版本的圖像後,很大程度上取決於瀏覽器緩存的實施情況以及第一次下載「bg.jpg」時發送的服務器的緩存設置。例如,在HTTP響應頭中發送圖像的服務器設置可能是,在接下來的1小時內,圖像可能會被瀏覽器緩存,並直接從緩存中加載,甚至無需詢問服務器(服務器設置可能配置這種方式來避免不必要的流量)。

總是得到一個'新鮮'版本的文件的方式(有點怪異但很常用)是爲請求添加一個當前時間戳(但它通常限於服務器端生成或JavaScript腳本) - 在CSS中沒有多大意義。

所以,在我寫它的時候,這個腳本會向服務器請求 http://someserver/bg.jpg?1334442703 但幾秒鐘後,當我刷新頁面,這將是 http://someserver/bg.jpg?1334442711

大多數服務器將放棄查詢字符串('?'後面的字符串),並且只會爲兩個查詢返回bg.jpg文件的相同內容,但由於圖像的URL不同,所以瀏覽器都不應從緩存中讀取圖像。

+0

真棒解釋=) – 2012-04-14 21:35:35

+0

謝謝:)你可能想了解瀏覽器緩存和代理緩存這裏很好的文章:http://www.mnot.net/cache_docs/ – 2012-04-14 21:40:27

+0

當然我會讀。謝謝。 – 2012-04-14 21:41:55