HTML的HTTP協(xié)議頭信息中控制著頁面在幾個(gè)地方的緩存信息,包括瀏覽器端,中間緩存服務(wù)器端(如:squid等),Web服務(wù)器端。本文討論頭信息 中帶緩存控制信息的HTML頁面(JSP/Servlet生成好出來的也是HTML頁面)在中間緩存服務(wù)器中的緩存情況。
HTTP協(xié)議中關(guān)于緩存的信息頭關(guān)鍵字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等。
HTTP1.0中通過Pragma 控制頁面緩存,可以設(shè)置:Pragma或no-cache。網(wǎng)上有非常多的文章說明如何控制不讓瀏覽器或中間緩存服務(wù)器緩存頁面,通常設(shè)置的值為no- cache,不過這個(gè)值不這么保險(xiǎn),通常還加上Expires置為0來達(dá)到目的。但是如我們刻意需要瀏覽器或緩存服務(wù)器緩存住我們的頁面這個(gè)值則要設(shè)置為 Pragma。
HTTP1.1中啟用Cache-Control 來控制頁面的緩存與否,這里介紹幾個(gè)常用的參數(shù):
?no-cache,瀏覽器和緩存服務(wù)器都不應(yīng)該緩存頁面信息;
?public,瀏覽器和緩存服務(wù)器都可以緩存頁面信息;
?no-store,請求和響應(yīng)的信息都不應(yīng)該被存儲(chǔ)在對方的磁盤系統(tǒng)中;
?must-revalidate,對于客戶機(jī)的每次請求,代理服務(wù)器必須想服務(wù)器驗(yàn)證緩存是否過時(shí);
Last-Modified只頁面的最后生成時(shí)間,GMT格式;
Expires過時(shí)期限值,GMT格式,指瀏覽器或緩存服務(wù)器在該時(shí)間點(diǎn)后必須從真正的服務(wù)器中獲取新的頁面信息;
上面兩個(gè)值在JSP中設(shè)置值為字符型的GMT格式,無法生效,設(shè)置long類型才生效;
下面是一個(gè)測試?yán)樱?/p>
package com.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletA extends HttpServlet {@Overridepublic void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType( text/html //servlet頁面默認(rèn)是不緩存的//本頁面允許在瀏覽器端或緩存服務(wù)器中緩存,時(shí)限為秒。//秒之內(nèi)重新進(jìn)入該頁面的話不會(huì)進(jìn)入該servlet的java.util.Date date = new java.util.Date(); response.setDateHeader( Last-Modified ,date.getTime()); //Last-Modified:頁面的最后生成時(shí)間 response.setDateHeader( Expires ,date.getTime()+); //Expires:過時(shí)期限值 response.setHeader( Cache-Control , public //Cache-Control來控制頁面的緩存與否,public:瀏覽器和緩存服務(wù)器都可以緩存頁面信息;response.setHeader( Pragma , Pragma //Pragma:設(shè)置頁面是否緩存,為Pragma則緩存,no-cache則不緩存//不允許瀏覽器端或緩存服務(wù)器緩存當(dāng)前頁面信息。/*response.setHeader( Pragma , no-cache ); response.setDateHeader( Expires , ); response.addHeader( Cache-Control , no-cache );//瀏覽器和緩存服務(wù)器都不應(yīng)該緩存頁面信息response.addHeader( Cache-Control , no-store );//請求和響應(yīng)的信息都不應(yīng)該被存儲(chǔ)在對方的磁盤系統(tǒng)中; response.addHeader( Cache-Control , must-revalidate );*///于客戶機(jī)的每次請求,代理服務(wù)器必須想服務(wù)器驗(yàn)證緩存是否過時(shí);System.out.println( 進(jìn)入了servlet response.getWriter().write( 歡迎光臨我的主頁 }
如果需要在html頁面上設(shè)置不緩存,這在 head 標(biāo)簽中加入如下語句:
meta http-equiv= pragma content= no-cache meta http-equiv= cache-control content= no-cache meta http-equiv= expires content=
附:html頁面中meta的作用
meta是用來在HTML文檔中模擬HTTP協(xié)議的響應(yīng)頭報(bào)文。meta 標(biāo)簽用于網(wǎng)頁的 head 與 /head 中,meta 標(biāo)簽的用處很多。meta 的屬性有兩種:name和http-equiv。name屬性主要用于描述網(wǎng)頁,對應(yīng)于content(網(wǎng)頁內(nèi)容),以便于搜索引擎機(jī)器人查找、分類(目前幾乎所有的搜索引擎都使用網(wǎng)上機(jī)器人自動(dòng)查找meta值來給網(wǎng)頁分類)。這其中最重要的是description(站點(diǎn)在搜索引擎上的描述)和keywords(分類關(guān)鍵詞),所以應(yīng)該給每頁加一個(gè)meta值。比較常用的有以下幾個(gè):
name 屬性
1、 meta name= Generator contect= 用以說明生成工具(如Microsoft FrontPage 4.0)等;
2、 meta name= KEYWords contect= 向搜索引擎說明你的網(wǎng)頁的關(guān)鍵詞;
3、 meta name= DEscription contect= 告訴搜索引擎你的站點(diǎn)的主要內(nèi)容;
4、 meta name= Author contect= 你的姓名 告訴搜索引擎你的站點(diǎn)的制作的作者;
5、 meta name= Robots contect= all|none|index|noindex|follow|nofollow
其中的屬性說明如下:
設(shè)定為all:文件將被檢索,且頁面上的鏈接可以被查詢;
設(shè)定為none:文件將不被檢索,且頁面上的鏈接不可以被查詢;
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選