2017-03-16 93 views
0

發生意外,並且某個HTML頁面被設置爲由瀏覽器緩存。我們不想更改該網頁的網址,因爲其他各方都依賴該網址(包括SEO)。如何強制瀏覽器重新加載緩存的URL而不更改URL

有沒有辦法讓儘可能多的客戶端重新加載該頁面?客戶經常在網站上瀏覽時訪問該頁面,所以我們經常能夠在他們遇到問題頁面之前向他們發送一些新的JavaScript(或任何其他資源)。也許有一個JavaScript技巧來強制重新加載?!

+1

從服務器發送頁面時,您可以設置'緩存控制'標題,檢查出這個答案(http://stackoverflow.com/questions/49547/how-to-control-web-page-緩存 - 所有瀏覽器)列出瞭如何做到這一點。我不知道如何強制人們刪除緩存,如果它已被緩存但 – George

回答

2

代碼片斷下面將失效與URI相同頁面的緩存條目uriOfCachedPage

var xhr = new XMLHttpRequest(); 
xhr.open("GET", uriOfCachedPage, true); 
xhr.setRequestHeader("Cache-Control", "max-age=0"); 
xhr.send(); 

您需要將此代碼注入到用戶可能會獲得的腳本或HTML頁面中。

欲瞭解更多信息,請參閱MDN上的XMLHttpRequest頁和RFC 7232超文本傳輸​​協議(HTTP/1.1)中的Request Cache-Control Directives部分:緩存。

您還可以在cookie或localStorage中存儲cachedPageReloaded標誌,並且只有在之前未使其無效時才使緩存條目無效。在MDN上檢查Document.cookieWindow.localStorage頁面。

-1

您可以添加時間戳在您的網址的結尾查詢字符串:

var url = "http://yoursite.com/your.html?r=" + (new Date()).getTime(); 

您可以調用沒有cache選項不更改URL AJAX請求,並沒有刷新頁面或者:

$.ajax({ 
     url: "your.html", 
     cache: false, //<== don't cache! 
     type: "GET", 
     dataType: "json", 
     success: function(data, textStatus) { 
         $("#body").html(data); 
       } 
    }); 

尋找JavaScript解決方案?

window.location.reload(true); 

Full HTML solution

<meta http-equiv="cache-control" content="max-age=0" /> 
<meta http-equiv="cache-control" content="no-cache" /> 
<meta http-equiv="expires" content="0" /> 
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 
<meta http-equiv="pragma" content="no-cache" /> 
從服務器端添加這些頭

Furher閱讀:https://stackoverflow.com/a/2068407/3958365

+0

這將改變我們不能做的頁面的URL。 – boot4life

+0

哪一個?有4種不同的解決方案... – ErTR

+1

不知道這裏發生了什麼。我真的沒有看到其他人嗎?!當我評論時,我很確定他們不在那裏。無論如何,只有AJAX才能工作,因爲緩存實際上我無法將JS或元標記傳遞到該頁面。順便說一句,我沒有倒下。 – boot4life

相關問題