Apache2 Apache提供旧版本的文件

Apache2 Apache提供旧版本的文件,apache2,cache-control,Apache2,Cache Control,我正在本地主机上调试js代码,需要防止浏览器缓存文件。我不能使用附加到url的时间戳,因为它会删除chrome调试器断点 通常我不必刷新缓存,但我会在一段时间内刷新所有人。这是一个很大的问题,因为我去别处寻找bug。不久前,我在apache中添加了以下代码: <IfModule mod_headers.c> Header add Expires "Sun, 19 Nov 1978 05:00:00 GMT" Header add

我正在本地主机上调试js代码,需要防止浏览器缓存文件。我不能使用附加到url的时间戳,因为它会删除chrome调试器断点

通常我不必刷新缓存,但我会在一段时间内刷新所有人。这是一个很大的问题,因为我去别处寻找bug。不久前,我在apache中添加了以下代码:

    <IfModule mod_headers.c>
            Header add Expires "Sun, 19 Nov 1978 05:00:00 GMT"
            Header add Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
    </IfModule>

标题添加过期“1978年11月19日星期日05:00:00 GMT”
标头添加缓存控制“无存储,无缓存,必须重新验证,后检查=0,预检查=0”
有人能解释一下为什么Apache会把一个文件误认为是有效的,或者在配置代码中添加一些可以一劳永逸地解决这个问题的内容吗

使用以下解决方案的标题:

<IfModule mod_expires.c>
  expiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType text/javascript "access plus 1 seconds"
  ExpiresByType application/x-javascript "access plus 1 seconds"
</IfModule>

http://localhost/static/images/%d0%9a%d0%be%d0%bf%d0%b8%d1%8f%20logo_inner.png

GET /static/images/%d0%9a%d0%be%d0%bf%d0%b8%d1%8f%20logo_inner.png HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.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
Connection: keep-alive
Referer: http://localhost/static/images/
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Sun, 23 Dec 2012 19:33:20 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Thu, 28 Jun 2012 17:32:51 GMT
Etag: "b3c27-f1f-4c38bb88d96c0"
Accept-Ranges: bytes
Content-Length: 3871
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: image/png



HTTP/1.1 200 OK
Date: Sun, 23 Dec 2012 19:33:54 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Thu, 28 Jun 2012 17:32:51 GMT
Etag: "b3c27-f1f-4c38bb88d96c0"
Accept-Ranges: bytes
Content-Length: 3871
Cache-Control: max-age=1
Expires: Sun, 23 Dec 2012 19:33:55 GMT
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: image/png




The second request:

http://localhost/static/images/%d0%9a%d0%be%d0%bf%d0%b8%d1%8f%20logo_inner.png

GET /static/images/%d0%9a%d0%be%d0%bf%d0%b8%d1%8f%20logo_inner.png HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.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
Connection: keep-alive
Referer: http://localhost/static/images/
If-Modified-Since: Thu, 28 Jun 2012 17:32:51 GMT
If-None-Match: "b3c27-f1f-4c38bb88d96c0"
Cache-Control: max-age=0

HTTP/1.1 304 Not Modified
Date: Sun, 23 Dec 2012 19:34:58 GMT
Server: Apache/2.2.22 (Ubuntu)
Connection: Keep-Alive
Keep-Alive: timeout=15, max=99
Etag: "b3c27-f1f-4c38bb88d96c0"
Expires: Sun, 23 Dec 2012 19:34:59 GMT
Cache-Control: max-age=1

