【问题标题】:Proxy cacheing - What about cookies? [closed]代理缓存 - cookie 怎么样? [关闭]
【发布时间】:2012-03-09 05:10:12
【问题描述】:

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


假设我的文件有这个标头:Cache-Control "max-age=604800, public"
Q.1. 有了这个标头,当一个人的计算机的 cookie 是静态的时,是否会缓存在代理服务器上文件被访问? (那么,下一个访问文件的人会获取其他人的 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" 呢?再次感谢。

【问题讨论】:

    标签: http caching proxy header cache-control


    【解决方案1】:

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

    当您使用指令public 指定Cache-Control 标头时,您要求代理在不同客户端之间共享缓存。这可能不是您的意图,因此您应该指定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 不会被缓存,也不会被传输到任何地方。响应 (Set-Cookie) 缓存。由于您将cache-control 指定为公共,它将在所有客户端之间共享。请注意,即使请求 cookie 没有直接缓存,如果您在页面中呈现依赖于 cookie 的内容(例如,如果您将 cookie 用于服务器端会话状态,例如身份验证),您将缓存个性化响应。

    如果设置是 Cache-Control "max-age=7200, proxy-revalidate" 呢?再次感谢。

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

    【讨论】:

    • 我确实希望将我的实际文件缓存在代理上,但个人用户的 cookie。我该怎么做?
    • 非常感谢。我已经更新了我的问题。任何额外的帮助都会很棒。
    • 你说proxies will not cache a response to a request that has a Cookie header. 问题是这样的:当我请求图像和CSS之类的文件时,浏览器会发送cookie(尽管它们对于渲染是不必要的——这只是浏览器的工作方式)。这是否意味着这些文件不会被缓存?
    • 可能是的。这取决于代理。您可以使用 Vary 标头来控制它(但这有其自身的问题),或者您可以通过没有 cookie 的子域提供静态内容。
    • 非常感谢您提供的所有帮助。我认为这涵盖了我需要的一切!
    猜你喜欢
    • 1970-01-01
    • 2011-07-02
    • 2014-07-03
    • 2011-07-07
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多