UrlRewriter 缓存文件难题及1系列的有关探寻

2021-01-20 21:39 jianzhan

在开发设计1个网站作用时,因为session 缓存文件不可以立即消除。刚开始了1系列的探寻。

现寻找几篇非常好的文章内容。

最先是 F5和 CTRL+F5的差别

F5和CTRL+F5的差别
(留给较为懒的人 :F5是优先选择载入缓存文件但架构内写保护取当地缓存文件 。CTRL+F5进行1次新的恳求,绕过缓存文件)

情况

我司的网站是架构构造的,1个网页页面里有好几个iframe.正由于这个缘故,每次当我自信满满的把改动过的JS文档递交到SVN上后,没过量久,某个 后台管理程序流程员就会来找我说:如何JS还出错呢,我早已CTRL+F5了啊,你递交对了吗.我只好到他坐位上拿起电脑鼠标开展实际操作:右键->本帧-> 在新标识中开启新帧->CTRL+F5->切换到原标识->F5.这1番实际操作以后,终究对了.一样的事儿早已产生过许多次了.这也证实 了很多程序流程员朋友還是不足掌握访问器的缓存文件体制.

基本专业知识

难题的压根缘故便是,在火狐里,CTRL+F5消除不上架构网页页面的缓存文件.包含架构网页页面自身和其全部的嵌入元素(.js,.css,.jpg等).因此本文的真实题目是"Firefox中怎样才可以绕过缓存文件更新架构内的网页页面".最先我要讲1下有关的基本专业知识.

1.载入缓存文件

搞WEB开发设计的常常会说:有缓存文件,CTRL+F51下.或:有缓存文件,CTRL+SHIFT+DEL清1下.那末你了解访问器有几种方法来载入缓存文件文档吗.从是不是推送了HTTP恳求来区别,我觉的能够分两种:

1.访问器从服务器回到的到期時间分辨得出,该文档都还没到期,因此立即从缓存文件文档夹载入缓存文件文档,显示信息网页页面,并沒有走任何互联网联接.

2.访问器推送HTTP恳求,恳求头中包括了If-Modified-Since 和 If-None-Match字段.让服务器来分辨是不是应当载入缓存文件文档.假如服务器回到304回应,无回应实体线,表明服务器觉得这个文档沒有转变.可使 用缓存文件中的对应文档,这时候访问器才会载入缓存文件.(假如不上解HTTP,能够买本<<HTTP权威性指南>>看看.或立即RFC2616)

我把第1种载入缓存文件的方法称之为"无恳求载入缓存文件",第2种方法称之为"无改动载入缓存文件".

2.更新方法

这里的更新方法是指能根据哪些方法让1个网页页面再次载入,我从主要表现上大约分了3种:

1.最常见的,点一下访问器的更新按钮,或按下F5

2.CTRL+F5,作用是绕过缓存文件更新

3.访问器详细地址栏上回车,IE里把这类恳求方法归为"导航栏"实际操作

在载入缓存文件层面,这3种更新方法的主要表现都不1样.第3种方法的主要表现一般是只更新首页面文档,别的嵌入文档所有"无恳求载入缓存文件".绝大多数开发设计者都不容易这么更新网页页面,因此本次实验不比照这类更新方法.

3.F5和CTRL+F5的差别

本文的实验一部分只对于F5和CTRL+F5两种更新方法做比照.这里讲1下为何F5不可以绕过缓存文件,然后者能够.回答便是推送的恳求头不1样.并且不一样的访问器推送的恳求头也是有1些差别.

1.F5开启的HTTP恳求的恳求头中一般包括了If-Modified-Since 或 If-None-Match字段,或二者兼有.假如服务器觉得被恳求的文档沒有产生转变,则回到304回应,也就沒有绕过缓存文件.

2.CTRL+F5开启的HTTP恳求的恳求头中沒有上面的那两个头,却有Pragma: no-cache 或 Cache-Control: no-cache 字段,或二者兼有.服务器看到no-cache这样的值就会把全新的文档回应以往.也就绕过了缓存文件.

实验比照

实验题型为:应用F5和CTRL+F5在包括iframe的网页页面勤奋行更新实际操作,5大访问器各有的主要表现不一样.本次实验应用Fiddler监测互联网恳求,并且不考虑到缓存文件有关的HTTP回应头的危害.

首页面index.html源代码为

拷贝编码
编码以下:

<!DOCTYPE
HTML>
<html>
<head>
<meta charset="utf⑻" />
</head>
<body>
<iframe src="frame.html"></iframe>
<img src="index.jpg" />
<script src="index.js"></script>
</body>
</html>

架构网页页面frame.html源代码为

拷贝编码
编码以下:

<!DOCTYPE
HTML>
<html>
<head>
<meta charset="utf⑻" />
</head>
<body>
<img src="frame.jpg" />
<script src="frame.js"></script>
</body>
</html>

