如何防止代理服务器缓存页面?

时间:2022-10-25 19:57:47
有的代理服务器,会将动态生成的页面缓存起来,而这并不是我们所希望的,怎样来防止代理服务器缓存页面。
有一种方法是在链接后加上一个随机的参数,这样,代理服务器会认为是不同的请求,从而解决这个问题,可一个站点,会有很多链接,这样是不是太麻烦了点?
今天上yahoo注册,在填写个人信息页面,他会生成一个图片附加码,拷贝上地址栏的地址,重新开浏览器,发生依然是从yahoo上取的信息,(附加码改变了),而我们并没有改变url,对于代理服务器来说,请求是没有改变的,请问他是如何来实现的?

14 个解决方案

#1


关注......

#2


JSP中可以使用过滤器类来防止这种情况,编写如下Class放到,web-info\classes下,然后在Web.xml中加入以下片断,这样整个网站的网页都不会被缓存了。
  <filter>
  <filter-name>No Caching Filter</filter-name>
  <filter-class>studytest.NoCachingFilter</filter-class>
  </filter>

NoCachingFilter.java

package studytest;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletResponse;

public class NoCachingFilter implements Filter{

  private FilterConfig filterConfig=null;

  public void init(FilterConfig filterConfig){
    this.filterConfig=filterConfig;
  }

  public void destroy(){
    this.filterConfig=null;
  }

  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{
      HttpServletResponse httpResponse=(HttpServletResponse)response;
      httpResponse.setHeader("Cache-Control","no-cache");
      httpResponse.setDateHeader("Expires",0);
      httpResponse.setHeader("Pragma","No-cache");
      chain.doFilter(request,response);
  }
}

#3


呵呵,很不错啊,我以前都是每个文件都写,写死了.这样子就一劳永逸了.:)

#4


这种做法应该只是防止了浏览器的缓存吧!而代理服务器上的依然没有能够处理。

#5


难道没人遇到这个情况吗?

#6


你等等,我周一找些这方面的资料

#7


response.setHeader("Cache-Control", "no-store");

#8


becool(Leopardkissing)你这是禁止浏览器缓存,搂主要得是禁止代理服务器缓存。完全不是一个概念。代理服务器不遵循No-Cache的。

#9


yuanzi (远子),不好意思,我查了一些资料,估计没办法实现你的要求,下面是我找
到的一些说法.翻译过来的意思大概如下

从web站点得到的内容可能在下列三个位置被缓存
1 客户端(浏览器)
2 服务器
3 上述两者之间某个位置(比如代理服务器)

但我们唯一能够"可靠的"控制位置是服务器.


想想看,也的确如此,别人用的代理服务器跟我们
提供服务的服务器关联不是太大,我们怎么能控制它呢.

#10


response.addHeader("pragma","NO-cache");
response.addHeader("Cache-Control","no-cache");
response.addDateHeader("Expries",1);

#11


多谢CoolAbu(程序员跟GF不兼容(★★★★)) ,是啊,代理服务器或其他cache同我们的服务器没有什么关联,是比较难控制!

#12


学下

#13


我现在也碰到这种情况,正烦着呢? 关注!!!!!!

#14


采用了一个笨办法,加了个时间戳,基本解决!

#1


关注......

#2


JSP中可以使用过滤器类来防止这种情况,编写如下Class放到,web-info\classes下,然后在Web.xml中加入以下片断,这样整个网站的网页都不会被缓存了。
  <filter>
  <filter-name>No Caching Filter</filter-name>
  <filter-class>studytest.NoCachingFilter</filter-class>
  </filter>

NoCachingFilter.java

package studytest;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletResponse;

public class NoCachingFilter implements Filter{

  private FilterConfig filterConfig=null;

  public void init(FilterConfig filterConfig){
    this.filterConfig=filterConfig;
  }

  public void destroy(){
    this.filterConfig=null;
  }

  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{
      HttpServletResponse httpResponse=(HttpServletResponse)response;
      httpResponse.setHeader("Cache-Control","no-cache");
      httpResponse.setDateHeader("Expires",0);
      httpResponse.setHeader("Pragma","No-cache");
      chain.doFilter(request,response);
  }
}

#3


呵呵,很不错啊,我以前都是每个文件都写,写死了.这样子就一劳永逸了.:)

#4


这种做法应该只是防止了浏览器的缓存吧!而代理服务器上的依然没有能够处理。

#5


难道没人遇到这个情况吗?

#6


你等等,我周一找些这方面的资料

#7


response.setHeader("Cache-Control", "no-store");

#8


becool(Leopardkissing)你这是禁止浏览器缓存,搂主要得是禁止代理服务器缓存。完全不是一个概念。代理服务器不遵循No-Cache的。

#9


yuanzi (远子),不好意思,我查了一些资料,估计没办法实现你的要求,下面是我找
到的一些说法.翻译过来的意思大概如下

从web站点得到的内容可能在下列三个位置被缓存
1 客户端(浏览器)
2 服务器
3 上述两者之间某个位置(比如代理服务器)

但我们唯一能够"可靠的"控制位置是服务器.


想想看,也的确如此,别人用的代理服务器跟我们
提供服务的服务器关联不是太大,我们怎么能控制它呢.

#10


response.addHeader("pragma","NO-cache");
response.addHeader("Cache-Control","no-cache");
response.addDateHeader("Expries",1);

#11


多谢CoolAbu(程序员跟GF不兼容(★★★★)) ,是啊,代理服务器或其他cache同我们的服务器没有什么关联,是比较难控制!

#12


学下

#13


我现在也碰到这种情况,正烦着呢? 关注!!!!!!

#14


采用了一个笨办法,加了个时间戳,基本解决!