有一种方法是在链接后加上一个随机的参数,这样,代理服务器会认为是不同的请求,从而解决这个问题,可一个站点,会有很多链接,这样是不是太麻烦了点?
今天上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);
}
}
<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 上述两者之间某个位置(比如代理服务器)
但我们唯一能够"可靠的"控制位置是服务器.
想想看,也的确如此,别人用的代理服务器跟我们
提供服务的服务器关联不是太大,我们怎么能控制它呢.
到的一些说法.翻译过来的意思大概如下
从web站点得到的内容可能在下列三个位置被缓存
1 客户端(浏览器)
2 服务器
3 上述两者之间某个位置(比如代理服务器)
但我们唯一能够"可靠的"控制位置是服务器.
想想看,也的确如此,别人用的代理服务器跟我们
提供服务的服务器关联不是太大,我们怎么能控制它呢.
#10
response.addHeader("pragma","NO-cache");
response.addHeader("Cache-Control","no-cache");
response.addDateHeader("Expries",1);
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);
}
}
<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 上述两者之间某个位置(比如代理服务器)
但我们唯一能够"可靠的"控制位置是服务器.
想想看,也的确如此,别人用的代理服务器跟我们
提供服务的服务器关联不是太大,我们怎么能控制它呢.
到的一些说法.翻译过来的意思大概如下
从web站点得到的内容可能在下列三个位置被缓存
1 客户端(浏览器)
2 服务器
3 上述两者之间某个位置(比如代理服务器)
但我们唯一能够"可靠的"控制位置是服务器.
想想看,也的确如此,别人用的代理服务器跟我们
提供服务的服务器关联不是太大,我们怎么能控制它呢.
#10
response.addHeader("pragma","NO-cache");
response.addHeader("Cache-Control","no-cache");
response.addDateHeader("Expries",1);
response.addHeader("Cache-Control","no-cache");
response.addDateHeader("Expries",1);
#11
多谢CoolAbu(程序员跟GF不兼容(★★★★)) ,是啊,代理服务器或其他cache同我们的服务器没有什么关联,是比较难控制!
#12
学下
#13
我现在也碰到这种情况,正烦着呢? 关注!!!!!!
#14
采用了一个笨办法,加了个时间戳,基本解决!