2009-08-27 45 views
380

我讀到,當你沒有訪問到Web服務器的頭,你可以使用關閉緩存:使用<meta>標籤關閉所有瀏覽器中的緩存?

<meta http-equiv="Cache-Control" content="no-store" /> 

但我也看了,這並不在IE瀏覽器的一些版本。是否有任何一組<meta>標籤會關閉所有瀏覽器中的緩存?

+1

bobince和dpb的答案組合是你最好的選擇。涵蓋所有基地。 – nickf 2009-08-27 13:43:59

+2

http://www.i18nguy.com/markup/metatags.html在這個網站上寫入更好的停用HTTP緩存,以便該網站不存儲在中間服務器上。認爲它可能有助於某人。 – Bodo 2015-05-28 06:25:18

+0

對於那些掙扎着後退按鈕和「重新打開關閉標籤」緩存,因爲我是,從另一個問題看看[這個答案](http://stackoverflow.com/a/19196020/993683)。這是hacky,但沒有基於頭文件的解決方案爲我工作,併爲我的目的這個小的JS片段是偉大的(易於轉換爲普通的JS)。 – JoeRocc 2017-01-31 09:12:53

回答

656

不要一味地複製粘貼這個!

該列表僅僅是不同技術的例子,它不是針對直接 插入。如果被複制,第二個將覆蓋第一個,並且第四個將覆蓋第三個,因爲聲明AND聲明失敗並且W3C驗證程序失敗。每個http-equiv聲明最多可以有一個 ;雜注,緩存控制和 到期。使用現代最新瀏覽器時,這些內容完全過時。無論如何,在IE9之後。如果有的話,Chrome和Firefox特別不能像你所期望的那樣工作。

<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" /> 

其實完全不使用這些!

緩存標頭在meta元素中不可靠;其中之一, 網站和用戶之間的任何網絡代理將完全忽略他們的 。你應該總是使用一個真正的HTTP標頭,例如 Cache-Control和Pragma。

有關正確的信息,請參閱頁面頂部列出的重複項!

+1

第三個標籤在小寫字母中沒有特殊原因嗎? – 2009-10-12 01:25:20

+0

沒有特別的理由。雖然你必須考慮其他的東西,比如你的DOCTYPE聲明,或者使用HTML和XHTML。 – 2009-10-14 05:53:51

+218

更多解釋會很好。爲什麼重複的緩存控制和到期?爲什麼你需要所有這些? 1980年有什麼特別的? pragma之間有什麼區別:no-cache和cache-control:no-cache?更多的解釋會很好。 – 2012-09-10 23:36:46

5

附註是你最好的選擇:

<meta http-equiv="Pragma" content="no-cache"> 
+7

...這是舊的,所以你的建議是,這是因爲在較新的實現中,這通常會被解釋爲緩存頭緩存控制:無緩存。所以實際上你會更好地使用更現代的 2013-09-14 21:53:47

23

它不會在IE5工作,但是這不是一個大問題。

但是,緩存標頭在元素中不可靠;首先,網站和用戶之間的任何網絡代理都會完全忽略它們。你應該總是使用一個真正的HTTP頭來處理諸如Cache-Control和Pragma之類的頭文件。

+0

@bobince,謝謝!如果我對web代理有任何問題,我會記住這一點,但是我的「團隊」使我完全在前端,並且不允許我訪問頭文件。 – leeand00 2009-08-27 14:02:40

+4

即使這是在2009年編寫的,提高IE5兼容性也是無關緊要的。 – 2015-04-09 18:37:30

+12

也不能在IE2中工作,哈哈。 – 2016-07-19 13:03:02

4

當重複相同的服務調用(長輪詢)時,我注意到一些服務調用的緩存問題。添加元數據沒有幫助。一種解決方案是通過timestamp以確保ie認爲它是一個不同的http服務請求。這爲我工作,所以增加一個服務器端腳本代碼片段自動更新此標記不會傷害:

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

+0

這真的是巧妙的工作也在鉻 – Geomorillo 2017-02-06 13:47:58

-2

嘗試使用

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
    <META HTTP-EQUIV="Expires" CONTENT="-1"> 
+6

爲什麼要嘗試它?你可以解釋嗎? – 2015-07-24 19:55:36

+0

一些解釋會很好... – 2017-10-20 06:28:03

+0

它不適用於Chrome。 – 2017-11-05 12:01:57

72

這是一個偉大的案例研究的鏈接對行業內控制緩存的誤解。

http://securityevaluators.com/knowledge/case_studies/caching/

總之,根據本文中,僅Cache-Control: no-store由鉻,Firefox和IE的認可。 IE可以識別其他控件,但Chrome和Firefox不支持。

+2

我發現Chrome對Cache-Control的反應更好:no-cache(之後是100%的條件請求)。 「無存儲」有時從緩存加載,甚至沒有嘗試有條件的請求。 Firefox對「無存儲」做出了更好的響應,但如果您立即重新加載後綴,有時仍會從緩存中加載。真是一團糟! – ianbeks 2016-05-20 12:45:46

相關問題