遇到问题:
page A 提交表单给page B, 然后去到page C. 从page C回到page B的时候, 出现webpage has expired..
原因如下:
1.http头中 cache-control的使用.
指示了浏览器的缓存的使用情况, 我是把缓存都关掉了, 导致从page C返回page B的时候,需要重新submit表单,这是这个问题的起因之一.
改了cache-control以后可以达到后退的时候不重新submit表单,而是从缓存里拿,其他情况重新submit.
2.Redirect After Post.
提交方式是post时但是浏览器有一个机制防止重复提交表单(只针对post),于是在浏览器端会条出来什么网页过期啊,重复提交警告之类的.对此有一个Post/Redirect/Get的设计模式解决:
Page A 把表单Post给Page B, PageB拿到后Redirect用户去Pace C.在Page C显示结果.
从Page C返回的话,会回到Page A.(浏览器不记录PageB,因为对于浏览器来说,他只做了一个Redirect操作).
这样做的好处是不会再去到Page B, 就不会重复提交表单了. 对于严格禁止重复提交表单的操作,使用这个设计模式是很好的选择.
总结如下:
Expires/Cache-Control Header是控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只是Cache-Control比Expires可以控制的多一些, 而且Cache-Control会重写Expires的规则。
解决方案 (任选其一):
1.修改cache-control设置, 并将Expires 设为-1. 看上面的总结一中的博文.jsp可以用response.setHeader("cache-control","private");配合response.setHeader("Expires","-1"); 其他语言类似.
2.将page A里表单提交方式改为get. 如果表单数据不敏感的话,可以使用. 谁叫浏览器只针对post.
3.遵循Post/Redirect/Get的设计模式.
关于cache-control与Expires的理解参照:
http://www.51testing.com/html/28/116228-238337.html