谷歌浏览器 response收到什么样的response就会刷新页面

1179人阅读
JavaScript(7)
有的时候浏览器返回操作我们想刷新页面,从服务器重新获取数据,此时就需要浏览器不将浏览记录保存在缓存中。
1. 设置页面为不缓存,访问上一次页面就需要重新去服务器获取。
&META HTTP-EQUIV=&pragma& CONTENT=&no-cache&&
&META HTTP-EQUIV=&Cache-Control& CONTENT=&no-cache, must-revalidate&&
&META HTTP-EQUIV=&expires& CONTENT=&0&&
if (request.getProtocol().compareTo(&HTTP/1.0&) == 0){
response.setHeader(&Pragma&,&no-cache&);
}else if (request.getProtocol().compareTo(&HTTP/1.1&) == 0){
response.setHeader(&Cache-Control&,&no-cache&);
header(&Cache-Control: no-store, no-cache, must-revalidate&);
header(&Cache-Control: post-check=0, pre-check=0&, false);
header(&Pragma: no-cache&); ASP
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = &no-cache&
Response.AddHeader &Pragma&, &No-Cache&
response.setHeader(&Pragma&,&no-cache&);
response.setHeader(&Cache-Control&,&no-cache&);
response.setDateHeader(&Expires&, 0);
response.setHeader(&Cache-Control&, &no-store&);
%&我在实践中发现,如果只是按照上面的做,当使用浏览器上默认的返回时并不能让浏览器刷新,还需要使用js控制
if(window.name!=&hasLoad&){
location.reload();
window.name = &hasLoad&;
window.name=&&;
由于window.name在浏览器刷新后会仍然保存,所以可以用window.name来判断页面是否已经刷新过.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:28153次
排名:千里之外
原创:32篇
(1)(1)(4)(1)(1)(3)(3)(3)(6)(1)(2)(1)(1)(2)(2)(3)(2)浏览器三种刷新的区别 - CNode技术社区
积分: 2180
这家伙很懒,什么个性签名都没有留下。
本文是新手扫盲,高手勿喷哦~
我们一直在用着浏览器刷新,其实刷新也是有一些小学问的哦,我们常见的三种刷新:
1、url+enter或者a标签的超链接点击
3、ctrl+F5刷新
这三种刷新究竟有何不同呢?举三个简单的例子大家就明白了。
条件:此url路径您已经使用浏览器最近访问过,并没有超过缓存的时间,比如您在前1分钟刚刚访问过此url路径。
1、url+enter或者a标签的超链接点击
哇!一张我梦想座驾三菱EVO X的图片出现了。
我们发现用firebug查看网络请求是灰色的,后面说明此请求来自于缓存,其实此请求并没有发送到后端node.js,而是浏览器直接读取的缓存的数据。这里只需要在 response.setHeader(‘Cache-Control’, ‘public, max-age=3600’); //缓存一小时
还是那个url地址,只不过这次我轻轻的按了下F5哦~
EVO X还是那么帅啊,哈哈。
我们仔细看响应状态码,变成304了,这里浏览器是去请求了后端node.js服务器,同时它带上了2个重要的参数:
1、If-Modified-Since:对应的node.js响应头 Last-Modified
2、If-None-Match:对应的node.js响应头 Etag
当node.js服务器收到这样的http请求后,则去判断是否需要更新客户端的缓存,至于使用 Last-Modified 还是 Etag 来判断缓存是否更新就要看您的node.js服务器代码是怎么写的了。
expressjs是优先判断Etag,至于Etag的值如何获取,也要看您使用的web服务器是怎么获取的,可以是修改时间+文件大小的md5值或者其他。
如果node.js服务器判断 Last-Modified 还是 Etag 后认为此请求资源还在缓存,然后返回 304状态码,和最新的 Last-Modified和Etag。
并且响应头没有“Content-Length”属性,说明响应的body是空的,
浏览器收到304状态码以后,认为资源未被修改,所以就去取缓存响应给用户了。
3、ctrl+F5刷新
强制刷新!
EVO X还是那么霸气!虽然已经停产了!
我们可以仔细看下请求头,没有了第2种情况的2个缓存头,和第一次来访问此url地址是一样的,所以node.js服务器就直接将图片响应给浏览器了,所以这里的151.1KB是这张图片的大小,不使用任何浏览器缓存。
总结发言:
三种刷新的情况相信您已经全看明白了,百分之90%的用户是使用第一或者第二种的,所以缓存技术至关重要。对于一些不经常修改的页面完全可以使用 Cache-Control 让请求都不用发了,节约服务器资源,快速响应。对于一些静态图片等一定要加上 Last-Modified 或者 Etag,因为一般此类资源体积都比较大,缓存做好的话可以提高不少效率。
当然不论是静态文件还是json数据或者是html数据都可以充分的利用浏览器缓存,只要你遵循http协议。
最后广告时间:
大家有时间多关注下node.js的高性能restful框架rrestjs哦。
文章地址:
新手入门:
只是firefox这样?chromium和ie呢?
这个贴不让我回复~ ,囧
浏览器表现不一样
现在才晓得…
今天上午试了下,IE和FF相同,chrome有点小区别,就是第一种情况和第二种情况都是304,总体实现差不多。
试了IE和CHROME,总体和FF表现相同
我习惯都是ctrl+F5的
chrome第一种情况是来自缓存吧
恩,chrome返回的也是304
楼主卖萌很拿手啊。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
服务器赞助商为
,存储赞助商为
,由提供应用性能服务。
新手搭建 Node.js 服务器,推荐使用无需备案的阅读权限10
主题听众积分
百度新人, 积分 6, 距离下一级还需 44 积分
热气球&&&0
baidu浏览器 Response 下载反复刷新的bug
&162 &&& 7
页面用asp.net, 下载通过Response.ContentType,Response.TransmitFile下载动作放在按钮事件里面,发现点击按钮之后,整个页面(包括下载按钮)会被刷几次
ie内核chrome都一样
在IE和chrome浏览器下测试没有这个问题。请解决
222.jpg (21.21 KB, 下载次数: 4)
reponse下载方式弹出的保存框
14:48 上传
111.jpg (37.09 KB, 下载次数: 4)
14:48 上传
阅读权限255
主题听众积分
千币&&&56793
热气球&&&0
很抱歉给亲带来困扰了,木有官网发布了3823版本&&建议升级试试。若没办法升级建议卸载重装下官网版本,链接:
哈喽~各位亲,我是超级版主-小度!为了更好的跟进您的问题,建议您反馈BUG时
留下您的联系方式、操作系统、当前百度浏览器版本号以及IE版本号,在此感谢亲的支持哈!
阅读权限10
主题听众积分
百度新人, 积分 6, 距离下一级还需 44 积分
热气球&&&0
升级最新的没用
这个bug跟用户体验无关,请提交开发人员,在response下载请求后不要再刷新整个页面
阅读权限255
主题听众积分
千币&&&56793
热气球&&&0
升级最新的没用
这个bug跟用户体验无关,请提交开发人员,在response下载请求后不要再刷新整个页面
是否可以描述的通俗点?
哈喽~各位亲,我是超级版主-小度!为了更好的跟进您的问题,建议您反馈BUG时
留下您的联系方式、操作系统、当前百度浏览器版本号以及IE版本号,在此感谢亲的支持哈!
阅读权限10
主题听众积分
百度新人, 积分 6, 距离下一级还需 44 积分
热气球&&&0
以下是.net的下载代码
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.ContentType = RsC
System.Web.HttpContext.Current.Response.AddHeader(&Content-Disposition&, &filename=\&& + FName + &\&;&);
FileInfo FI = new FileInfo(FileName);
System.Web.HttpContext.Current.Response.AddHeader(&Content-Length&, FI.Length.ToString());
System.Web.HttpContext.Current.Response.TransmitFile(FileName);
System.Web.HttpContext.Current.Response.End();
这种下载方式,百度浏览器会多次刷新主页面, 开发人员应该能理解
阅读权限255
主题听众积分
千币&&&56793
热气球&&&0
以下是.net的下载代码
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current ...
已帮助反馈。
哈喽~各位亲,我是超级版主-小度!为了更好的跟进您的问题,建议您反馈BUG时
留下您的联系方式、操作系统、当前百度浏览器版本号以及IE版本号,在此感谢亲的支持哈!
阅读权限10
主题听众积分
百度新人, 积分 6, 距离下一级还需 44 积分
热气球&&&0
算了我用jquery的方式非刷新方式下载了。这个问题目前发现只存在baidu浏览器
阅读权限255
主题听众积分
千币&&&56793
热气球&&&0
算了我用jquery的方式非刷新方式下载了。这个问题目前发现只存在baidu浏览器
这边已提交开发大大确认,谢谢反馈。
哈喽~各位亲,我是超级版主-小度!为了更好的跟进您的问题,建议您反馈BUG时
留下您的联系方式、操作系统、当前百度浏览器版本号以及IE版本号,在此感谢亲的支持哈!
产品尖刀队
【人工授予】参加产品尖刀团并积极参与反馈和体验即可获得!
Powered by【html css js】(29)
【jsp】(10)
的时候浏览器返回操作我们想刷新页面,从服务器重新获取数据,此时就需要浏览器不将浏览记录保存在缓存中。
设置页面为不缓存,访问上一次页面就需要重新去服务器获取。
我在实践中发现,如果只是按照上面的做,当使用浏览器上默认的返回时并不能让浏览器刷新,还需要使用js控制
[javascript]&&
由于window.name在浏览器刷新后会仍然保存,所以可以用window.name来判断页面是否已经刷新过.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:61673次
积分:3190
积分:3190
排名:第8224名
原创:187篇
转载:311篇
评论:54条
(30)(35)(73)(73)(40)(14)(14)(24)(50)(2)(2)(8)(3)(5)(7)(9)(5)(2)(2)(4)(19)(17)(9)(5)(15)(23)(24)> Response_输出数据,实现文件下载,定时刷新页面,是否缓存,重定向,实现验证码
Response_输出数据,实现文件下载,定时刷新页面,是否缓存,重定向,实现验证码
1.Response_输出数据1、Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象. ServletResponse -- 通用的response提供了一个响应应该具有最基本的属性和方法|-HttpServletResponse -- 在ServletResponse的基础上针对于HTTP协议增加了很多强化的属性和方法 2、HttpServletResponse对象封装了向客户端发送响应状态码、响应头、实体数据的方法案例一:向浏览器输出一段数据*response.setContentType(&text/charset=utf-8&);同时设定服务器的字符集编码,浏览器所用的字符集编码。1、用getOutputStream() 获得一个ServletOutputStream 字节流输出数据按字节输出数据,如果输出的数据是表示一段字符的字节数据,则一定要指定浏览器以什么码表解码,浏览器默认用平台码表打开。response.setHeader(&content-type&, &text/charset=utf-8&); //指定浏览器用utf-8解码response.getOutputStream().write(&中国&.getBytes(&utf-8&));//设置服务器用utf-8编码 2、用getWriter()获得一个PrintWriter字符输出流输出数据response对象默认以ISO8859-1将需要输出到浏览器的字符进行编码,如果输出的字符在IOS8859-1中不存在,就会导致乱码问题。可以使用setCharacterEncoding(String charset)方法设置编码用的字符集response.setHeader(&content-type&, &text/charset=utf-8&); //指定浏览器用utf-8解码//response.setCharacterEncoding(&utf-8&); //设置服务器用utf-8编码response.getWriter().write(&中国&);//服务器很智能,setHeader这个头里设置了utf-8,服务器也会按utf-8编码,发给浏览器。 2.response实现文件下载默认请求头和响应头都不能包含中文,包含的字符要属于ISO8859-1里存在的字符,乱码。url编码方式-百分号编码利用这种算法将ascii码中没有的字符转换为ascii码中的有的字符表示的形式 //设置下载文件的名称,设置为“美女.jpg”response.setHeader(&Content-Disposition&,&filename=&+URLEncoder.encode(&美女.jpg&, &utf-8&));FileInputStream fis = newFileInputStream(this.getServletContext().getRealPath(&1.jpg&));OutputStream os = response.getOutputStream();byte[] bs = new byte[1024];int i =0;while((i=fis.read(bs))!=-1){os.write(bs,0,i);}fis.close();3.response实现定时刷新页面1、利用Response设置响应头refresh可以实现页面的定时刷新功能。response.getWriter().write(new Date().toLocaleString());response.setHeader(&Refresh&, &2&); //本页刷新 response.setContentType(&text/charset=utf-8&);response.getWriter().write(&恭喜注册成功,2秒回到主页&); response.setHeader(&Refresh&, &2;url=/day04/index.jsp&); 2、用&meta http-equiv= && content=&&&可以模拟头功能,实现页面刷新,虽然响应头里没有Refresh头&html&&head&&meta http-equiv=&Refresh& content=&2;url=/day04/index.jsp&/&&/head&&body&注册成功啦...2秒回到主页 &br&&/body&&/html&4.控制浏览器是否缓存资源控制浏览器不要缓存当前资源: response.setIntHeader(&Expires&,-1);response.setHeader(&Cache-Control&,&no-cache&);response.setHeader(&Pragma&,&no-cache&); 告诉浏览器缓存这个页面一个月时间:response.setDateHeader(&Expires&, System.currentTimeMillis()+*24*30); //以毫秒为单位,从日0时到当前的毫秒值+一个月的毫秒值5.请求重定向_response注意事项在大部分情况下请求重定向和转发的效果是差不多的,这时候我们推荐使用转发,以减少对服务器的访问。而在某些情况下是需要使用重定向的,目的往往是为了改变浏览器地址栏里的地址(如登录成功后转到主页),和更改刷新操作(如加入商品到购物车后转到购物车页面的操作)//重定向//response.setStatus(302);//response.setHeader(&Location&, &/day04/index.jsp&);或response.sendRedirect(&/day04/index.jsp&);response生成响应注意事项1、同一个response,*getOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一个方法后,就不能再调用另一方法。要注意转发的情况,是同一个请求和响应,只能使用getOutputStream和getWriter其中一种方法。这两个流,缓存的数据会在response的缓冲区里,缓冲区已经定义为字节数据,就不要随便改为字符数据了。//如果在getOutoutStream()后希望使用Writer输出,可以这么做:ServletOutputStream out = response.getOutputStream();//编码要和response.setCharacterEncoding()一致PrintWriter writer = new PrinterWriter(new OutputStreamWriter(out,”utf-8”));//上述使用方式和getWriter()没有区别2、*response中获取的输出流,在service方法结束后服务器会帮我们关闭,所以一般不要自己在Servlet中关闭这个流.6.respons_实现验证码ValiImg.java//告诉浏览器不用缓存该图片response.setDateHeader(&Expires&,-1);response.setHeader(&Cache-Control&, &no-cache&);response.setHeader(&Pragma&,&no-cache& );//随机数private Random r = new Random();private int randNum(int begin,int end){//nextInt(end-begin) 返回0到(end-begin)之间的随机数字return r.nextInt(end-begin)+} regist.html&script type=&text/javascript&&//地址变了就会重新加载图片function changeImg(img){img.src=&/day04/servlet/ValiImg?time=&+new Date().getTime();}&/script&
1.Response_输出数据1、Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象.?ServletResponse -- 通用的response提供了一个...
------分隔线----------------------------
相关阅读排行

我要回帖

更多关于 浏览器自动刷新 的文章

 

随机推荐