我的任務是維護一個PHP網站,其中包含一個自動生成RTF文件並提供下載鏈接的功能。每次以前生成的文件被新文件覆蓋。防止瀏覽器緩存鏈接的文件
但是,似乎試圖下載生成的文件時,瀏覽器有時會檢索緩存的版本,它通常與最新版本不同(因此您獲得的文檔與上次相同,而不是您請求的版本) 。
我設法通過給每個生成的文件一個基於當前時間戳的唯一名稱來解決這個問題,但是這會在需要定期清理的目錄中產生大量混亂。理想情況下,我想標記此文件,以便瀏覽器不會緩存它,並且每次都會獲得最新版本。我怎麼能做到這一點?
我的任務是維護一個PHP網站,其中包含一個自動生成RTF文件並提供下載鏈接的功能。每次以前生成的文件被新文件覆蓋。防止瀏覽器緩存鏈接的文件
但是,似乎試圖下載生成的文件時,瀏覽器有時會檢索緩存的版本,它通常與最新版本不同(因此您獲得的文檔與上次相同,而不是您請求的版本) 。
我設法通過給每個生成的文件一個基於當前時間戳的唯一名稱來解決這個問題,但是這會在需要定期清理的目錄中產生大量混亂。理想情況下,我想標記此文件,以便瀏覽器不會緩存它,並且每次都會獲得最新版本。我怎麼能做到這一點?
除了向URL添加隨機GET字符串(通常是最簡單的方法)的可能性之外,還可以通過發送正確的標題來解決此問題。
由於您正在生成靜態文件,因此需要在.htaccess
文件中進行設置。它必須是這樣的:
<FilesMatch "\.(rtf)$">
Header set Cache-Control "no-store"
</FilesMatch>
最簡單的方法?而不是鏈接到http://yoursite.com/file.rtf,鏈接到http://yoursite.com/file.rtf?<?=time()?>。這將附加一個查詢字符串參數,每次客戶端請求時參數都會有所不同,因此不會被緩存。
啊。那很好。我會放棄它。 – 2010-07-15 11:13:38
你可以標記當前時間值到文件您服務
.../file.rtf?15072010141000
這樣,你不必產生獨特的名字,但您可以確保未來的請求不會被緩存。
雖然使用由佩卡建議將工作無緩存頭的簡單的解決方案,你如果同一文件被下載了幾次會失去緩存的潛在益處。
如果RTF文件是大,你想你的用戶,當文件實際上沒有改變享受到緩存的好處,你可能要檢查這個答案:
但是,這不會只適用於當前頁面,而不是頁面鏈接到的RTF?如我錯了請糾正我。我經常是。 – 2010-07-15 11:16:26
@Tom aww,你是對的,我誤解了那部分! – 2010-07-15 11:16:56
@Tom我改變了我的答案。爲注意錯誤而歡呼。 – 2010-07-15 11:25:30