代理缓存 - cookie怎么样?

Hop*_*You 17 proxy caching header http cache-control

我阅读了http://code.google.com/speed/page-speed/docs/caching.html.它说代理服务器可以缓存cookie.我需要澄清一下.


假设我的文件有这个标题:Cache-Control "max-age=604800, public"
Q.1.使用此标头,当访问静态文件时,来自个人计算机的cookie是否会缓存在代理服务器上?(然后,下一个访问该文件的人会拿起另一个人的饼干吗?)


现在,让我们说缓存代码就像Cache-Control "max-age=7200, proxy-revalidate".
Q.2.就代理服务器上的cookie缓存而言,有什么区别?


现在我对实际设置 cookie的文件(例如Javascript或PHP)有疑问.
Q.3.访问这些类型的文件时,cookie是否会缓存在代理服务器上?或者缓存与静态文件相同?


如果你想知道,我问这些事情的原因是因为我没有一个人的cookie被代理缓存,因此转移到另一个人.所以任何澄清都会有所帮助.非常感谢!


编辑:
非常感谢您的帮助.但我还需要一点澄清.

如果我有使用标题的文件Cache-Control "max-age=604800, public",是否会将任何请求cookie(Cookie)或响应cookie(Set-Cookie)转移到另一个用户的计算机(因为它在缓存中)?或者它是否针对该用户的浏览进行缓存?如果设置是Cache-Control "max-age=7200, proxy-revalidate"什么?再次感谢.

tro*_*skn 19

它取决于代理和Vary响应标头.通常,代理不会缓存对具有Cookie标头的请求的响应.但是,这并不能保证.

当您使用Cache-Control指令指定标头时public,您要求代理在不同客户端之间共享缓存.这可能不是你的意图,所以你应该指定private.请参阅:http://www.mnot.net/cache_docs/#CACHE-CONTROL

就代理服务器上的cookie缓存而言,有什么区别?

并不是的.它只是告诉代理它不应该从过时的缓存中提供服务.它不会影响缓存的控制方式.

访问这些类型的文件时,cookie是否会缓存在代理服务器上?或者缓存与静态文件相同?

对于http级软件(例如代理),静态和动态内容之间没有区别.Cookie只是与请求(Cookie标头)一起发送或与响应(Set-Cookie标头)一起发送的http标头

如果您在浏览器中设置cookie(通过Javascript或从服务器端,通过Set-Cookie标头),浏览器将返回cookie,并将所有后续请求发送到同一域.它通过Cookie在请求中添加标头来实现此目的.

编辑:

我确实希望我的实际文件缓存在代理上,而不是单个用户的cookie.我该怎么做呢?

您需要避免缓存任何响应:

  • 包含一个Set-Cookie标题(因为这会被代理缓存)
  • 服务器端存在副作用(例如,对于您的应用程序来说接收请求很重要 - 例如,缓存跟踪像素是没有意义的)
  • 请求Cookie标头的内容确定要呈现的内容(例如打印"欢迎回来,John Doe"或其他自定义)

你究竟要做到这一点取决于你的后端技术.您的应用程序知道Cookie标头是否对响应有意义,或者响应是否可能包含Set-Cookie标头.

在我使用的应用程序框架中,有一个用于设置cache-by-expires头的函数.如果我在同一个请求中调用它并访问cookie,我将收到错误消息.这可以确保我不会不小心要求代理缓存私有内容.您需要在应用程序中实现类似的逻辑.

或者,您可以配置边缘级代理以执行相同的操作.如果您不完全控制应用程序,通常会执行此操作.

如果我有使用标题Cache-Control"max-age = 604800,public"的文件,任何请求cookie(Cookie)或响应cookie(Set-Cookie)是否会被转移到另一个用户的计算机(因为它在缓存中)?或者它是否仅针对该用户的浏览进行缓存?

请求cookie不会被缓存,也不会在任何地方传输.response(Set-Cookie)缓存.由于您指定cache-control为public,因此将在所有客户端之间共享.请注意,即使请求cookie未直接缓存,如果您在页面中呈现某些内容,依赖于cookie(例如,如果您将cookie用于服务器端会话状态,例如身份验证),您将缓存个性化响应.

如果设置是Cache-Control"max-age = 7200,proxy-revalidate"怎么办?再次感谢.

一样.proxy-revalidate通知任何代理(如果有的话)它们可能不提供过时的缓存.例如,一旦7200秒过去,应立即清除缓存.如果没有这个,缓存通常会继续提供过时的缓存,然后在达到超时后在后台获取新的副本.或不 - 取决于代理.