2011-10-19 62 views

回答

7

這可能是爲了確保頁面/圖像/不取自用戶的緩存。如果鏈接每次都不相同,那麼瀏覽器將從服務器而不是緩存中獲取它,以確保它是最新版本。

它也可以跟蹤人們通過網站的進度。最好用一個小故事解釋:

  1. 用戶訪問example.com。所有的鏈接都有相同的隨機數(比如4)。
  2. 用戶在新窗口/選項卡中打開鏈接,鏈接爲page2.php?rnd = 4。此頁面中的所有鏈接都給出了隨機數7.
  3. 用戶可以從原始選項卡或新建的頁面中點擊到page3.php的鏈接,服務器上的分析軟件可以通過它是否具有rnd = 4或rnd = 7。

雖然我們所能做的只是建議可能性。沒有一個標準的理由將rnd =放入一個URL中,並且我們無法在沒有看到服務器軟件的情況下知道網站設計者的動機。

4

它幾乎總是用於緩存清除。

6

Internet Explorer和其他瀏覽器將讀取圖像URL,下載圖像並將其存儲在緩存中。

如果您的應用程序正在更新圖像,並且因此您希望用戶看不到緩存的圖像,則URL必須每次都是唯一的。

因此,添加一個隨機字符串可以確保這是唯一的,並且每次都會下載到緩存中。

2

正如其他人所建議的那樣。這種行爲通常用於在您調用返回動態內容數據的頁面時避免緩存問題。

例如,假設您有一個獲取當前用戶信息的頁面,例如「mysite.com/CurrentUserData」。現在,在第一次調用此頁時,用戶數據將按預期返回,但根據時間和緩存設置,第二次調用可能會返回相同的數據 - 即使預期的數據可能已更新。

緩存的主要原因當然是優化頻繁請求的速度。但是在不需要這種情況的情況下,將隨機值作爲查詢字符串參數添加已知是廣泛使用的解決方案。

但是還有其他方法可以解決此問題。例如,如果您使用javascript/JQuery執行Ajax請求。您可以在您的通話中將緩存設置爲false ...

$.ajax({url: 'page.html', cache: false}); 

您還可以更改文檔加載時的所有頁面調用...

$.ajaxSetup({cache: false}}); 

如果你是做一個MVC應用程序,你甚至可以禁用,象這樣的屬性控制操作方法緩存...

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
public ActionResult NonCacheableData() 
{ 
    return View(); 
} 

(得益於快速複製和粘貼從here

我敢說,也有IIS中的設置,你可以申請獲得相同的影響 - 雖然我還沒有那麼遠,

相關問題