在JSP叶面里面,引用一张图片 <td><img src="http://localhost/xxxx.bmp" width="800" height="600"></td>
第一次请求的时候,这张图片就会被下载,然后缓存入
 C:\Documents and Settings\adminstrator\Local Settings\Temporary Internet Files
目录,以后访问将不会再从服务器下载在个这图片了!除非这个jsp叶面设置no cache
,只要按照下面的设置,每次都会重新重服务器下载叶面
  <META http-equiv="Content-Language"Content="zh-CN">
  <META http-equiv="Content-Type" content="text/html; charset=GBK">
  <META http-equiv="Content-Script-Type" content="text/javascript">
  <META http-equiv="Content-Style-Type" content="text/css">
  <META http-equiv="Pragma" content="no-cache">
  <META http-equiv="Cache-Control" content="no-cache,no-store,must-revalidate,post-check=0,ptr-check=0">
  <META http-equiv="Expires" content="Sun, 10 Jan 1990 01:01:01 GMT">
<% 
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache,no-store,must-revalidate,post-check=0,ptr-check=0");
response.setHeader("Expires","-1");
%>这是我开始的一个理解啊!可是我昨天测试的时候发现!就算我按照上面的写了!图片也只用下载一次!而并不是我之前理解的,只要设置成no-cache,每次请求都要从服务器重新下载图片!
那到底上面那些no-cache究竟能做些什么事情啊?我都糊涂了阿!有明白的人吗?给我说说啊!谢谢!而我一个Jsp页面什么都不写,没有任何no-cache的语句。我每次请求他都还要从服务器下载一次这个Jsp文件!跟我理解的也不一样!不知道到底是怎么样的!555

