在ASP中不快取頁面面

來源:互聯網
上載者:User
緩衝|頁面|緩衝 Update 1/8/2004
At the top of the page:

<%
pStr = "private, no-cache, must-revalidate"
Response.ExpiresAbsolute = #2000-01-01#
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-control", pStr
%>

--------------------------------------------------------------------------------

Don't allow your page to be cached. Why? You might want to prevent users from seeing old content. Insert the following code in the <HEAD> tag of your document.

<meta http-equiv="Expires" content="Tue, 04-Dec-1993 21:29:02 GMT">

Cache No More (ASP)
by Phil Paxton
(Phil@matchw.com)

Here are the things dealing with the issue of caching in ASP:

1. Response.Expires = 0
2. Response.ExpiresAbsolute = Now() - 1
3. Response.AddHeader "cache-control", "private"
4. Response.AddHeader "pragma", "no-cache"
5. Adding a "cachebuster" by creating a unique URL.

Notes:
#1 is said to expire at 60 seconds, not 0. Also, Khin Zaw (from ActiveServerPages@ and ASPAdvanced@) has posted research from time spent with some IIS internals experts revealing this can be a very touchy parameter to rely upon and usually requires a rather "large" negative number or pedantically, that would be a very small number).

#2 (my own creation) says "expire this page 24 hours ago", allowing for time differences, rather than specify a static date.

#3, #4 from an MS KB article. The code is correct but there are some incorrect statements in the article itself.

n.b. some related KB articles include:
(INFO: Controlling the Caching of Web Pages with IIS 4.0)
(PRB: Browser Doesn't Show Most Recent Versions of htm/asp Files)
(How to Use Pragma: No-cache with IIS and IE)

#5 my term, but not my technique. IE 5.0 can defeat #1-#4 used in conjunction but adding #5 will break it. I usually use something like "?NoCache=Rnd" after a statement. Bill Wilkinson (of Chili!Soft) has proposed an alternate of ?NoCache=Server.URLEncode(Now())".


--------------------------------------------------------------------------------

Another thing to remember: Netscape will continue to cache, even if you turn all caching off. This behavior persisted through 4.5 PR1, PR2, and now in the released version of 4.5.

If you fear you might have to deal with caching later, you might want to build contingencies into your app as you go. Retrofitting #5 throughout even a medium-sized app would take a rather sizeable effort. You could retrofit #1-#4 (inclusive) rather quickly with a single pass through the application, but #5 takes a lot of extra effort. And to that end, I don't ever Response.Redirect anywhere in my code except sample code I post to the lists (then again, the only time I use Response.Write is to the list because I rely on my Utilities-Form.inc library for Display() and HTML()). Everything is Redirect(NewURL) where the Redirect function looks like this:


Function Redirect( NewURL )
'
If Not IsEmpty( NewURL & "" ) Then
Dim QuestionMark
'
QuestionMark = Instr( NewURL, "?" )
'
If QuestionMark = 0 Then
Response.Redirect NewURL & "?" & NoCacheURL()
Response.End
Else
Response.Redirect NEWURL & "&" & NoCacheURL()
Response.End
End If
End If
'
End Function
and NoCacheURL looks like this:


Function NoCacheURL()
'
On Error Resume Next
'
Randomize
' Randomize not needed if you use Now()
'
NoCacheURL = "NoCache=" & Server.URLEncode(rnd)
'
' or NoCacheURL = "NoCache=" & Server.URLEncode(Now())
' per Bill
'
End Function



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.