http - 代理缓存 - cookie 呢?

标签 http caching proxy header cache-control

<分区>

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


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


现在,假设缓存代码改为 Cache-Control "max-age=7200, proxy-revalidate"
Q.2代理服务器上的 cookie 缓存有什么区别?


现在我有一个关于实际设置 cookie 的文件(例如 Javascript 或 PHP)的问题。
Q.3. cookie 会缓存在访问这些文件时的代理服务器?还是缓存和静态文件一样?


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


编辑:
非常感谢大家的帮助。但我还需要再说明一点。

如果我有使用 header Cache-Control "max-age=604800, public" 的文件,任何请求 cookie(Cookie) 或响应 cookie (Set-Cookie) 被传输到另一个用户的计算机(因为它在缓存中)?还是为该个人用户的浏览缓存它?如果设置为 Cache-Control "max-age=7200, proxy-revalidate" 会怎么样?再次感谢。

最佳答案

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

当您使用指令 public 指定您的 Cache-Control header 时,您要求代理在不同客户端之间共享缓存。这大概不是您的意图,因此您应该改为指定private。请参阅:http://www.mnot.net/cache_docs/#CACHE-CONTROL

What would be the difference as far as cookie cacheing on the proxy server?

不是真的。它所做的只是告诉代理它不应该从陈旧的缓存中提供服务。它不会影响缓存的控制方式。

Will cookies be cached on the proxy server when these kinds of files are accessed? Or is the cacheing the same as static files?

对于 http 级别的软件(例如代理),静态和动态内容之间没有区别。 Cookie 仅仅是随请求发送的 http header (Cookie header )或随响应发送的(Set-Cookie header )

如果您在浏览器中设置 cookie(通过 Javascript 或从服务器端,通过 Set-Cookie header ),浏览器会将 cookie 与所有后续请求一起发送回相同的领域。它通过在请求中添加一个 Cookie header 来实现这一点。

编辑:

I do want my actual files to be cached on the proxy, but not individual users' cookies. How do I do this?

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

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

具体如何操作取决于您的后端技术。您的应用程序知道 Cookie header 是否对响应很重要,或者响应是否可能包含 Set-Cookie header 。

在我使用的应用程序框架中,有一个用于设置缓存过期 header 的功能。如果我调用它并在同一个请求访问 cookie 中,我会得到一个错误。这确保我不会不小心要求代理缓存私有(private)内容。您需要在您的应用程序中实现类似的逻辑。

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

If I have files using header Cache-Control "max-age=604800, public", will any request cookies (Cookie) or response cookies (Set-Cookie) be transferred to another user's computer (since its in the cache)? Or will it be cached only for that individual user's browsing?

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

What about if the setting is Cache-Control "max-age=7200, proxy-revalidate"? Thanks again.

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

关于http - 代理缓存 - cookie 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334393/

相关文章:

apache - 重写由 apache 提供的内容

java - 在android中将HttpParams添加到HttpClient返回服务器错误(400)

http - 如何使 curl 发布一个参数,从文件中读取它的值?

http - 如何在不同的方案 (http/https) 下访问 HTML5 session 存储

python - 是否可以将 render_to_response 模板从 django 保存到服务器?

ios - 无法在装有 iOS 11.0.1 的设备上使用 Charles 4.1.4 中的 SSL 代理

security - nginx - 限制对 https 的直接 URL 访问,但可以从 http 重定向

ruby-on-rails - 从表中删除列后如何避免Rails应用程序崩溃?

android - 查看 Android WebView 是否显示缓存页面

python - 我怎样才能最轻松地通过 python 的 TLS 代理命令制作 TLS?