在开发一个网站功能时,由于session 缓存不能及时清除。开始了一系列的探索。
现找到几篇不错的文章。
首先是 F5和 CTRL+F5的区别(留给比较懒的人 :F5是优先读取缓存但框架内只读取本地缓存 。CTRL+F5发起一次新的请求,跳过缓存)
我司的网站是框架结构的,一个页面里有多个iframe.正因为这个原因,每次当我自信满满的把修改过的JS文件提交到SVN上后,没过多久,某个 后台程序员就会来找我说:怎么JS还报错呢,我已经CTRL+F5了啊,你提交对了吗.我只好到他座位上拿起鼠标进行操作:右键->本帧-> 在新标签中打开新帧->CTRL+F5->切换到原标签->F5.这一番操作之后,终于对了.同样的事情已经发生过很多次了.这也证明 了不少程序员同志还是不够了解浏览器的缓存机制.
基础知识问题的根本原因就是,在火狐里,CTRL+F5清除不了框架页面的缓存.包括框架页面本身和其所有的嵌入元素(.js,.css,.jpg等).所以本文的真正标题是"Firefox中如何才能跳过缓存刷新框架内的页面".首先我要讲一下相关的基础知识.
一.读取缓存
搞WEB开发的经常会说:有缓存,CTRL+F5一下.或者:有缓存,CTRL+SHIFT+DEL清一下.那么你知道浏览器有几种方式来读取缓存文件吗.从是否发送了HTTP请求来区分,我觉的可以分两种:
1.浏览器从服务器返回的过期时间判断得出,该文件还没有过期,所以直接从缓存文件夹读取缓存文件,显示网页,并没有走任何网络连接.
2.浏览器发送HTTP请求,请求头中包含了If-Modified-Since 和 If-None-Match字段.让服务器来判断是否应该读取缓存文件.如果服务器返回304响应,无响应实体,表示服务器认为这个文件没有变化.可以使 用缓存中的对应文件,这时浏览器才会读取缓存.(如果不了解HTTP,可以买本<<HTTP权威指南>>看看.或者直接RFC2616)
我把第一种读取缓存的方式称之为"无请求读取缓存",第二种方式称之为"无修改读取缓存".
二.刷新方式
这里的刷新方式是指能通过哪些方式让一个网页重新加载,我从表现上大概分了三种:
1.最常用的,点击浏览器的刷新按钮,或者按下F5
2.CTRL+F5,功能是跳过缓存刷新
3.浏览器地址栏上回车,IE里把这种请求方式归为"导航"操作
在读取缓存方面,这三种刷新方式的表现都不一样.第三种方式的表现通常是只刷新主页面文件,其他内嵌文件全部"无请求读取缓存".大部分开发者都不会这么刷新页面,所以本次试验不对比这种刷新方式.
三.F5和CTRL+F5的区别
本文的试验部分只针对F5和CTRL+F5两种刷新方式做对比.这里讲一下为什么F5不能跳过缓存,而后者可以.答案就是发送的请求头不一样.而且不同的浏览器发送的请求头也有一些区别.
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的页面上进行刷新操作,五大浏览器各自的表现不同.本次试验使用Fiddler监测网络请求,而且不考虑缓存相关的HTTP响应头的影响.
主页面index.html源码为
- JavaScript String(字符串)对象 实例
- length属性
- indexOf(),lastIndexOf()
- replace()
- match()
- toUpperCase(),toLowCase()
<body>
<script type="text/javascript">
var txt="Hello World!"
//输出字符串的长度
document.write(txt.length)
</script>
</body>
</html>
<body>
<script language="javascript">
var txt="Hello world!";
// indexOf(),lastIndexOf() 来定位字符串中某一个指定的字符首次出现的位置
//若不存在则返回“-1”
document.write(txt+"<br>");
document.write("该字符串的长度为:"+txt.length+" <br>");
document.write("从前往后找,第一位字符'l'它的索引位置为:"+txt.indexOf('l'+"<br>"));
document.write("从后往前查,第一个字符'l'它的索引位置为:"+txt.lastIndexOf('l')+"<br>");
</script>
</body>
</html>
<body>
<h3>replace(要替换内容,替换成的内容)</h3>
<script language="javascript">
var txt
最近学习apache+tomcat将网络上、书上和API上看到进行了一下整理,做了个小测试,算做入门学习总结吧,具体内容如下:
1、准备下载需要的文件。这里假定你已经正确安装配置好了JDK。
例如:chmod 777 jdk-6u37-linux-i586.bin
./jdk-6u37-linux-i586.bin 安装jdk
mv 命令移动到指定路径下
配置环境变量
root用户,编辑 etc/profile文件,修改JAVA_HOME路径如下
#Java environment
export JAVA_HOME=/usr/local/jdk1.6.0_37
export CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jre
并使之生效,执行
source /etc/profile
到Apache官方网站下载所需要的文件:
httpd-2.4.3.tar.gz
apache-tomcat-6.0.36.tar.gz
tomcat-connectors-1.2.37-src.tar.gz
其中httpd和jakarta-tomcat-connectors为源码包,apache-tomcat为二进制包。
2、安装apache代码:
# tar zxvf httpd-2.4.3.tar.gz
# cd httpd-2.4.3
# ./configure --prefix=/usr/local/apache2
# make
# make install
# ln -s /usr/local/apache2/ apache
备注1:安装过程中提示需要gcc支持,解决方法如下
yum -y install gcc
yum -y install gcc-c++
备注2:安装过程中提示提示APR not found 解决方法如下
下载apr安装包:
http://apache.etoak.com//apr/apr-1.4.6.tar.gz
tar zxvf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure --prefix=/usr/local/apr
make && make install
下载apr-util安装包:
http://mirror.bjtu.edu.cn/apache//apr/apr-util-1.5.1.tar.gz
tar zxvf apr-util-1.5.1.tar.gz
cd apr-util-1.5.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
make && make install
下载pcre安装包:
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.zip
unzip pcre-8.32.zip
cd pcre-8.32
./configure --prefix=/usr/local/pcre
make && make install
安装httpd包:
tar zxvf httpd-2.4.3.tar.gz
cd httpd-2.4.3
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre/bin/pcre-config
make && make install
3、安装Tomcat
代码:
# tar -zxvf apache-tomcat-6.0.36.tar.gz
# mv apache-tomcat-6.0.36 /usr/local/tomcat6
# ln -s /usr/local/tomcat6/ tomcat (建立连接这一步可以不需要)
4、ajp_proxy方式整合配置
配置两个tomcat做负载均衡,tomcat1、tomcat2:
首先注意修改两个tomcat的端口配置,修改server.xml:
<Server port="8005" shutdown="SHUTDOWN">
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" />