2011-08-15 19 views
15

我有鏈接到我的網站像
繞過緩存的HTML鏈接?

<a href="http://example.com/myfile.txt>View!</a> 

但是一個文件,這個文件的變化非常頻繁,並單擊鏈接時,瀏覽器加載文件的緩存版本,而不是實際的文件。 有沒有辦法讓點擊該鏈接將跳過該頁面的緩存?

一件好事像<a bypassCache href="">將是一廂情願。

回答

19

一件好事就像是一廂情願。

事實上,您可以從鏈接中執行以下操作:添加隨機GET參數。

<a href="http://example.com/myfile.txt?a=193834923283943842923">View!</a> 

您可以使用JavaScript(或者當然像PHP這樣的服務器端腳本語言)在動態的基礎上完成此操作。

然而,遠優於方法是在服務器端首先正確配置文本文件的緩存頭。盜竊Best way to disable client caching的頭信息,這樣的.htaccess文件應該工作:

<Files myfile.txt> 
FileETag None 
<IfModule mod_headers.c> 
Header unset ETag 
Header set Cache-Control "store, no-cache, must-revalidate, post-check=0, pre-check=0" 
Header set Pragma "no-cache" 
Header set Expires "Sun, 19 Nov 1978 05:00:00 GMT" 
</IfModule> 
</FilesMatch> 
+0

不!切勿添加隨機參數以避免緩存。如果你正在使用像Varnish這樣的緩存代理,那麼你正在用永遠不會使用的無用條目填充緩存。您應該使用Cache-Control和Pragma頭部參數。 – mickiewicz

0

添加一個隨機數超鏈接之後,如<a href="http://example.com/myfile.txt?rand=12312321321">View!</a>

每次生成一個新的隨機數的頁面加載。

+0

但我不是一個將永遠更新文件。這意味着我將不得不訪問編輯該文件的所有人並指示他們生成隨機數 – dukevin

1

最好的辦法是告訴Apache /(網絡服務器)來告訴瀏覽器不允許該文件的緩存,如果你不通過修改發送給它的參數來避免緩存,只需在後面添加一些數字,例如創建鏈接時的時間,這使得每個url都有所不同,因此瀏覽器將忽略緩存,但是隻要服務器忽略額外的參數,所有鏈接都是相同的文件。在php中:

echo "<a href='http://example.com/myfile.txt?" . time() . "'>View!</a>" 
+0

幸運的是,我已經使用PHP,所以你的時間()工作非常好 – dukevin

0

你可以在服務器級別上解決你的問題。爲符合您的要求的txt資源(或特定的資源)設置特殊截止日期。 如果你使用Apache,你可以閱讀阿帕奇這裏大約mod_expiry

1

只要把

<meta http-equiv="expires" content="0"> 

到目標頁面的頭部,並再次檢查