一 问题描述
用户输入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,
点击Finish,新建一个Serlvet,如下图
点击Next,输入如下图
点击Next,如下图
点击Finish,则一个Servlet创建完成。
点击工程名,按下ALT+ENTER,将工程编码方式改成UTF-8,如下图所示
修改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()如下
则无论是IE10、IE11,或是chrome和IE8,新打开TAB页,都不会缓存,重新打开浏览器也不会缓存。
工程如下:
---
转载请注明本文标题和链接:《怎么解决301重定向浏览器缓存问题?》