ROWSER: F5 VS CTRL+F5

本文详细解释了在浏览器中使用F5键和Ctrl+F5键刷新网页时的区别,包括它们如何影响HTTP响应和缓存机制,特别是通过分析HTTP头部信息来阐述动态与静态资源的加载过程。

ROWSER: F5 VS CTRL+F5

11月 30, 2007, 5:05 am 
Filed under:  技术体会

在浏览器里中,按F5键或者点击Toobar上的Refresh/Reload图标(简称F5),和做F5同时按住Ctrl键(简称Ctrl+F5),效果是明显不一样的,通常Ctrl+F5明显要让网页Refresh慢一些,到底两者有什么区别呢?

上一篇技术文章中,说到了Expires、Last-Modified/If-Modified-Since和ETag/If-None-Match这些HTTP Headers,F5/Ctrl+F5和这些有莫大关系。

假如我第一次访问过http://www.example.com,这个网页是个动态网页,每次访问都会去访问Server,但是它包含一个一个静态资源http://www.example.com/logo.gif,浏览器在显示这个网页之前需要发HTTP请求获取这个logo.gif文件,返回的HTTP response包含这样的Headers:

Expires: Thu 27 Nov 2008 07:00:00 GMT 
Last-Modified: Fri 30 Nov 2007 00:00:00 GMT

那么浏览器就会cache住这个logo.gif文件,直到2008年11月27日7点整,或者直到用户有意清空cache。

下次我再通过bookmark或者通过在URI输入栏直接敲字的方法访问http://www.example.com的时候,浏览器一看本地有个logo.gif,而且它还没过期呢,就不会发HTTP request给server,而是直接把本地cache中的logo.gif显示了。

F5的作用和直接在URI输入栏中输入然后回车是不一样的,F5会让浏览器无论如何都发一个HTTP Request给Server,即使先前的Response中有Expires Header。所以,当我在当前http://www.example.com网页中按F5的时候,浏览器会发送一个HTTP Request给Server,但是包含这样的Headers:

If-Modified-Since: Fri 30 Nov 2007 00:00:00 GMT

实际上Server没有修改这个logo.gif文件,所以返回一个304 (Not Modified),这样的Response很小,所以round-trip耗时不多,网页很快就刷新了。

上面的例子中没有考虑ETag,如同在上一篇技术文章中所说,最好就不要用ETag,但是如果Response中包含ETag,F5引发的Http Request中也是会包含If-None-Match的。

那么Ctrl+F5呢? Ctrl+F5要的是彻底的从Server拿一份新的资源过来,所以不光要发送HTTP request给Server,而且这个请求里面连If-Modified-Since/If-None-Match都没有,这样就逼着Server不能返回304,而是把整个资源原原本本地返回一份,这样,Ctrl+F5引发的传输时间变长了,自然网页Refresh的也慢一些。

实际上,为了保证拿到的是从Server上最新的,Ctrl+F5不只是去掉了If-Modified-Since/If-None-Match,还需要添加一些HTTP Headers。按照HTTP/1.1协议,Cache不光只是存在Browser终端,从Browser到Server之间的中间节点(比如Proxy)也可能扮演Cache的作用,为了防止获得的只是这些中间节点的Cache,需要告诉他们,别用自己的Cache敷衍我,往Upstream的节点要一个最新的copy吧。

在IE6中,Ctrl+F5会添加一个Header

Pragma: no-cache

在Firefox 2.0中,Ctrl+F5会添加两个

Pragma: no-cache 
Cache-Control: max-age=0

作用就是让中间的Cache对这个请求失效,这样返回的绝对是新鲜的资源Smile

 Update: 你可能发现在某些浏览器(比如Chrome和IE7/IE8)中行为和此文中描述的不一致, 参看此文

Server commands: [b]rowser, [q]uit server> list_a = [1, 2, 3] Server commands: [b]rowser, [q]uit server> element_b = [4, 5] Server commands: [b]rowser, [q]uit server> list_a.append(element_b) Server commands: [b]rowser, [q]uit server> print(list_a) Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]uit server> Server commands: [b]rowser, [q]
04-03
【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值