STe*_*TeN 30 caching client-server http browser-cache http-headers
什么是避免任何类型的http数据缓存的权威解决方案?我们可以修改客户端和服务器 - 所以我认为我们可以在客户端和服务器之间拆分任务.
客户端可以向每个请求附加一个随机参数http://URL/path?rand=6372637263- 我的感觉是只使用这种方式它不能100%工作 - 可能有一些智能代理,可以检测到...另一方面我认为如果URL不同从前一个,代理不能简单地决定发回一些缓存的响应.
在服务器上可以控制一堆HTTP头:
Expires: Tue, 03 Jul 2001 06:00:00 GMT
Last-Modified: {now} GMT
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Run Code Online (Sandbox Code Playgroud)
对此有何评论,最好的方法是什么?
sym*_*ean 45
服务器端缓存控制标头应如下所示:
Expires: Tue, 03 Jul 2001 06:00:00 GMT
Last-Modified: {now} GMT
Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate
Run Code Online (Sandbox Code Playgroud)
避免在客户端上重写URL,因为它会污染缓存,并导致其他奇怪的语义问题.此外:
使用一个Cache-Control标头(请参阅rfc 2616),因为未定义具有多个条目的行为.此外,第二高速缓存控制中的MSIE特定条目最多是冗余的.
no-store是关于数据安全性的.(它只表示不写入磁盘 - 仍允许缓存将响应存储在内存中).
Pragma: no-cache 在服务器响应中没有意义 - 它是一个请求头,这意味着接收请求的任何缓存必须将它转发到源.
使用两者Expires (http/1.0)并且cache-control (http/1.1)不是冗余的,因为只存在只能说http/1.0的代理,或者会降级协议.
从技术上讲,最后修改的标题是多余的no-cache,但最好留在那里.
有些浏览器会在遇到无法识别的缓存控制标头后忽略后续指令 - 所以先把重要的东西放在首位.
添加标题
Cache-control: private
Run Code Online (Sandbox Code Playgroud)
保证,网关缓存不会缓存此类请求。
我想向您推荐 Fabien Potencier 关于缓存的讲座:http://www.slideshare.net/fabpot/caching-on-the-edge