怎么解决301重定向浏览器缓存问题? - 慕轲博客-建立自己的个人自媒体博客

心情碎语:等雨停的时候往往雨不会停,等人来的时候往往人不会来。

您的位置:慕轲博客 >PHP建站专题> 怎么解决301重定向浏览器缓存问题?

怎么解决301重定向浏览器缓存问题?

一 问题描述

用户输入http://www.amuker.com,会有默认归属地,假设为北京,当选择为安徽时,会进行301重定向,此时浏览器重定向到http://amuker.com/ah,若此时再切换回北京,浏览器会重定向到http://amuker.com。此时,若用户关闭浏览器,重新打开http://www.amuker.com,应该显示北京,但浏览器重定向到了http://amuker.com/ah

经排查,此现象在IE10,IE11,以及以此为内核的浏览器中存在,在Chrome不存在,判断为浏览器缓存301重定向,导致的问题。

二 重定向

重定向默认为302,若设置为301,则浏览器默认会对该重定向进行缓存,这有可能会带来麻烦。

下面建个例子作为示例,新建一个web工程,命名为redirectTest,

图片1.png 

 

点击Finish,新建一个Serlvet,如下图

图片2.png 

 

点击Next,输入如下图

图片3.png 

点击Next,如下图

图片4.png 

点击Finish,则一个Servlet创建完成。

点击工程名,按下ALT+ENTER,将工程编码方式改成UTF-8,如下图所示

图片5.png 

 

修改RedirectServlet.java的doGet()如下

System.out.println("enter into doGet()!");

// 设置301重定向

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);

response.setHeader("Location", "http://www.baidu.com");

启动工程,启动IE10或IE11,浏览器输入

http://localhost:8080/redirectTest/RedirectSerlvet

可以看到浏览器重定向到http://www.baidu.com,同时控制台输出enter into doGet()!

打开一个新的TAB页,再次请求上面的网址,可以看到浏览器重定向到http://www.baidu.com,同时控制台没有输出,则此时301请求被浏览器缓存。

关闭IE10或IE11,再重新打开,浏览器输入上面的网址,可以看到浏览器重定向到http://www.baidu.com,同时控制台还是没有输出,则此时301请求依然被浏览器缓存。

若是chrome浏览器或IE8,新打开TAB页,浏览器会缓存301请求,关闭浏览器重新打开,则不会缓存。

 

解决方法

修改RedirectServlet.java的doGet()如下

图片6.png 

则无论是IE10、IE11,或是chrome和IE8,新打开TAB页,都不会缓存,重新打开浏览器也不会缓存。

 

工程如下:

图片7.png

redirectTest.rar

---

转载请注明本文标题和链接:《怎么解决301重定向浏览器缓存问题?

发表评论

38 + 61 =
路人甲 表情
Ctrl+Enter快速提交

网友评论(1)

感谢分享
捕鱼游戏 3年前 (2017-03-25) 回复