缓存首先是由报头控制的,如果没报头,则由<META HTTP-EQUIV="Expires" CONTENT=">
指定
首先你请求页面时,服务器会给出缓存控制信息,如果本地的缓存没有过期,则直接读本地缓存,如果过期了,则返回一个新页缓存在本地会有缓存文件,和你另行保存没有关系,缓存可以脱机浏览所以说,有没有缓存,和服务器密切相关具体可以看http1.1协议缓存部分
指定
首先你请求页面时,服务器会给出缓存控制信息,如果本地的缓存没有过期,则直接读本地缓存,如果过期了,则返回一个新页缓存在本地会有缓存文件,和你另行保存没有关系,缓存可以脱机浏览所以说,有没有缓存,和服务器密切相关具体可以看http1.1协议缓存部分
这个意思是这样的,如果你请求一个网页,服务器会判断你的客户端的缓存是否过期,如果过期,则重新给你一个页,如果不过期,则直接调用本地缓存如果网络连不上,则ie会查找本地是否有缓存,如果有,则给出缓存页,如果没有,则出错服务器端可以设置客户端的缓存情况,其中header的优先级要高于<META HTTP-EQUIV="Expires" CONTENT=">指定
上面是我的理解,不一定正确
我看一下header能不能实现
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样:
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
If-Modified-Since: Fri, 12 May 2006 18:53:33 GMT
如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。但不知道你说的服务器头信息代码该怎么写? 难道是直接把上述代码放进php去!!
<meta http-equiv="pragma" content="private">
<meta http-equiv="cache-control" content="private">看看上面两个试试
header("Expires:Mon, 27 Oct 2009 21:31:29 GMT"); ?>
对于其他firefox等浏览器没有用!!
Server: Apache/2.2.4 (Unix) PHP/5.1.4
Last-Modified: Mon, 27 Oct 2008 03:41:00 GMT
Etag: "c538"
Accept-Ranges: bytes
Cache-Control: max-age=259200
Expires: Fri, 31 Oct 2008 02:14:04 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 14590
Content-Type: text/html200 OK
这是好123的header
参考一下,header输出Last-Modified: Mon, 27 Oct 2008 03:41:00 GMT
Cache-Control: max-age=259200
Expires: Fri, 31 Oct 2008 02:14:04 GMT
在ie浏览器里好多中方法都可以实现客户端缓存,可在firefox等浏览器中却不可以,查看hao123的页面原代码,里面好像并没有提到http协议的缓存代码,那hao123是怎么实现在几乎所有浏览器中都可以实现缓存功能!!!!
Expires: Fri, 31 Oct 2009 02:14:04 GMT用这两个应该就可以了
header("Expires: Fri, 31 Oct 2009 02:14:04 GM");
刚刚测试了,在php文件的最顶端加入如下代码可实现在firefox浏览器中的客户端缓存!!<?php
$time = mktime(date("H")+8,date("i"),date("s"),date("m"),date("d"),date("Y"));
header('Cache-Control: max-age=259200');
header("Expires: Fri, 31 Oct 2009 02:14:04 GMT");
header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).' GMT');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
aaaaaaaaaaaaaaaaaaaaaaaaaaa
</body></html>
ob_start();
$time = mktime(date("H")+8,date("i"),date("s"),date("m"),date("d"),date("Y"));
header('Cache-Control: max-age=259200');
header("Expires: Fri, 31 Oct 2009 02:14:04 GMT");
header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).' GMT');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<?php echo "ddddee";?>
aaaaaaaaaaaaaaaaaaaaaaaaaaa
</body>
</html><?php
$str = ob_get_contents();
ob_end_clean();if(file_exists("2.htm")){
file_put_contents("2.htm",$str);
}else{
echo "该文件不存在!";
}
echo "<script>window.location.href='2.htm'</script>";
?>
用header函数也可以做到,
但是,apache默认下,304除外,是应该返回Last-Modified,浏览器,通常也主要看这里。
代码该怎样写呢??我有点困惑!!!
我用的是虚拟服务器!!
不过对apache使用不太熟悉!!抱歉!!
我在网上找了一下资料可能是别人感觉太简单都没有怎么说去设置apache,
只是说“静态页面不用去管它了,如果想更好的控制静态页面的缓存,apache有几个模块可以很好的控制,这里不讨论”能请教一下“apache有几个模块可以很好的控制”????
谢谢!!!
http://httpd.apache.org/docs/2.2/en/mod/mod_cache.html
我在网上查了!!查到!在文件httpd.conf的最后加上并重新启动服务器!本地上测试还是只能够在ie浏览器中实现客户端缓存,但firefox浏览器中仍不能缓存!!
<IfModule mod_cache.c>
CacheForceCompletion 100
CacheDefaultExpire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1
</IfModule> 我在网页中代码:<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<META HTTP-EQUIV="Expires" CONTENT="Mon, 04 Dec 2009 21:29:02 GMT">
<meta http-equiv="cache-control" content="max-age=99999">
<meta http-equiv="pragma" content="private">
<title>55zhan</title>
</head>
<body>
爱上对方撒旦送达阿斯顿撒旦法撒旦法是
<br><br><br>
<a href="http://www.hao123.com">hao123</a>
</body>
</html>