比如注册是当浏览器第一次注册成功后,并进行回退到原注册页面再次修改内容并地二次提交,此时的二次提交的内容是
缓存内容,所以要将缓存内容清空后才能生效,清空缓存的方法:
Using PHP:
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1. header("Pragma: no-cache"); // HTTP 1.0. header("Expires: 0"); // Proxies.
Using Java Servlet, or Node.js:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. response.setHeader("Pragma", "no-cache"); // HTTP 1.0. response.setHeader("Expires", "0"); // Proxies.
Using ASP.NET:
Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0. Response.AppendHeader("Expires", "0"); // Proxies.
Using ASP:
Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate" ' HTTP 1.1. Response.addHeader "Pragma", "no-cache" ' HTTP 1.0. Response.addHeader "Expires", "0" ' Proxies.
Using Ruby on Rails, or Python on Flask:
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1. response.headers["Pragma"] = "no-cache" # HTTP 1.0. response.headers["Expires"] = "0" # Proxies.
Using Google Go:
responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1. responseWriter.Header().Set("Pragma", "no-cache") // HTTP 1.0. responseWriter.Header().Set("Expires", "0") // Proxies.
Using Apache .htaccess
file:
<IfModule mod_headers.c> Header set Cache-Control "no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires 0 </IfModule>
Using HTML4:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" />
HTML meta tags vs HTTP response headers
根据SO上面的说法,
如果通过HTTP访问,HTTP response headers 是优先于 meta tags 的。但
是,第一次打开是通过HTTP访问的,而返回的时候是从本地读取的。
我在自己尝试的时候,发现这两个都需要设置 才能清除页面表单记录。Google浏览器 和 IE11测试通过,页面的记录消除。其他的浏览器未测试。(推测是因为上面的原因)
如果多次测试发现 页面表单的记录还在。
但是可以保证,只要写了HTTP response headers 返回的时候一定会重新请求。
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <% 4 response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 5 response.setHeader("Pragma", "no-cache"); // HTTP 1.0. 6 response.setHeader("Expires", "0"); // Proxies. 7 %> 8 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 9 <html> 10 <head> 11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 12 <title>Insert title here</title> 13 <!-- <meta http-equiv="pragma" content="no-cache"> 14 <meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate" > 15 <meta http-equiv="expires" content="0" > --> 16 </head> 17 <body> 18 <% 19 long token=System.currentTimeMillis(); //产生时间戳的token 20 session.setAttribute("token",token); 21 %> 22 23 <form action="${pageContext.servletContext.contextPath }/formSubmit/submit_.action" method="post"> 24 <input type="text" name="username"/> <br> 25 <input type="text" name="password"/> <br> 26 <input type="hidden" value="${token }" name="reqtoken"/> <br> <!-- 作为hidden提交 --> 27 <input type="submit" value="提交"/> <br> 28 </form> 29 </body> 30 </html>