我在灯[centos]网站有一个标题/caching问题。
configuration:
[root@localhost httpd]# httpd -v Server version: Apache/2.2.23 (Unix) Server built: Nov 25 2012 15:03:00 [root@localhost httpd]# php -v PHP 5.5.22 (cli) (built: Feb 20 2015 04:04:46) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2015, by Zend Technologies
php.ini中:
session.cache_limiter = public session.cache_expire = 535680
httpd.conf中:
<IfModule mod_expires.c> # enable expirations ExpiresActive On <FilesMatch "\.(php)$"> ExpiresDefault "access plus 1 month" Header set Cache-Control "max-age=32140800, public" Header unset ETag Header unset Last-Modified FileETag None </FilesMatch> </IfModule>
Meta标签:
<meta HTTP-EQUIV="cache-control" CONTENT="public, max-age=32140800">
问题:
清理access_log:
[root@localhost httpd]# > access_log
在firefox / chrome中按F5:
[root@localhost httpd]# cat access_log 192.168.0.16 - user [25/Jun/2015:04:16:19 +0100] "GET /path/si.php HTTP/1.1" 200 642 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36"
观察带有HTTP标头的Http头文件Firefox扩展:
http://192.168.0.249/path/si.php GET /path/si.php HTTP/1.1 Host: 192.168.0.249 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate DNT: 1 Cookie: __utma=254085576.10126650.1407082841.1422764987.1429480306.10; __utmz=254085576.1407082841.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=1cuf6d8764vu2i2u1hin4pg665 Authorization: Basic cmVjZqR0ZTq1c2VyMQ== Connection: keep-alive Cache-Control: max-age=0 HTTP/1.1 200 OK Date: Thu, 25 Jun 2015 03:18:04 GMT Server: Apache X-Powered-By: PHP/5.5.22 Expires: Fri, 01 Jul 2016 03:18:04 GMT Cache-Control: max-age=32140800, public Vary: Accept-Encoding,User-Agent Content-Encoding: gzip Content-Length: 643 Keep-Alive: timeout=15, max=13 Connection: Keep-Alive Content-Type: text/html; charset=utf-8
为什么地球上发送的最大年龄= 0头? Firefox和Chrome显示两个相同的行为。 这是额外的170ms,我目前负担不起。
更奇怪的是200个http响应代码。 我根本不修改页面,至less应该返回一个304 …
编辑:
好的,正如接受的答案所提出的,解决scheme是:
在该浏览器实例中第一次访问该页面之后,任何随后的正常访问都将来自caching:
当您在浏览器中点击F5时,您正在指示浏览器向path中的服务器和任何代理请求新的内容。 那个Cache-Control 请求头就是这样做的。 在正常导航期间不会被添加。
另外,PHP无法知道你的内容没有改变,尤其是在进行数据库调用时。 它不会为请求返回一个304,除非你在任何条件下添加代码。 设置caching控制响应头的原因是,如果资源在caching中,浏览器甚至不会发出请求 。
停止点击F5,正常浏览,并使用Fiddler或类似工具观看stream量。 你会发现,当你访问你的PHP页面,然后去其他地方,然后回来没有击中F5 ,你的浏览器显示你的PHP页面,甚至没有从服务器请求它。 您正在通过点击F5来改变正常的caching行为!