解决方案 »

  1.   


    <%
    response.setHeader(”Expires”,”0″);
    response.setHeader(”Cache-Control”,”no-store”);
    response.setHeader(”Pragrma”,”no-cache”);
    response.setDateHeader(”Expires”,0);
    %>
    有些时候这个确实不是很好用,但是有的时候却很管用,呵呵,也找不到相应的解释,如果lz用了apache的话,那么就是apache缓存了图片,如果lz没用apache的话试一试加上下面这句看看<META HTTP-EQUIV="imagetoolbar" CONTENT="no">
      

  2.   

    1 图片你是怎么设置 no-cache的?好神奇啊!
    2 JSP等页面可以通过如下组合实现
    http://www.java2000.net/viewthread.jsp?tid=64953 验证的方法,用Firefox + Firebug 监控 net里面的链接返回情况就知道了。
      

  3.   

    给你一狠招
    <img src="image.jsp?<%=Long.toString(System.currentTimeMillis(), 36)%>">
      

  4.   

    给你一狠招
    <img src="http://localhost/xxxx.bmp?<%=Long.toString(System.currentTimeMillis(), 36)%>" width="800" height="600">
      

  5.   

    忽悠浏览器,使它相信 xxxx.bmp?fi2rcr2d 是个新文件。
    每次访问包含上面这句的 JSP 页时,它都会把一由当前服务器时间转换来的字符串加到图片连接后面,这样每次刷新 JSP 页面,浏览器会看到一个完全不同的图片 URL(只是?后面的不同),当然不会再用缓存内容了,而服务器收到 xxxx.bmp 请求时会忽略 ? 后面的东西。
      

  6.   

    是有LZ说的问题
    我也比较迷惑
    不过我通常的做法
    图片改变了
    将图片名也改变
    将<img src="..."/>这里的路径也改变
      

  7.   

    HTTP 请求类型共有 N 种,其中除了我们常见的 GET 和 POST 外还有 HEAD 等。而 HEAD 请求的作用顾名思义,服务器收到 HEAD 请求后只发回响应头信息而忽略响应体(响应体一般是请求的网页或图片文件内容本身),在响应头中包含了重要的文件最后修改时间等信息,这个时间跟浏览器缓存密切相关。当第二次向同一个 URL 发 HTTP 请求时,浏览器会先向服务器发送 HEAD 请求而非 GET,当得到服务器响应信息(只有带有文件最后修改时间等信息的响应头而没有文件内容)时,浏览器会将此时间和上次请求缓存起来的文件的最后修改时间相比较,如果时间一样说明文件自上次缓存后没有修改过,浏览器会直接将缓存内容显示出来。如果时间不一样才会再次发送 GET 请求获取文件内容。
      

  8.   

    <META http-equiv="Pragma" content="no-cache">
    <META http-equiv="Cache-Control" content="no-cache,no-store,must-revalidate,post-check=0,ptr-check=0">
    上面这些信息是给服务器看的,当请求带上面标签的网页时,服务器会将上面标签中的内容(当然是服务器读取网页文件内容后发现的)以一定形式放到响应头中,当浏览器收到服务器的 HTTP 响应信息时(此响应信息由响应头和响应体两部分组成,响应头中是一些辅助信息例如文件是否应该被缓存文件最后修改时间文件内容类型即MIME等,而响应体为请求的文件内容本身)从响应头中会得知此文件不应作缓存处理,按 HTTP 协议浏览器确实不应该再缓存此文件,但浏览器内部实现千差万别,它完全可以不照做,还是缓存文件,结果你无论如何刷新,显示的始终是缓存内容。当然好的浏览器也会通过分析 HTML 的 META 标签来决定是否应该缓存网页文件,即便响应头中没有说明是否该做缓存处理。
      

  9.   

    那怎么解释
    我一个Jsp页面什么都不写,没有任何no-cache的语句。我每次请求他都还要从服务器下载一次这个Jsp文件!按说这个Jsp文件应该缓存了啊
      

  10.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用 
    楼主【nil2000】截止到2008-06-29 22:54:53的历史汇总数据(不包括此帖): 
    发帖数:60                发帖分:12450              
    结贴数:58                结贴分:12040              
    未结数:2                  未结分:410                
    结贴率:96.67 %            结分率:96.71 %            
    值得尊敬 
    竹子 你这个是怎么做的啊????每个新发的帖子都会自动有一个这个吗? 
    你的程序放在csdn的服务器上?
      

  11.   

    那怎么解释 
    我一个Jsp页面什么都不写,没有任何no-cache的语句。我每次请求他都还要从服务器下载一次这个Jsp文件! 按说这个Jsp文件应该缓存了啊
      

  12.   


    JSP 本质上就是 Servlet,一般第一次请求 JSP 页时,服务器会将 JSP 页解释成一个 Servlet 实现类源代码文件,随后编译此文件,实际上处理你的 HTTP 请求的是这个自动处理得到的 Servlet,而 Servlet 内部会自动处理 no-cache 问题,详细可以看看 Servlet 相关的源代码。
      

  13.   

    那更糊涂了啊!
    JSP页面上,就算显示的写no-cache语句块.
    根据ieHTTPHeaders工具观察,发现访问的时候,静态的图片文件,JS文件,CSS文件仍然会缓存!
    也就是说,只用下载一次,除非删除否则都不用再次下载!是否这样说明no-cache对静态文件根本没用啊?
    而JSP文件无论写不写no-cache语句块,每次访问如果是刷新访问的话都需要重新下载.而且很奇怪的是
    我加上no-cache语句块,然后在浏览器上输入link1回车.然后再输入link2回车.然后在用浏览器上的back按钮
    从link2退回到link1.我理解我用了no-cache块在两个文件里,所以应该不会缓存,tomcat控制台应该输出
    我在link1和link2叶面上写的system.out可是却什么都没输出!
    我实在不知道到底怎么回事!1。到底使用了cache会缓存些什么?(现在测试发现起码no-cache对静态文件根本没用),
    2。在什么情况下会缓存?
    3。在什么情况下不会缓存(现在测试发现起码刷新的话怎么都回去服务器取一次的),
    4。是否缓存就能提高一定的效率?命中率到底如何?no-cache语句块:
    <META http-equiv="Content-Script-Type" content="text/javascript"> 
    <META http-equiv="Content-Style-Type" content="text/css"> 
    <META http-equiv="Pragma" content="no-cache"> 
    <META http-equiv="Cache-Control" content="no-cache,no-store,must- revalidate,post-check=0,ptr-check=0"> 
    <META http-equiv="Expires" content="Sun, 10 Jan 1990 01:01:01 GMT"> 
    <% 
      response.setHeader("Pragma","no-cache"); 
      response.setHeader("Cache-Control","no-cache,no-store,must-revalidate,post-check=0,ptr-check=0"); 
      response.setHeader("Expires","-1"); 
    %>第一次访问/nocacheTest.jsp页面ieHTTPHeaders返回结果:GET /nocacheTest.jsp HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=C92C1AD74A7972C99D6175D2B07575ABHTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Encoding: gzip
    Content-Type: text/html;charset=GBK
    Content-Length: 198                       //下载Jsp文件长度为198
    Date: Sat, 05 Jul 2008 12:49:23 GMTGET /SpringRK/Tree.bmp HTTP/1.1
    Accept: */*
    Referer: http://localhost:8099/SpringRK/gzip.jsp
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=C92C1AD74A7972C99D6175D2B07575ABHTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    ETag: W/"1444854-1214660194000"
    Last-Modified: Sat, 28 Jun 2008 13:36:34 GMT
    Content-Type: image/bmp
    Content-Length: 1444854             //下载 该Jsp上的一个图片link 长度为1444854
    Date: Sat, 05 Jul 2008 12:49:23 GMT
    通过刷新,第二次访问/nocacheTest.jsp页面ieHTTPHeaders返回结果:
    GET /SpringRK/gzip.jsp HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=B921EEDF4D4C88C4D1FFA2C9D403C2C1HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Encoding: gzip
    Content-Type: text/html;charset=GBK
    Content-Length: 198                       //第二次访问仍然需要下载Jsp文件长度为198
    Date: Sat, 05 Jul 2008 12:57:53 GMTGET /SpringRK/Tree.bmp HTTP/1.1
    Accept: */*
    Referer: http://localhost:8099/SpringRK/gzip.jsp
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    If-Modified-Since: Sat, 28 Jun 2008 13:36:34 GMT
    If-None-Match: W/"1444854-1214660194000"
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=B921EEDF4D4C88C4D1FFA2C9D403C2C1HTTP/1.1 304 Not Modified
    Server: Apache-Coyote/1.1
    ETag: W/"1444854-1214660194000"    //第二次访问不在下载图片
    Date: Sat, 05 Jul 2008 12:57:53 GMT
      

  14.   

    那更糊涂了啊!
    JSP页面上,就算显示的写no-cache语句块.
    根据ieHTTPHeaders工具观察,发现访问的时候,静态的图片文件,JS文件,CSS文件仍然会缓存!
    也就是说,只用下载一次,除非删除否则都不用再次下载!是否这样说明no-cache对静态文件根本没用啊?
    而JSP文件无论写不写no-cache语句块,每次访问如果是刷新访问的话都需要重新下载.而且很奇怪的是
    我加上no-cache语句块,然后在浏览器上输入link1回车.然后再输入link2回车.然后在用浏览器上的back按钮
    从link2退回到link1.我理解我用了no-cache块在两个文件里,所以应该不会缓存,tomcat控制台应该输出
    我在link1和link2叶面上写的system.out可是却什么都没输出!
    我实在不知道到底怎么回事!1。到底使用了cache会缓存些什么?(现在测试发现起码no-cache对静态文件根本没用),
    2。在什么情况下会缓存?
    3。在什么情况下不会缓存(现在测试发现起码刷新的话怎么都回去服务器取一次的),
    4。是否缓存就能提高一定的效率?命中率到底如何?no-cache语句块:
    <META http-equiv="Content-Script-Type" content="text/javascript"> 
    <META http-equiv="Content-Style-Type" content="text/css"> 
    <META http-equiv="Pragma" content="no-cache"> 
    <META http-equiv="Cache-Control" content="no-cache,no-store,must- revalidate,post-check=0,ptr-check=0"> 
    <META http-equiv="Expires" content="Sun, 10 Jan 1990 01:01:01 GMT"> 
    <% 
      response.setHeader("Pragma","no-cache"); 
      response.setHeader("Cache-Control","no-cache,no-store,must-revalidate,post-check=0,ptr-check=0"); 
      response.setHeader("Expires","-1"); 
    %>第一次访问/nocacheTest.jsp页面ieHTTPHeaders返回结果:GET /nocacheTest.jsp HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=C92C1AD74A7972C99D6175D2B07575ABHTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Encoding: gzip
    Content-Type: text/html;charset=GBK
    Content-Length: 198                       //下载Jsp文件长度为198
    Date: Sat, 05 Jul 2008 12:49:23 GMTGET /SpringRK/Tree.bmp HTTP/1.1
    Accept: */*
    Referer: http://localhost:8099/SpringRK/gzip.jsp
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=C92C1AD74A7972C99D6175D2B07575ABHTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    ETag: W/"1444854-1214660194000"
    Last-Modified: Sat, 28 Jun 2008 13:36:34 GMT
    Content-Type: image/bmp
    Content-Length: 1444854             //下载 该Jsp上的一个图片link 长度为1444854
    Date: Sat, 05 Jul 2008 12:49:23 GMT
    通过刷新,第二次访问/nocacheTest.jsp页面ieHTTPHeaders返回结果:
    GET /SpringRK/gzip.jsp HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=B921EEDF4D4C88C4D1FFA2C9D403C2C1HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Encoding: gzip
    Content-Type: text/html;charset=GBK
    Content-Length: 198                       //第二次访问仍然需要下载Jsp文件长度为198
    Date: Sat, 05 Jul 2008 12:57:53 GMTGET /SpringRK/Tree.bmp HTTP/1.1
    Accept: */*
    Referer: http://localhost:8099/SpringRK/gzip.jsp
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    If-Modified-Since: Sat, 28 Jun 2008 13:36:34 GMT
    If-None-Match: W/"1444854-1214660194000"
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=B921EEDF4D4C88C4D1FFA2C9D403C2C1HTTP/1.1 304 Not Modified
    Server: Apache-Coyote/1.1
    ETag: W/"1444854-1214660194000"    //第二次访问不在下载图片
    Date: Sat, 05 Jul 2008 12:57:53 GMT
      

  15.   

    那更糊涂了啊!
    JSP页面上,就算显示的写no-cache语句块.
    根据ieHTTPHeaders工具观察,发现访问的时候,静态的图片文件,JS文件,CSS文件仍然会缓存!
    也就是说,只用下载一次,除非删除否则都不用再次下载!是否这样说明no-cache对静态文件根本没用啊?
    而JSP文件无论写不写no-cache语句块,每次访问如果是刷新访问的话都需要重新下载.而且很奇怪的是
    我加上no-cache语句块,然后在浏览器上输入link1回车.然后再输入link2回车.然后在用浏览器上的back按钮
    从link2退回到link1.我理解我用了no-cache块在两个文件里,所以应该不会缓存,tomcat控制台应该输出
    我在link1和link2叶面上写的system.out可是却什么都没输出!
    我实在不知道到底怎么回事!1。到底使用了cache会缓存些什么?(现在测试发现起码no-cache对静态文件根本没用),
    2。在什么情况下会缓存?
    3。在什么情况下不会缓存(现在测试发现起码刷新的话怎么都回去服务器取一次的),
    4。是否缓存就能提高一定的效率?命中率到底如何?no-cache语句块:
    <META http-equiv="Content-Script-Type" content="text/javascript"> 
    <META http-equiv="Content-Style-Type" content="text/css"> 
    <META http-equiv="Pragma" content="no-cache"> 
    <META http-equiv="Cache-Control" content="no-cache,no-store,must- revalidate,post-check=0,ptr-check=0"> 
    <META http-equiv="Expires" content="Sun, 10 Jan 1990 01:01:01 GMT"> 
    <% 
      response.setHeader("Pragma","no-cache"); 
      response.setHeader("Cache-Control","no-cache,no-store,must-revalidate,post-check=0,ptr-check=0"); 
      response.setHeader("Expires","-1"); 
    %>第一次访问/nocacheTest.jsp页面ieHTTPHeaders返回结果:GET /nocacheTest.jsp HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=C92C1AD74A7972C99D6175D2B07575ABHTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Encoding: gzip
    Content-Type: text/html;charset=GBK
    Content-Length: 198                       //下载Jsp文件长度为198
    Date: Sat, 05 Jul 2008 12:49:23 GMTGET /SpringRK/Tree.bmp HTTP/1.1
    Accept: */*
    Referer: http://localhost:8099/SpringRK/gzip.jsp
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=C92C1AD74A7972C99D6175D2B07575ABHTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    ETag: W/"1444854-1214660194000"
    Last-Modified: Sat, 28 Jun 2008 13:36:34 GMT
    Content-Type: image/bmp
    Content-Length: 1444854             //下载 该Jsp上的一个图片link 长度为1444854
    Date: Sat, 05 Jul 2008 12:49:23 GMT
    通过刷新,第二次访问/nocacheTest.jsp页面ieHTTPHeaders返回结果:
    GET /SpringRK/gzip.jsp HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=B921EEDF4D4C88C4D1FFA2C9D403C2C1HTTP/1.1 200 OK
    Server: Apache-Coyote/1.1
    Content-Encoding: gzip
    Content-Type: text/html;charset=GBK
    Content-Length: 198                       //第二次访问仍然需要下载Jsp文件长度为198
    Date: Sat, 05 Jul 2008 12:57:53 GMTGET /SpringRK/Tree.bmp HTTP/1.1
    Accept: */*
    Referer: http://localhost:8099/SpringRK/gzip.jsp
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    If-Modified-Since: Sat, 28 Jun 2008 13:36:34 GMT
    If-None-Match: W/"1444854-1214660194000"
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
    Host: localhost:8099
    Connection: Keep-Alive
    Cookie: JSESSIONID=B921EEDF4D4C88C4D1FFA2C9D403C2C1HTTP/1.1 304 Not Modified
    Server: Apache-Coyote/1.1
    ETag: W/"1444854-1214660194000"    //第二次访问不在下载图片
    Date: Sat, 05 Jul 2008 12:57:53 GMT
      

  16.   

    这个是验证码常见的问题,那个换一张会不变。其实那个
    .img?121fe4u14234加上一个随机的数字,就是让浏览器去再次读取这个图片,至于服务器是否返回 Not Modified 那是你的文件问题,如果他真的改变了,则一定会返回的。一般来说,不建议访问这类会变的内容用.gif这种静态的链接,而应该用.jsp/.do
      

  17.   

    只要有请求的存在,他的数据就是要重新载入的,而cache的作用就是在同一个session下,页面的缓存。。