2012-02-23 97 views
0

我想阻止浏览器缓存某些文件(出于版权原因)。我知道你可以使用PHP更改页眉:完全禁止浏览器缓存

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 

这是因为它得到好处呢?任何人都可以想到额外的安全层?

回答

1

将在资源的URL时间戳:

http://example.com/img.jpg?t=12234234 //append this in the server side 

这个傻瓜浏览器和服务器认为它是一个新的资源每次。只要确保每次的价值都不一样。这适用于任何资源(人纠正我,如果我错了)像普通的HTML,图像等

Random Querystring to avoid IE caching

但是,资源仍保存在缓存中,无论它是否已过期。当资源到期时,所有浏览器都会等待用户再次检查站点,重新下载资源并覆盖缓存中现有的资源。直到用户这样做,它不会从缓存中删除。


防止缓存的另一种方法是在您的连接中使用SSL。默认情况下,浏览器不会缓存SSL'ed站点 - 除了解密的额外开销之外,还有一个主要原因,即为什么避免使用SSL。然而,仍然有些浏览器允许SSL缓存(据我所知,Firefox可以)并且仍然不会改变资源被发送到用户浏览器的事实 - 可以在调试器上拦截或查看资源。


以上所有方法都可以防止缓存,但不会阻止任何人窃取您的图像。互联网的整个想法是从另一台计算机访问资源。据说,用户有权访问这些资源。任何到达浏览器的内容都受到用户意愿的限制。他可以看看它,查看源代码,在到达时拦截它,使用调试器进行查看。

你在互联网上放置的任何东西就像是在公开场合交出了一百万美元 - 你无法阻止盗贼看守,你可能不知道你所处理的人是否也是小偷。


避免你被其他人拥有的图像的唯一傻瓜式的方法是在它上面放置一个大水印!

+1

该技术通常被称为[缓存破坏](http://html5boilerplate.com/docs/Version-Control-with-Cachebusting/) – AD7six 2012-02-23 09:48:07

+0

很高兴知道它有一个名称也 – Joseph 2012-02-23 09:57:58

+0

感谢您的答复约瑟夫,但这不是我想要的。即使您将随机字符串添加到URL中,该文件仍然被缓存。换句话说,用户仍然可以轻松地从缓存中抓取文件并重新分配。我希望找到一个不让高速缓存摆在首位的防弹方法。 – 2012-02-27 17:30:59