最近自己在做一个网站,由于需要改动css文件,发现修改之后,页面没有发生变化。于是就用chrome浏览器开发工具去看对应的样式,发现和修改之前的一样。没有发生变化,初步怀疑浏览器缓存了资源文件,清空chorme浏览器之后,发现问题解决了,页面和预期的一样。
为了确认这种情况,想跟踪apache 请求处理情况,也打开了 apache的访问日志,在httpd.conf文件里面打开了apache的访问日志
CustomLog "/Applications/MAMP/logs/apache_access.log" common
在第一次打开页面的时候,access.log 会受到两个http请求
第一个请求是index.php ,第二个请求是default.css
而进行第二次访问index.php的时候,apache只接受了第一个请求index.php,浏览器没有发起第二个请求。根据http协议,应该是第一次请求css文件的时候,apache告诉浏览器缓存资源文件,所以第二次就直接使用本地缓存,当清空本地缓存之后,就必须重新请求资源文件。
考虑到不能靠这种方式来进行调试css,否则效率太低了一点。我的程序是基于LAMP架构的,开发平台是MAC OS X10.8 。由apache接收请求,如果发现后缀是php,则通过php模块来处理。由于资源文件时静态文件,这个和apache自身的缓存设置有关,就搜索apache的缓存设置。
apache缓存设置是通过在config模块里面设置,通过设置httpd.conf文件里面的expires_module模块来来进行实现
LoadModule expires_module modules/mod_expires.so
这个mod_expires功能主要是在response 头部里面添加 Cache-Control 头部的 max-age 值,这个值就是设置缓存的失效时间。
第一个想法就是把 expires_module 模块关闭掉,也就是注释掉,不让生成这个头部。
于是重启apache,再次进行调试,第一次访问页面和第二次访问页面就一样了,浏览器都会重新请求css资源文件。
如果在windows平台,ie有一个选项设置:每次访问此页时检查——就会表示浏览器每次访问一个页面时,不管浏览器是否缓存过此页面,都要向服务器发出访问请求
不过chorme里面没有这个功能,只能通过修改apache来实现了,如果在windows平台,只需要设置ie内容选项即可。