过期于
ExpiresDefault“访问加1秒”
ExpiresByType text/html“访问加1秒”
ExpiresByType文本/javascript“访问加1秒”
ExpiresByType应用程序/x-javascript“访问加1秒”
http://localhost/static/images/%d0%9a%d0%be%d0%bf%d0%b8%d1%8f%20logo_inner.png
获取/静态/图像/%d0%9a%d0%be%d0%bf%d0%b8%d1%8f%20logo_inner.png HTTP/1.1
主机:本地主机
用户代理:Mozilla/5.0(X11;Ubuntu;Linux x86_64;rv:16.0)Gecko/20100101 Firefox/16.0
接受:text/html、application/xhtml+xml、application/xml;q=0.9,*/*;q=0.8
接受语言:en-US,en;q=0.5
接受编码:gzip,deflate
连接:保持活力
推荐人:http://localhost/static/images/
缓存控制:最大年龄=0
HTTP/1.1200ok
日期:2012年12月23日星期日19:33:20 GMT
服务器:Apache/2.2.22(Ubuntu)
最后修改:2012年6月28日星期四17:32:51 GMT
Etag:“b3c27-f1f-4c38bb88d96c0”
接受范围:字节
内容长度:3871
过期时间:1978年11月19日星期日格林尼治标准时间05:00:00
缓存控制:无存储,无缓存,必须重新验证,后检查=0,预检查=0
保持活动状态:超时=15,最大=99
连接:保持活力
内容类型:图像/png
HTTP/1.1200ok
日期:2012年12月23日星期日19:33:54 GMT
服务器:Apache/2.2.22(Ubuntu)
最后修改:2012年6月28日星期四17:32:51 GMT
Etag:“b3c27-f1f-4c38bb88d96c0”
接受范围:字节
内容长度:3871
缓存控制:最大年龄=1
过期时间:2012年12月23日星期日19:33:55 GMT
保持活动状态:超时=15,最大=100
连接:保持活力
内容类型:图像/png
第二项请求:
http://localhost/static/images/%d0%9a%d0%be%d0%bf%d0%b8%d1%8f%20logo_inner.png
获取/静态/图像/%d0%9a%d0%be%d0%bf%d0%b8%d1%8f%20logo_inner.png HTTP/1.1
主机:本地主机
用户代理:Mozilla/5.0(X11;Ubuntu;Linux x86_64;rv:16.0)Gecko/20100101 Firefox/16.0
接受:text/html、application/xhtml+xml、application/xml;q=0.9,*/*;q=0.8
接受语言:en-US,en;q=0.5
接受编码:gzip,deflate
连接:保持活力
推荐人:http://localhost/static/images/
如果修改自:2012年6月28日星期四17:32:51 GMT
如果没有匹配:“b3c27-f1f-4c38bb88d96c0”
缓存控制:最大年龄=0
HTTP/1.1 304未修改
日期:2012年12月23日星期日19:34:58 GMT
服务器:Apache/2.2.22(Ubuntu)
连接:保持活力
保持活动状态:超时=15,最大=99
Etag:“b3c27-f1f-4c38bb88d96c0”
过期时间:2012年12月23日星期日19:34:59 GMT
缓存控制:最大年龄=1

如果我正确理解您的要求,您希望web浏览器不记住您正在访问的网页的任何内容,并且您的apache web服务器应该将其视为一个新页面请求。你可能首先想启用mod_expires和mod_headers,我使用ubuntu,所以我的是

a2enmod headers && a2enmod expires && service apache2 restart
比您要添加以下代码来执行最小缓存控制

<IfModule mod_expires.c>
  expiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType text/javascript "access plus 1 seconds"
  ExpiresByType application/x-javascript "access plus 1 seconds"
</IfModule>

过期于
ExpiresDefault“访问加1秒”
ExpiresByType text/html“访问加1秒”
ExpiresByType文本/javascript“访问加1秒”
ExpiresByType应用程序/x-javascript“访问加1秒”

如果您使用的是firefox,您可以通过安装/运行Live Http header插件来测试这一点,或者如果您是linux/unix,您可以使用curl-v您的\u url运行此请求。在交付静态文件时,Apache会发送一个ETag头,类似于文件的校验和。浏览器将缓存文件并记住ETag,该ETag随下一个请求一起发送

如果文件更改,浏览器ETag应该不同,Web服务器应该重新发送,当ETag相等时,Web服务器将响应
304 Not Modified
。ETag机制的优先级高于其他缓存头

要禁用ETag,可以使用apaches

FileETag None

Wikipedia有一篇关于Etag头的好文章

编辑

这应该是防水配置

FileETag None
<ifModule mod_headers.c>
    Header unset ETag
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
EDIT2

围绕配置包装FileMatch,以仅禁用特定文件扩展名的缓存

<filesMatch ".(php|js|css)$">
    FileETag None
    [..]
</filesMatch>

FileTag无
[..]

我用liveheaders测试了这一点,并附加了调试输出。在第二次尝试时,文件是从缓存加载的。谢谢,但它没有按照您的预期工作(我仍然得到304头)。我甚至还尝试过添加Header unset Pragma Header unset ETag FileETag none删除浏览器缓存一次,并确保ETag实际上不再由apache设置(正确的配置)。ETag肯定是由apache发送的。我不知道如何更正配置,因为正如您所说和其他教程所说,我已将这些行添加到我的虚拟主机文件中。在上面添加了一个配置示例,该示例应适用于所有情况,谢谢。还有,有没有办法只为.js、.css和.php设置此选项?
<filesMatch ".(php|js|css)$">
    FileETag None
    [..]
</filesMatch>