1.IE 9

编号1⑹的恳求为F5的实际操作,编号7⑴2的恳求为CTRL+F5的实际操作.可见,在IE下,应用CTRL+F5能让首页面和架构网页页面的全部資源文档都绕过缓存文件.

2.Firefox 18

编号1⑹的恳求为F5的实际操作,编号7⑼的恳求为CTRL+F5的实际操作.可见,在Firefox下,应用CTRL+F5只能让首页面及其資源文档绕过缓存文件,而架构网页页面及其資源文档彻底"无恳求载入缓存文件".

3.chrome 22

编号1⑸的恳求为F5的实际操作,编号7⑼的恳求为CTRL+F5的实际操作.可见,在Chrome下,和Firefox相近,应用CTRL+F5只能 让首页面及其資源文档绕过缓存文件,而架构网页页面及其資源文档彻底"无恳求载入缓存文件".诡异的是,假如在当今网页页面按过1次CTRL+F5,则每次在该网页页面按下 F5的情况下,首页面的HTTP恳求中都会添加1个Pragma: no-cache恳求头,也便是说,访问器会记忆力.编号1的恳求便是这类状况.更诡异的是,F5实际操作下,frame.html自始至终是"无恳求载入缓存文件", 这和别的访问器主要表现不1样.更不便的是,chrome不可以用右键把架构网页页面提出来.

4.Opera 12.50

编号1⑹的恳求为F5的实际操作,编号7⑴2的恳求为CTRL+F5的实际操作.可见,在Opera下,主要表现更为不1样.即便只按F5,首页面的恳求 (编号1)也是有Pragma: no-cache恳求头,CTRL+F5下,除架构网页页面自身(编号8),全部的資源文档都绕过了缓存文件.这1点较为贴近IE

5.Safari

编号1⑸的恳求为F5的实际操作,Safari不适用CTRL+F5.和Opera相近.F5会让首页面的恳求(编号1)中包括Pragma: no-cache恳求头.既然不适用绕过缓存文件,那末无论是否架构网页页面,在Safari中只能点菜单消除缓存文件了.

处理方法

依据以上比照能够看出,仅有IE访问器的主要表现是大家要想的.这里得出Firefox下的处理方法.

1.安裝拓展
//img.jbzj.com/file_images/article/201301/20092/ReloadPassCache_jb51.rar
2.安裝UC脚本制作
//img.jbzj.com/file_images/article/201301/20092/ReloadPassCache.uc.js

UC脚本制作是技术专业的火狐玩家应用的,这里顺带讲1下我是怎样完成这个作用的.有兴趣爱好玩火狐脚本制作的能够看1下.确实看不懂能够绕过.

拷贝编码
编码以下:

//在访问器主对话框关联keydown恶性事件
location
== "chrome://browser/content/browser.xul" &&
addEventListener("keydown",
function (event)
{
//假如按下了CTRL+F5
if (event.which
=== 116 && event.ctrlKey) {
//阻拦冒泡和默认设置实际操作,关键是阻拦默认设置的更新姿势.不然会刷两次
event.preventDefault();
event.stopPropagation();
(function (content)
{
//为当今标识绑上DOMContentLoaded恶性事件,在首页面DOM载入进行后,更新各个架构
gBrowser.mCurrentBrowser.addEventListener("DOMContentLoaded",
function self()
{
//解绑DOMContentLoaded恶性事件
this.removeEventListener("DOMContentLoaded",
self, false);
//遍历更新全部架构
Array.prototype.slice.call(content.frames).forEach(function (win)
{
//绕过缓存文件更新
win.location.reload(true);
})
},
false);
//刚开始更新首页面
content.location.reload(true);
})(content)
}
//捕捉方式,第1時间开启恶性事件解决涵数.
},
true)

安裝该拓展后,按下CTRL+F5能像IE1样,让全部的架构网页页面统统绕过缓存文件更新.至于多层架构(架构中的架构),这个拓展不可用,我觉的各位程序流程员不容易那末不幸.

UrlReriter

甚么是伪静态数据? 1.是根据正则表达式投射把本是动态性的网页页面转成

看起来

是静态数据的网页页面

为何用伪静态数据? 1.访问器不收录带'?' url 2.开启1个网页页面后(url 彻底同样),再度开启会很快。由于变换网页页面是在运行内存中进行的,假如再度开启同1个网页页面,就不容易再变换,而是立即在运行内存中载入。如今每转1个网页页面都换 url, 运行内存应用状况,自身考虑到1下。。 3.cup 資源占有少(参照上1条) 4.看起来较为统1,能掩藏开发设计应用的語言甚么状况下应用伪静态数据? 1.小型网站和非常在乎访问器收录的网站才应用(內容不常常换,又期待他人根据 检索模块能寻找) 2.门户网网站挑选性的用,小区能无需就无需