HTML的HTTP協議頭信息中控制着頁面在幾個地方的緩存信息,包括瀏覽器端,中間緩存服務器端(如:squid等),Web服務器端。本文討論頭信息 中帶緩存控制信息的HTML頁面(JSP/Servlet生成好出來的也是HTML頁面)在中間緩存服務器中的緩存狀況。windows
HTTP協議中關於緩存的信息頭關鍵字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等。瀏覽器
HTTP1.0中經過Pragma 控制頁面緩存,能夠設置:Pragma或no-cache。網上有很是多的文章說明如何控制不讓瀏覽器或中間緩存服務器緩存頁面,一般設置的值爲no- cache,不過這個值不這麼保險,一般還加上Expires置爲0來達到目的。可是如咱們刻意須要瀏覽器或緩存服務器緩存住咱們的頁面這個值則要設置爲 Pragma。緩存
HTTP1.1中啓用Cache-Control 來控制頁面的緩存與否,這裏介紹幾個經常使用的參數:服務器
- no-cache,瀏覽器和緩存服務器都不該該緩存頁面信息;
- public,瀏覽器和緩存服務器均可以緩存頁面信息;
- no-store,請求和響應的信息都不該該被存儲在對方的磁盤系統中;
- must-revalidate,對於客戶機的每次請求,代理服務器必須想服務器驗證緩存是否過期;
Last-Modified只頁面的最後生成時間,GMT格式;cookie
Expires過期期限值,GMT格式,指瀏覽器或緩存服務器在該時間點後必須從真正的服務器中獲取新的頁面信息;ide
上面兩個值在JSP中設置值爲字符型的GMT格式,沒法生效,設置long類型才生效;工具
下面是一個測試例子:post
1 package com.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 public class ServletA extends HttpServlet { 12 @Override 13 public void service(HttpServletRequest request, HttpServletResponse response) 14 throws ServletException, IOException { 15 response.setContentType("text/html"); 16 //servlet頁面默認是不緩存的 17 //本頁面容許在瀏覽器端或緩存服務器中緩存,時限爲20秒。 18 //20秒以內從新進入該頁面的話不會進入該servlet的 19 java.util.Date date = new java.util.Date(); 20 response.setDateHeader("Last-Modified",date.getTime()); //Last-Modified:頁面的最後生成時間 21 response.setDateHeader("Expires",date.getTime()+20000); //Expires:過期期限值 22 response.setHeader("Cache-Control", "public"); //Cache-Control來控制頁面的緩存與否,public:瀏覽器和緩存服務器均可以緩存頁面信息; 23 response.setHeader("Pragma", "Pragma"); //Pragma:設置頁面是否緩存,爲Pragma則緩存,no-cache則不緩存 24 25 //不容許瀏覽器端或緩存服務器緩存當前頁面信息。 26 /*response.setHeader( "Pragma", "no-cache" ); 27 response.setDateHeader("Expires", 0); 28 response.addHeader( "Cache-Control", "no-cache" );//瀏覽器和緩存服務器都不該該緩存頁面信息 29 response.addHeader( "Cache-Control", "no-store" );//請求和響應的信息都不該該被存儲在對方的磁盤系統中; 30 response.addHeader( "Cache-Control", "must-revalidate" );*///於客戶機的每次請求,代理服務器必須想服務器驗證緩存是否過期; 31 32 System.out.println("進入了servlet"); 33 response.getWriter().write("歡迎光臨個人主頁"); 34 } 35 36 37 }
若是須要在html頁面上設置不緩存,這在<head>標籤中加入以下語句:
1 <meta http-equiv="pragma" content="no-cache"> 2 <meta http-equiv="cache-control" content="no-cache"> 3 <meta http-equiv="expires" content="0">
附:html頁面中meta的做用
meta是用來在HTML文檔中模擬HTTP協議的響應頭報文。meta 標籤用於網頁的<head>與</head>中,meta 標籤的用處不少。meta 的屬性有兩種:name和http-equiv。name屬性主要用於描述網頁,對應於content(網頁內容),以便於搜索引擎機器人查找、分類(目前幾乎全部的搜索引擎都使用網上機器人自動查找meta值來給網頁分類)。這其中最重要的是description(站點在搜索引擎上的描述)和keywords(分類關鍵詞),因此應該給每頁加一個meta值。比較經常使用的有如下幾個:
name 屬性
一、<meta name="Generator" contect="">用以說明生成工具(如Microsoft FrontPage 4.0)等;
二、<meta name="KEYWords" contect="">向搜索引擎說明你的網頁的關鍵詞;
三、<meta name="DEscription" contect="">告訴搜索引擎你的站點的主要內容;
四、<meta name="Author" contect="你的姓名">告訴搜索引擎你的站點的製做的做者;
五、<meta name="Robots" contect= "all|none|index|noindex|follow|nofollow">
其中的屬性說明以下:
設定爲all:文件將被檢索,且頁面上的連接能夠被查詢;
設定爲none:文件將不被檢索,且頁面上的連接不能夠被查詢;
設定爲index:文件將被檢索;
設定爲follow:頁面上的連接能夠被查詢;
設定爲noindex:文件將不被檢索,但頁面上的連接能夠被查詢;
設定爲nofollow:文件將不被檢索,頁面上的連接能夠被查詢。
http-equiv屬性
一、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80">
和 <meta http-equiv="Content-Language" contect="zh-CN">用以說明主頁製做所使用的文字以及語言;
又如英文是ISO-8859-1字符集,還有BIG五、utf-八、shift-Jis、Euc、Koi8-2等字符集;
二、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定時讓網頁在指定的時間n內,跳轉到頁面http://yourlink;
三、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">能夠用於設定網頁的到期時間,一旦過時則必須到服務器上從新調用。須要注意的是必須使用GMT時間格式;
四、<meta http-equiv="Pragma" contect="no-cache">是用於設定禁止瀏覽器從本地機的緩存中調閱頁面內容,設定後一旦離開網頁就沒法從Cache中再調出;
五、<meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT">cookie設定,若是網頁過時,存盤的cookie將被刪除。須要注意的也是必須使用GMT時間格式;
六、<meta http-equiv="Pics-label" contect="">網頁等級評定,在IE的internet選項中有一項內容設置,能夠防止瀏覽一些受限制的網站,而網站的限制級別就是經過meta屬性來設置的;
七、<meta http-equiv="windows-Target" contect="_top">強制頁面在當前窗口中以獨立頁面顯示,能夠防止本身的網頁被別人看成一個frame頁調用;
八、<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)">和<meta http-equiv="Page-Exit" contect="revealTrans(duration=20,transtion=6)">設定進入和離開頁面時的特殊效果,這個功能即FrontPage中的「格式/網頁過渡」,不過所加的頁面不可以是一個frame頁面。