jsp中如何避免客户端浏览器在刷新时,使用缓存的数据
2011-10-28 16:13
537 查看
在工作中,经常在jsp页面中看到下面类似的一段代码:
那么这段代码的意思是什么呢?作用又是什么呢?且看下面的解释:
代码的前三行的功能都是一样的,只是为了兼容多浏览器而做的处理,都是用来阻止浏览器缓存由jsp或者servlet动态生成的内容。下面是英文原文的解释:
This is used to prevent the browser from caching your dynamic content generated by a JSP or Servlet.
You set this attribute in the HTTP header of the response object which would tell the browser not to cache this content. So everytime you request the page again, the browser would make a new request, instead of showing you a cached page.
使用服务器端控制AJAX页面缓存:
response.setHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-Control", "must-revalidate" );
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.setDateHeader("Expires", 0);
单纯的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")无效。
Cache-Control头域
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
response.setDateHeader("Expires", 0);
expires是response的一个属性
它可以设置页面在浏览器的缓存里保存的时间
超过设定的时间后就过期
过期后再次浏览该页面就需要重新请求服务器发送页面数据
如果在规定的时间内再次访问次页面
就不需从服务器传送 直接从缓存中读取
response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1 response.addHeader("Cache-Control", "no-store"); //Firefox response.setHeader("Pragma", "no-cache"); //HTTP 1.0 response.setDateHeader("Expires", -1); response.setDateHeader("max-age", 0);
那么这段代码的意思是什么呢?作用又是什么呢?且看下面的解释:
代码的前三行的功能都是一样的,只是为了兼容多浏览器而做的处理,都是用来阻止浏览器缓存由jsp或者servlet动态生成的内容。下面是英文原文的解释:
This is used to prevent the browser from caching your dynamic content generated by a JSP or Servlet.
You set this attribute in the HTTP header of the response object which would tell the browser not to cache this content. So everytime you request the page again, the browser would make a new request, instead of showing you a cached page.
使用服务器端控制AJAX页面缓存:
response.setHeader( "Pragma", "no-cache" );
response.addHeader( "Cache-Control", "must-revalidate" );
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.setDateHeader("Expires", 0);
单纯的使用 xmlhttp.setRequestHeader("Cache-Control","no-cache")无效。
Cache-Control头域
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
response.setDateHeader("Expires", 0);
expires是response的一个属性
它可以设置页面在浏览器的缓存里保存的时间
超过设定的时间后就过期
过期后再次浏览该页面就需要重新请求服务器发送页面数据
如果在规定的时间内再次访问次页面
就不需从服务器传送 直接从缓存中读取
相关文章推荐
- jsp中如何避免客户端浏览器在刷新时,使用缓存的数据
- 使用Dojo实现页面不刷新提交数据时避免前台缓存的方法
- 发送异步请求获取数据时,不使用客户端浏览器缓存
- Step1数据系统技术(3.使用浏览器Cache和http状态码304实现的客户端缓存)
- 前端框架Bootstrap的Modal使用Ajax数据源,如何避免数据被缓存
- 如何避免因jsp刷新而重复提交数据
- 使用服务端事件委托机制来防止页面重复提交数据或客户端浏览器使用(F5)刷新提交数据
- 使用ajax时浏览器何时缓存以及如何避免浏览器缓存
- 前端框架Bootstrap的Modal使用Ajax数据源,如何避免数据被缓存
- 如何将频繁使用的内容缓存起来以避免频繁访问磁盘?
- vue使用keep-alive实现数据缓存不刷新
- 如何在点击浏览器前进、后退键时刷新页面而不读取缓存
- 使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
- JSP设计模式基础:View Helper模式——学习如何使用View Helper模式使得Model数据适应表现层的需要(2)
- 使用localStorage解决浏览器刷新后无法再从vuex中获取数据的问题
- 大数据量表中如何有效使用非聚集索引及如何避免使用LEFT JOIN
- Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?
- 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
- 使用TCP协议连续传输大量数据时,是否会丢包,应如何避免
- 禁止客户端的浏览器缓存数据