`

HTTP Cache机制学习(response meta标签)

 
阅读更多
HTTP Cache:response头部设置、http页面meta标签设置

response Http头部设置

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 {
    @Override
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        //servlet页面默认是不缓存的
        //本页面允许在浏览器端或缓存服务器中缓存,时限为20秒。
        //20秒之内重新进入该页面的话不会进入该servlet的
        java.util.Date date = new java.util.Date();    
        response.setDateHeader("Last-Modified",date.getTime()); //Last-Modified:页面的最后生成时间 
        response.setDateHeader("Expires",date.getTime()+20000); //Expires:过时期限值 
        response.setHeader("Cache-Control", "public"); //Cache-Control来控制页面的缓存与否,public:浏览器和缓存服务器都可以缓存页面信息;
        response.setHeader("Pragma", "Pragma"); //Pragma:设置页面是否缓存,为Pragma则缓存,no-cache则不缓存

        //不允许浏览器端或缓存服务器缓存当前页面信息。
        /*response.setHeader( "Pragma", "no-cache" );   
        response.setDateHeader("Expires", 0);   
        response.addHeader( "Cache-Control", "no-cache" );//浏览器和缓存服务器都不应该缓存页面信息
        response.addHeader( "Cache-Control", "no-store" );//请求和响应的信息都不应该被存储在对方的磁盘系统中;    
        response.addHeader( "Cache-Control", "must-revalidate" );*///于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时;

        System.out.println("进入了servlet");
        response.getWriter().write("欢迎光临我的主页");
    }

    
}


html页面中meta设置

meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和keywords(分类关键词),所以应该给每页加一个meta值。

http-equiv属性

1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80">

和 <meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;

又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集;

2、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时间n内,跳转到页面http://yourlink;

3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式;

4、<meta http-equiv="Pragma" contect="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;

5、<meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT">cookie设定,如果网页过期,存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式;

6、<meta http-equiv="Pics-label" contect="">网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的;

7、<meta http-equiv="windows-Target" contect="_top">强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;

8、<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)">和<meta http-equiv="Page-Exit" contect="revealTrans(duration=20,transtion=6)">设定进入和离开页面时的特殊效果,这个功能即FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个frame页面。


当资源第一次被访问的时候,HTTP头部如下

(Request-Line)  GET /a.html HTTP/1.1
Host    127.0.0.1
User-Agent  Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15
Accept              text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language     zh-cn,zh;q=0.5
Accept-Encoding     gzip,deflate
Accept-Charset      gb2312,utf-8;q=0.7,;q=0.7
Keep-Alive          300
Connection          keep-alive

HTTP返回头部如下

(Status-Line)       HTTP/1.1 200 OK
Date                Thu, 26 Nov 2009 13:50:54 GMT
Server              Apache/2.2.11 (Unix) PHP/5.2.9
Last-Modified       Thu, 26 Nov 2009 13:50:19 GMT
Etag                “8fb8b-14-4794674acdcc0″
Accept-Ranges       bytes
Content-Length      20
Keep-Alive          timeout=5, max=100
Connection          Keep-Alive
Content-Type        text/html

当资源第一次被访问的时候,http返回200的状态码,并在头部携带上当前资源的一些描述信息,如

Last-Modified      // 指示最后修改的时间
Etag                // 指示资源的状态唯一标识
Expires             // 指示资源在浏览器缓存中的过期时间

接着浏览器会将文件缓存到Cache目录下,并同时保存文件的上述信息
当第二次请求该文件时,浏览器会先检查Cache目录下是否含有该文件,
如果有,并且还没到Expires设置的时间,即文件还没有过期,那么此时浏览器将直接从Cache目录中读取文件,而不再发送请求
如果文件此时已经过期,则浏览器会发送一次HTTP请求到WebServer,并在头部携带上当前文件的如下信息

If-Modified-Since   Thu, 26 Nov 2009 13:50:19 GMT
If-None-Match       ”8fb8b-14-4794674acdcc0″

即把上一次修改的时间,以及上一次请求返回的Etag值一起发送给服务器。服务器在接收到这个请求的时候,先解析Header里头的信息,然后校验该头部信息。 如果该文件从上次时间到现在都没有过修改或者Etag信息没有变化,则服务端将直接返回一个304的状态,而不再返回文件资源,状态头部如下

(Status-Line)       HTTP/1.1 304 Not Modified
Date                Thu, 26 Nov 2009 14:09:07 GMT
Server              Apache/2.2.11 (Unix) PHP/5.2.9
Connection          Keep-Alive
Keep-Alive          timeout=5, max=100
Etag                “8fb8b-14-4794674acdcc0″

这样,就能够很大程度上减少网络带宽以及提升用户的浏览器体验。 当然,如果服务器经过匹配发现文件修改过了,就会将文件资源返回,并带上新文件状态信息。
基本字段

Pragma
Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。
Expires
文件在本地缓存的过期时间,如果浏览器发现缓存中的文件没有过期,则不发送请求(有例外,后面介绍)
Cache-Control
Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如 下:   
Public指示响应可被任何缓存区缓存。   
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请 求无效。
no-cache指示请求或响应消息不能缓存   
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。   
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。   
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。   
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应 消息。

Etag/If-None-Match
一对验证文件实体的标记 “Entity Tag”的响应/请求头 Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的
Last-Modified/If-Modified-Since
一对验证文件的修改时间的响应/请求头
Expires、Cache-Control、Last-Modified、ETag是RFC 2616(HTTP/1.1)协议中和网页缓存相关的几个字段。 前两个用来控制缓存的失效日期,浏览器可通过它来判定,需不需要发出HTTP请求; 后两个用来验证网页的有效性,服务器端利用它来验证这个文件是否需要重新返回
Last-Modified VS Etag
既然有了Last-Modified,为什么还要用ETag字段呢?因为如果在一秒钟之内对一个文件进行两次更改,Last-Modified就会不正确。因此,HTTP/1.1利用Entity Tag头提供了更加严格的验证。
不同的情况
上面描述的是一个普通的浏览器缓存状态,在实际应用中,如页面跳转(点击页面链接跳转,window.open,在地址栏敲回车,刷新页面)等操作,会有一些区别
普通页面跳转
普通页面跳转包括链接点击跳转,用js脚本打开新页面(window.open) 无缓存情况下,请求会返回所有资源结果 设置Expires并且未过期时,浏览器将不会发出http请求 如果Expires过期,则会发送相应请求,并附带上Last-Modifed等信息,供服务器校验
页面刷新(F5)
这种情况一下,一般会看到很多304的请求,就是说即便资源设置了Expires且未过期,浏览器也会发送相应请求 IE和FF稍有区别 IE:

If-Modified-Since   Wed, 18 Nov 2009 15:54:52 GMT
If-None-Match   ”2360492659″
Pragma: no-cache    // 禁止缓存
FF:
If-Modified-Since   Wed, 18 Nov 2009 15:54:52 GMT
If-None-Match   ”2360492659″
Cache-Control   max-age=0   // 文件立即过期

强制刷新(Ctrl+F5)
效果和无缓存时候一致,返回200的结果




分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    页面的缓存与不缓存设置及html页面中meta的作用

    例如,`meta`标签的`http-equiv`属性可以设置`Pragma`和`Cache-Control`的等效值: ```html &lt;meta http-equiv="Pragma" content="no-cache"&gt; &lt;meta http-equiv="Cache-Control" content="no-cache, no-store, must-...

    JSP清除缓存.txt

    &lt;meta http-equiv="cache-control" content="no-cache"&gt; &lt;meta http-equiv="expires" content="0"&gt; ``` 这些元标签的效果与通过Servlet设置HTTP头部相同。它们会覆盖任何通过HTTP响应头设置的缓存控制指令。 #### ...

    jsp去除浏览器缓存

    这些`&lt;meta&gt;`标签的作用与上面通过`response`对象设置的HTTP响应头相同。 ##### 3. 使用过滤器(Filter) 对于大型项目来说,每个JSP页面都手动添加上述代码可能会显得繁琐。这时可以考虑使用过滤器(Filter)来统一...

    PHP自动跳转 header和Meta以及script各方法

    如果只是简单的定时跳转,可以考虑使用 `&lt;meta&gt;` 标签;而对于需要交互性的跳转,则可以选择 JavaScript。 ### 结论 通过对比分析 PHP 的 `header()` 函数、HTML 的 `&lt;meta&gt;` 标签和 JavaScript 的 `location.href...

    禁用html页面的缓存

    这里的关键在于使用`Response.CacheControl`属性设置为`no-cache`来禁止客户端缓存,并通过`Response.Expires`属性设置为一个较大的负值(如-1000),来确保代理服务器也不会缓存该页面。 #### PHP页面的缓存禁用...

    如何防止IE缓存jsp文件.doc

    - `&lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt;`:等同于设置了`Cache-Control`响应头。 - `&lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt;`:与设置了`Expires`响应头相同。 ### 实现原理及注意事项 1. **...

    HTML,JSP页面缓存的解决方案

    &lt;meta http-equiv="Cache-Control" content="no-cache, must-revalidate"&gt; &lt;meta http-equiv="expires" content="0"&gt; ``` - 这些元信息标签告诉浏览器不要缓存当前页面,而是每次都向服务器发起请求。 2. **URL...

    htm,asp,php,jsp不缓存网页的办法.doc

    在IT领域,网页缓存是浏览器为了提高网页加载速度和减少网络流量消耗而采用的一种机制。然而,在某些情况下,如后台操作或实时更新的大型网站新闻页面,我们需要确保用户每次看到的页面都是最新版本,这就涉及到如何...

    如何防止IE缓存jsp文件

    1, 使用java提供的方法,在jsp或者servlet中都可以 &lt;&#37; response.setHeader(Pragma,No-cache); response.setHeader(Cache-Control,no-...META HTTP-EQUIV=Cache-Control CONTENT=no-cache&gt; &lt;META HTTP-

    jsp和servelet 的学习和使用

    &lt;meta http-equiv="cache-control" content="no-cache"&gt; &lt;meta http-equiv="expires" content="0"&gt; &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt; &lt;meta ...

    IE页面缓存问题jsp及servlet中的设置

    &lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; &lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt; ``` 这里的元信息标签作用与JSP或Servlet中设置的响应头类似,它们告诉浏览器不要缓存页面。但是,由于HTML元...

    简单的servlet增,删,改,查

    meta http-equiv="cache-control" content="no-cache"&gt; &lt;meta http-equiv="expires" content="0"&gt; &lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"&gt; &lt;meta ...

    JSP 页面缓存以及清除缓存

    &lt;meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"&gt; ``` 5. **`Refresh`**:指定页面在多少秒后刷新或重定向到另一个URL。 ```html &lt;meta http-equiv="Refresh" content="5; ...

    jsp 缓存处理

    在HTML `&lt;head&gt;` 标签内使用`&lt;meta&gt;`标签来模拟HTTP响应头,控制浏览器缓存行为: - **name属性**:主要用于描述网页元信息,如`&lt;meta name="Keywords" content=""&gt;`定义关键词,`&lt;meta name="Description" content...

    浏览器缓存

    &lt;meta http-equiv="cache-control" content="no-cache"/&gt; &lt;meta http-equiv="expires" content="0"/&gt; ``` 这些标签分别设置了Pragma、Cache-Control和Expires属性,指示浏览器不要缓存页面。 2. **服务器响应头...

    按IE后退按钮时让JSP不读缓存

    Pragma标签适用于HTTP/1.0,而Cache-Control标签则更适用于HTTP/1.1协议,Expires标签则是设定内容过期的时间。 结合这两种方法,可以在各种版本的浏览器中更有效地防止页面被缓存。然而,需要注意的是,虽然这样...

    Wap技术初级教程、中级教程

    在Wap技术的学习过程中,从初级到中级的过渡意味着我们需要深入理解网络通信的基本原理,尤其是HTTP 1.1协议及其相关优化策略,如缓存和验证机制。以下是对这些知识点的详细阐述: 1. **HTTP 1.1简要介绍** HTTP ...

    北大青鸟第二单元项目

    &lt;meta http-equiv="cache-control" content="no-cache"&gt; &lt;meta http-equiv="expires" content="0"&gt; frameset{width:960px;margin:0px auto;} * //UserBean ub = (UserBean)session.getAttribute(...

    设置ASP.NET页面不被缓存(客户端/服务器端取消缓存方法)

    &lt;meta http-equiv="Cache-Control" content="no-cache"&gt; &lt;meta http-equiv="Pragma" content="no-cache"&gt; ``` 这里的`Expires`标签告诉浏览器页面已经过期,`Cache-Control`和`Pragma`标签共同指示浏览器不存储...

    jsp动态生成验证码

    &lt;META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"&gt; &lt;META HTTP-EQUIV="Expires" CONTENT="0"&gt; ``` ##### 7. 用户验证逻辑 在另一个JSP页面(如`check.jsp`)中,通过比较用户输入的验证码与存储在会话中的...

Global site tag (gtag.js) - Google Analytics